"""Callbacks for matrix messages""" import html import time import traceback from nio import MatrixRoom, RoomMessageText import util from bot import MatrixBot # # PRIVATE # _bot: MatrixBot = None # ignore def _generate_help_message() -> str: """Generates help message in HTML markup""" result = "Как использовать
    " result += "
  1. Используя !auth, создайте токен
  2. " result += "
  3. Добавьте бота в комнату для уведомлений
  4. " result += "
  5. Выполните !info в комнате, чтобы узнать код канала уведомений
  6. " result += "
  7. Используя полученные токен и код канала, отправьте уведомление через веб-запрос
  8. " result += "
" result += "

Команды" for aliases in _COMMANDS: result += f"
!{aliases[0]} - {html.escape(_COMMANDS[aliases][1])}" return result # # GENERIC EVENT HANDLERS # async def _on_text(room: MatrixRoom, event: RoomMessageText) -> None: """This callback is called when text message is received""" if event.sender == _bot.get_client().user_id: return text = event.body parts = [p for p in text.split() if p.strip()] if len(parts) < 1: return cmd = parts[0].lower() if not cmd.startswith("!"): return cb = None for aliases in _COMMANDS: for alias in aliases: if alias == cmd.lstrip("!"): cb = _COMMANDS[aliases][0] break if cb: break if cb is None: await _bot.send_text_to_room(room.room_id, "Используйте !help") return try: await cb(room, parts[1:]) except: traceback.print_exc() # # COMMAND HANDLERS # async def _on_cmd_help(room: MatrixRoom, args: list[str]) -> None: """!help""" await _bot.send_text_to_room(room.room_id, _generate_help_message(), is_html=True) async def _on_cmd_info(room: MatrixRoom, args: list[str]) -> None: """!info""" response = "Сведения о комнате
" response += f"channel: {html.escape(room.room_id)}" await _bot.send_text_to_room(room.room_id, response, is_html=True) async def _on_cmd_tokens(room: MatrixRoom, args: list[str]) -> None: """!info""" TEST_LIST = { "t0K3n": { "created": time.time() - 60, "last_use": time.time() - 30, "total_uses": 534, "service_name": "Резервное копирование", }, "T35t_t0KeN": { "created": time.time() - 12341, "last_use": time.time() - 123, "total_uses": 342, "service_name": None, }, } response = "Список токенов" await _bot.send_text_to_room(room.room_id, response, is_html=True) _COMMANDS = { ("help", "?"): (_on_cmd_help, "Получить справку"), ("info", "room"): (_on_cmd_info, "Получить сведения о комнате"), ("tokens",): (_on_cmd_tokens, "Получить список токенов"), } # # PUBLIC # def setup(bot: MatrixBot) -> None: """Setup the callbacks""" global _bot _bot = bot _bot.add_event_callback(_on_text, RoomMessageText)