Migrated to mab library, added stubs for commands

This commit is contained in:
Nikita Tyukalov, ASUS, Linux
2026-08-25 11:47:44 +03:00
parent 3b4e9d6a1e
commit ff6656fdb0
6 changed files with 100 additions and 645 deletions

View File

@@ -4,19 +4,19 @@ import html
import time
import traceback
from mab import MatrixBot
from nio import MatrixRoom, RoomMessageText
import util
from bot import MatrixBot
#
# PRIVATE
#
_bot: MatrixBot = None # ignore
_bot: MatrixBot = None # type: ignore
def _generate_help_message() -> str:
"""Generates help message in HTML markup"""
result = "<b><i>Как использовать</i></b><ol>"
result = "<b><i>Как использовать</i></b><br><ol>"
result += "<li>Используя <code>!auth</code>, создайте токен</li>"
result += "<li>Добавьте бота в комнату для уведомлений</li>"
result += "<li>Выполните <code>!info</code> в комнате, чтобы узнать код канала уведомений</li>"
@@ -88,29 +88,81 @@ async def _on_cmd_tokens(room: MatrixRoom, args: list[str]) -> None:
},
}
response = "<b><i>Список токенов</i></b><ul>"
response = "<b><i>Список токенов</i></b>"
for token in TEST_LIST:
data = TEST_LIST[token]
response += "<li>"
response += f"<code>{html.escape(token)}</code><ul>"
response += f"<br><b><code>{html.escape(token)}</code></b><br><ul>"
if data["service_name"] is not None:
response += f"<li><b>Имя службы:</b> <i>{data["service_name"]}</i></li>"
response += f"<li><b>Имя службы:</b> <code>{data["service_name"]}</code></li>"
else:
response += f"<li><b>Имя службы:</b> <i>указывается в запросе</i></li>"
response += f"<li><b>Создан:</b> <i>{util.date_to_text(data["created"])}</i></li>"
response += f"<li><b>Последнее использование:</b> <i>{util.date_to_text(data["last_use"])}</i></li>"
response += f"<li><b>Всего использований:</b> <i>{util.date_to_text(data["total_uses"])}</i></li>"
response += f"<li><b>Всего использований:</b> <i>{data["total_uses"]}</i></li>"
response += "</ul>"
response += "</li>"
response += "</ul>"
await _bot.send_text_to_room(room.room_id, response, is_html=True)
async def _on_cmd_auth(room: MatrixRoom, args: list[str]) -> None:
"""!auth"""
new_token = "inr3i4evfds"
new_token_name = " ".join(args) if args else None
if type(new_token_name) is str and not new_token_name.strip():
new_token_name = None
response = "<b>Создан новый токен</b>"
response += f"<br><b>Код:</b> <code>{new_token}</code>"
response += f"<br><b>Имя сервиса:</b> "
if new_token_name:
response += f"<code>{html.escape(new_token_name)}</code>"
else:
response += "указывается в запросе"
await _bot.send_text_to_room(room.room_id, response, is_html=True)
async def _on_cmd_deauth(room: MatrixRoom, args: list[str]) -> None:
"""!deauth"""
if len(args) != 1:
await _bot.send_text_to_room(room.room_id, "<b>Укажите токен, который надо удалить (должен быть ровно один аргумент)</b>", is_html=True)
return
token = args[0]
# TODO
response = f"<b>Удалён токен <code>{token}</code></b>"
await _bot.send_text_to_room(room.room_id, response, is_html=True)
async def _on_cmd_name(room: MatrixRoom, args: list[str]) -> None:
"""!name"""
if len(args) < 1:
error = "<b>Требуется указать как минимум токен. Если хотите убрать имя, то имя указывать не надо. Если имя нужно назначить или изменить, то после токена укажите новое имя.</b>"
await _bot.send_text_to_room(room.room_id, error, is_html=True)
return
token = args[0]
new_name = " ".join(args[1:])
if not new_name.strip():
new_name = None
# TODO
if new_name:
response = f"<b>Новое имя для токена <code>{token}</code>: <code>{new_name}</code></b>"
else:
response = f"<b>Удалено имя для токена <code>{token}</code></b>"
await _bot.send_text_to_room(room.room_id, response, is_html=True)
async def _on_cmd_leave(room: MatrixRoom, args: list[str]) -> None:
"""!leave"""
await _bot.send_text_to_room(room.room_id, "<b>Команда не реализована</b>", is_html=True)
_COMMANDS = {
("help", "?"): (_on_cmd_help, "Получить справку"),
("info", "room"): (_on_cmd_info, "Получить сведения о комнате"),
("tokens",): (_on_cmd_tokens, "Получить список токенов"),
("help", "h", "?"): (_on_cmd_help, "Получить справку"),
("info", "room", "i", "r"): (_on_cmd_info, "Получить сведения о комнате"),
("tokens", "t"): (_on_cmd_tokens, "Получить список токенов"),
("auth", "create", "a", "c"): (_on_cmd_auth, "Создать новый токен"),
("deauth", "delete", "d"): (_on_cmd_deauth, "Удалить существующий токен"),
("name", "n"): (_on_cmd_name, "Задать (или удалить) имя для токена"),
("leave", "l"): (_on_cmd_leave, "Покинуть комнату, в которой получена эта команда"),
}
#
@@ -120,4 +172,4 @@ def setup(bot: MatrixBot) -> None:
"""Setup the callbacks"""
global _bot
_bot = bot
_bot.add_event_callback(_on_text, RoomMessageText)
_bot.add_event_callback(_on_text, RoomMessageText) # type: ignore