import sys, xmpp from xmpp import cli from datetime import datetime 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.user, self.server, self.password = jid.getNode(), jid.getDomain(), password self.connect() self.auth() #Метод проверки подключения к серверу xmpp def connect(self): self.conn = xmpp.Client(self.server, self.port,debug = []) #self.conn = xmpp.Client(self.server,debug = []) conn_result = self.conn.connect() if not conn_result: print("Can't connect to server!\n") sys.exit(1) #Метод аутентификации def auth(self): #по идее, тут может быть актуально также передать информацию относительно порта, например auth_result = self.conn.auth(self.user, self.password) if not auth_result: print (self.user, self.password) print("Can't to authorize!\n") 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 fake_api_call(self, message): #HTTP запрос #jsreq.requestGetListUser() #cli.send_message(self.user, self.password, "test@ej.sharix-app.org", message) print('fake_api_call: ', message) def bot_log(self, message): #надо строчку лога сделать более информативной logfile = open(datetime.now().strftime('%Y-%m-%d') + "-" + self.user + ".log", "a") logfile.write(message) logfile.close() #cli.send_message(self.user, self.password, "test@ej.sharix-app.org", message) # recipient - это конкретный jid следующего обработчика заявки, ticket - json с заявкой. def proceed_status(self, recipient, ticket): #тут могут быть различные проверки дополнительные, а так вообще эта функция нужна для передачи заявки на обработку следующему #TODO - почему-то тут валится, пока заменено на затычку #cli.send_message(self.user, self.password, recipient, ticket) self.conn.send(xmpp.Message(recipient, ticket)) print ("Message sent successfully", recipient, ticket) #сюда можно как параметры передавать переменную для значения Process в вызываемой функции, а также передавать информацию о том, какой из обработчиков ввызывать в бесконечном цикле def start(self, handler, *args): self.conn.sendInitPresence()#статус аккаунта бота (активен или нет) print("Bot started!") while self.step_on(): #это вызов конкретной функции для обработки статуса конкретным ботом #handler(args) handler() pass