"""Callbacks for matrix messages""" import html import traceback from nio import MatrixRoom, RoomMessageText from bot import MatrixBot # # PRIVATE # _bot: MatrixBot = None # ignore def _generate_help_message() -> str: """Generates help message in HTML markup""" result = "Как использовать
!auth, создайте токен!info в комнате, чтобы узнать код канала уведомений!{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 = "Сведения о комнате{html.escape(room.room_id)}"
await _bot.send_text_to_room(room.room_id, response, is_html=True)
_COMMANDS = {
("help", "?"): (_on_cmd_help, "Получить справку"),
("info", "room"): (_on_cmd_info, "Получить сведения о комнате"),
}
#
# PUBLIC
#
def setup(bot: MatrixBot) -> None:
"""Setup the callbacks"""
global _bot
_bot = bot
_bot.add_event_callback(_on_text, RoomMessageText)