BotClass.py 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import json
  2. import sys
  3. from datetime import datetime
  4. import xmpp
  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.connect()
  12. self.auth()
  13. # TODO: Добавить поля
  14. # botname
  15. # Метод проверки подключения к серверу xmpp
  16. def connect(self):
  17. self.conn = xmpp.Client(self.server, self.port, 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:
  37. return 0
  38. return 1
  39. # TODO: Рефакторинг логов после добавления полей в JabbrBot
  40. # def bot_log(self, message):
  41. # self.bot_basic_log(self.botname + " " + str(datetime.now()) + " " + "Заказ ожидает пользовательской реакции\n")
  42. # def bot_basic_log(self, message):
  43. # # надо строчку лога сделать более информативной
  44. # logfile = open("logs/" + datetime.now().strftime('%Y-%m-%d') + "-" + self.user + ".log", "a")
  45. # logfile.write(message)
  46. # logfile.close()
  47. # print(message)
  48. def bot_log(self, message):
  49. # надо строчку лога сделать более информативной
  50. logfile = open("logs/" + datetime.now().strftime('%Y-%m-%d') + "-" + self.user + ".log", "a")
  51. logfile.write(message)
  52. logfile.close()
  53. print(message)
  54. def send_notification(self, recipient, message):
  55. self.conn.send(xmpp.Message(recipient, message))
  56. self.bot_log("Message sent successfully" + " " + recipient + " " + message)
  57. # recipient - это конкретный jid следующего обработчика заявки, ticket - json с заявкой.
  58. def proceed_status(self, recipient, ticket):
  59. # тут могут быть различные проверки дополнительные, а так вообще эта функция нужна для передачи заявки на обработку следующему
  60. jsonTicket = json.dumps(ticket.__dict__)
  61. self.conn.send(xmpp.Message(recipient, jsonTicket))
  62. self.bot_log("Message sent successfully" + " " + recipient + " " + jsonTicket)
  63. # сюда можно как параметры передавать переменную для значения Process в вызываемой функции, а также передавать информацию о том, какой из обработчиков ввызывать в бесконечном цикле
  64. def start(self, handler, *args):
  65. self.conn.sendInitPresence() # статус аккаунта бота (активен или нет)
  66. print("Bot started!")
  67. while self.step_on():
  68. # это вызов конкретной функции для обработки статуса конкретным ботом
  69. # handler(args)
  70. handler()
  71. pass
  72. def stop(self):
  73. # Disconnect from the Jabber server
  74. self.client.disconnect()