BotClass.py 3.0 KB

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