BotClass.py 2.8 KB

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