open-st_request-assigned.py 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import xmpp
  2. from xmpp import cli
  3. import config
  4. from BotClass import JabberBot
  5. import json
  6. # загрузка json файла
  7. def read_inf(file_name):
  8. with open(file_name, 'r', encoding="utf-8") as file:
  9. return json.load(file)
  10. # обработчик входящих сообщений
  11. def message_handler(conn, mess):
  12. text = mess.getBody()#текст сообщения боту
  13. user = mess.getFrom()#отправитель сообщения
  14. #работа с файлом в таком виде для входящей информации не нужна, так как бот должен обрабатывать входящие сообщения, а не файлы на сервере, и не сохраняет входящие сообщения в файлы. Он должен входящее сообщение поместить в очередь (список) на обработку.
  15. # При запуске бота он инициализирует пустой список, далее делает запрос к API для выгрузки в него всех заявок с его статусом для обработки и все элементы (если они есть) добавляет с помощью append в список.
  16. #При получении сообщения от кого-нибудь он также делает в список append
  17. #Каждлый пустой (не существующий) вызов API описывается как fake_api_call
  18. #Элемент списка удаляется, если с момента timestamp внутри json прошло больше 1 часа (соответственно json должен быть такого вида, что эта информация там есть)
  19. applications = read_inf("applications.json")
  20. print(text)
  21. print(mess)
  22. if text is not None:
  23. message = xmpp.Message()
  24. applications = read_inf("applications.json")
  25. #если бот получает сообщение, соответсвующее значению id("1","2","3")
  26. #он отправит описание desc этого определенного объекта
  27. for app in applications["applications"]:
  28. if app.get("id") == text:
  29. message.setBody(app.get("desc"))
  30. # если бот получает сообщение, он отправляет такое же сообщение отправителю
  31. # message.setBody(text)
  32. message.setFrom(config.JID)
  33. message.setTo(user)
  34. message.setType('chat')
  35. conn.send(message)
  36. # пример функции, которую можно вызвать из любой части кода для отправки сообщения от бота пользователю
  37. def simple_send_message():
  38. cli.send_message(config.JID, config.PASSWORD, "test@msg.sharix-app.org", "request.data")
  39. # recipient - это конкретный jid следующего обработчика заявки, ticket - json с заявкой
  40. def proceed_status(recipient, ticket):
  41. cli.send_message(config.JID, config.PASSWORD, recipient, ticket)
  42. # в message помещается смысл и сам вызов API, который должен быть, но которого нет, а также хорошо туда добавить номер заказа (взять из json) и название бота
  43. def fake_api_call(message):
  44. cli.send_message(config.JID, config.PASSWORD, "test@msg.sharix-app.org", message)
  45. #Авторизация и запуск бота
  46. bot = JabberBot(config.JID, config.PASSWORD)
  47. bot.register_handler('message', message_handler)
  48. bot.start()