BotClass.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import sys, xmpp
  2. from xmpp import cli
  3. from datetime import datetime
  4. import jsonAndRequest as jsreq
  5. #Основной класс бота
  6. class JabberBot:
  7. def __init__(self, jid, password, port):
  8. self.jidd = jid
  9. jid = xmpp.JID(jid)
  10. self.user, self.server, self.password, self.port = jid.getNode(), jid.getDomain(), password, port
  11. #self.user, self.server, self.password = jid.getNode(), jid.getDomain(), password
  12. self.connect()
  13. self.auth()
  14. #Метод проверки подключения к серверу xmpp
  15. def connect(self):
  16. self.conn = xmpp.Client(self.server, self.port,debug = [])
  17. #self.conn = xmpp.Client(self.server,debug = [])
  18. conn_result = self.conn.connect()
  19. if not conn_result:
  20. print("Can't connect to server!\n")
  21. sys.exit(1)
  22. #Метод аутентификации
  23. def auth(self):
  24. #по идее, тут может быть актуально также передать информацию относительно порта, например
  25. auth_result = self.conn.auth(self.user, self.password)
  26. if not auth_result:
  27. print (self.user, self.password)
  28. print("Can't to authorize!\n")
  29. sys.exit(1)
  30. #Метод для привязки функций к событиям
  31. def register_handler(self, name, handler):
  32. self.conn.RegisterHandler(name, handler)
  33. def step_on(self):
  34. try:
  35. self.conn.Process(1) #с какой частотой происходит подключение к серверу, в данном случае каждую секунду
  36. except KeyboardInterrupt: return 0
  37. return 1
  38. def fake_api_call(self, message):
  39. #HTTP запрос
  40. #jsreq.requestGetListUser()
  41. #cli.send_message(self.user, self.password, "test@ej.sharix-app.org", message)
  42. print('fake_api_call: ', message)
  43. def bot_log(self, message):
  44. #надо строчку лога сделать более информативной
  45. logfile = open(datetime.now().strftime('%Y-%m-%d') + "-" + self.user + ".log", "a")
  46. logfile.write(message)
  47. logfile.close()
  48. #cli.send_message(self.user, self.password, "test@ej.sharix-app.org", message)
  49. # recipient - это конкретный jid следующего обработчика заявки, ticket - json с заявкой.
  50. def proceed_status(self, recipient, ticket):
  51. #тут могут быть различные проверки дополнительные, а так вообще эта функция нужна для передачи заявки на обработку следующему
  52. #TODO - почему-то тут валится, пока заменено на затычку
  53. #cli.send_message(self.user, self.password, recipient, ticket)
  54. self.conn.send(xmpp.Message(recipient, ticket))
  55. print ("Message sent successfully", recipient, ticket)
  56. #сюда можно как параметры передавать переменную для значения Process в вызываемой функции, а также передавать информацию о том, какой из обработчиков ввызывать в бесконечном цикле
  57. def start(self, handler, *args):
  58. self.conn.sendInitPresence()#статус аккаунта бота (активен или нет)
  59. print("Bot started!")
  60. while self.step_on():
  61. #это вызов конкретной функции для обработки статуса конкретным ботом
  62. #handler(args)
  63. handler()
  64. pass