/plugins/plugin_version.py

https://github.com/rogovvladimir/xmpp-bot
Python | 60 lines | 51 code | 9 blank | 0 comment | 5 complexity | f33e67d576986a3394ed496947d23a09 MD5 | raw file
  1. import re
  2. from . import BaseCommand
  3. from twilix.jid import internJID, InvalidFormat
  4. from twilix.base.exceptions import WrongElement
  5. from twilix.base.myelement import BreakStanza
  6. from twisted.internet import defer
  7. class versionCommand(BaseCommand):
  8. COMMAND = u'version'
  9. HELP = u"[with no parametrs, with 'me' parametr or any jabber id] \
  10. show version's info"
  11. COMMAND_REGEX = re.compile(ur'^(version)(?: (me|.+))?$')
  12. def clean_body(self, value):
  13. super(type(self), self).clean_body(value)
  14. param = self.cmdpars.group(2)
  15. if not param:
  16. self.jid = self.host.client_jid
  17. elif param == u'me':
  18. self.jid = self.from_
  19. else:
  20. try:
  21. self.jid = internJID(param)
  22. except InvalidFormat:
  23. raise WrongElement
  24. return value
  25. @defer.inlineCallbacks
  26. def chatHandler(self):
  27. defr = self.host.version.getVersion(self.jid)
  28. defr.addCallback(makeMessage, self.jid)
  29. defr.addErrback(makeErrormessage, self.jid)
  30. res = yield defr
  31. reply = self.get_reply()
  32. reply.body = res
  33. defer.returnValue((reply, BreakStanza()))
  34. @defer.inlineCallbacks
  35. def groupchatHandler(self):
  36. defr = self.host.version.getVersion(self.jid)
  37. defr.addCallback(makeMessage, self.jid)
  38. defr.addErrback(makeErrormessage, self.jid)
  39. res = yield defr
  40. reply = self.get_reply()
  41. reply.body = u'%s: %s' %(reply.to.resource, res)
  42. reply.to = reply.to.bare()
  43. defer.returnValue((reply, BreakStanza()))
  44. def makeMessage(defr, jid):
  45. res = u"%s client's information :\nname : %s \nversion : %s\nos \
  46. : %s" % (jid,defr.client_name, defr.client_version, defr.client_os)
  47. return res
  48. def makeErrormessage(defr, jid):
  49. res = u'Impossible to get %s version, because [%s]'\
  50. % (jid, defr.value.reason)
  51. return res