123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import sys, xmpp
- from xmpp import cli
- from datetime import datetime
- import json
- import logging
- import loggingConfig
- import pprint
- import jsonAndRequest as jsreq
- #Основной класс бота
- class JabberBot:
- def __init__(self, jid, password, port):
- self.jidd = jid
- jid = xmpp.JID(jid)
- self.user, self.server, self.password, self.port = jid.getNode(), jid.getDomain(), password, port
- self.connect()
- self.auth()
- #Метод проверки подключения к серверу xmpp
- def connect(self):
- self.conn = xmpp.Client(self.server, self.port,debug = [])
- conn_result = self.conn.connect()
- if not conn_result:
- print("Can't connect to server!\n")
- logging.info("Can't connect to server!")
- sys.exit(1)
- #Метод аутентификации
- def auth(self):
- #по идее, тут может быть актуально также передать информацию относительно порта, например
- auth_result = self.conn.auth(self.user, self.password)
- if not auth_result:
- # print (self.user, self.password)
- logging.debug(self.user, self.password)
- # print("Can't to authorize!\n")
- logging.info("Can't to authorize!")
- sys.exit(1)
- #Метод для привязки функций к событиям
- def register_handler(self, name, handler):
- self.conn.RegisterHandler(name, handler)
- def step_on(self):
- try:
- self.conn.Process(1) #с какой частотой происходит подключение к серверу, в данном случае каждую секунду
- except KeyboardInterrupt:
- return 0
- return 1
- def bot_log(self, message):
- #надо строчку лога сделать более информативной
- logfile = open(datetime.now().strftime('%Y-%m-%d') + "-" + self.user + ".log", "a")
- logfile.write(message)
- logfile.close()
- # print (message)
- def send_notification(self, recipient, message):
- self.conn.send(xmpp.Message(recipient, message))
- # self.bot_log("Message sent successfully"+" "+recipient+" "+message)
- logging.debug(f"Message sent successfully\nRecipient: {recipient}\nMessage: {pprint.pformat(message)}")
- # recipient - это конкретный jid следующего обработчика заявки, ticket - json с заявкой.
- def proceed_status(self, recipient, ticket):
- #тут могут быть различные проверки дополнительные, а так вообще эта функция нужна для передачи заявки на обработку следующему
- jsonTicket = json.dumps(ticket.__dict__)
- self.conn.send(xmpp.Message(recipient, jsonTicket))
- # self.bot_log("Message sent successfully"+" "+recipient+" "+jsonTicket)
- logging.debug(f"Message sent successfully\nRecipient: {recipient}\nJsonTicket: {pprint.pformat(jsonTicket)}")
- #сюда можно как параметры передавать переменную для значения Process в вызываемой функции, а также передавать информацию о том, какой из обработчиков ввызывать в бесконечном цикле
- def start(self, handler, *args):
- self.conn.sendInitPresence()#статус аккаунта бота (активен или нет)
- print("Bot started!")
- logging.info("Bot started!")
- while self.step_on():
- #это вызов конкретной функции для обработки статуса конкретным ботом
- #handler(args)
- handler()
- pass
|