import xmpp from xmpp import cli import config from BotClass import JabberBot import json # загрузка json файла def read_inf(file_name): with open(file_name, 'r', encoding="utf-8") as file: return json.load(file) # обработчик входящих сообщений def message_handler(conn, mess): text = mess.getBody()#текст сообщения боту user = mess.getFrom()#отправитель сообщения #работа с файлом в таком виде для входящей информации не нужна, так как бот должен обрабатывать входящие сообщения, а не файлы на сервере, и не сохраняет входящие сообщения в файлы. Он должен входящее сообщение поместить в очередь (список) на обработку. # При запуске бота он инициализирует пустой список, далее делает запрос к API для выгрузки в него всех заявок с его статусом для обработки и все элементы (если они есть) добавляет с помощью append в список. #При получении сообщения от кого-нибудь он также делает в список append #Каждлый пустой (не существующий) вызов API описывается как fake_api_call #Элемент списка удаляется, если с момента timestamp внутри json прошло больше 1 часа (соответственно json должен быть такого вида, что эта информация там есть) applications = read_inf("applications.json") print(text) print(mess) if text is not None: message = xmpp.Message() applications = read_inf("applications.json") #если бот получает сообщение, соответсвующее значению id("1","2","3") #он отправит описание desc этого определенного объекта for app in applications["applications"]: if app.get("id") == text: message.setBody(app.get("desc")) # если бот получает сообщение, он отправляет такое же сообщение отправителю # message.setBody(text) message.setFrom(config.JID) message.setTo(user) message.setType('chat') conn.send(message) # пример функции, которую можно вызвать из любой части кода для отправки сообщения от бота пользователю def simple_send_message(): cli.send_message(config.JID, config.PASSWORD, "test@msg.sharix-app.org", "request.data") # recipient - это конкретный jid следующего обработчика заявки, ticket - json с заявкой def proceed_status(recipient, ticket): cli.send_message(config.JID, config.PASSWORD, recipient, ticket) # в message помещается смысл и сам вызов API, который должен быть, но которого нет, а также хорошо туда добавить номер заказа (взять из json) и название бота def fake_api_call(message): cli.send_message(config.JID, config.PASSWORD, "test@msg.sharix-app.org", message) #Авторизация и запуск бота bot = JabberBot(config.JID, config.PASSWORD) bot.register_handler('message', message_handler) bot.start()