BotClass.py 3.4 KB

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