BotClass.py 2.7 KB

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