12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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 с заявкой.
- #С помощью sender мы отвязываемся от конфига на каждого обработчика и даем возможность для реализации новой схемы
- def proceed_status(recipient, ticket, sender=config.JID):
- cli.send_message(sender, 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)
|