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