BotClass.py 3.9 KB

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