""" Обработчик команды /start и /help для администраторов. Показывает список доступных команд для управления банвордами. """ from aiogram import Router, F from aiogram.filters import Command from aiogram.types import Message, CallbackQuery from aiogram.utils.keyboard import InlineKeyboardBuilder from bot.filters.admin import IsAdmin from configs import settings, COMMANDS from middleware.loggers import logger from bot.utils import log_action, tg_emoji __all__ = ("router",) CMD: str = "start" router: Router = Router(name="start_cmd_router") def kb(text: str = "Создатель⬆️", url: str = "https://t.me/verdise"): ikb = InlineKeyboardBuilder() ikb.button(text=text, url=url) return ikb.as_markup() @router.callback_query(F.data.casefold() == CMD) @router.message(Command(*COMMANDS[CMD], prefix=settings.PREFIX, ignore_case=True), IsAdmin()) @log_action(action_name="START_COMMAND", log_args=True) async def start_cmd(update: Message | CallbackQuery) -> None: """ Обработчик команды /start и /help. Показывает справку по командам бота для администраторов. Доступно только администраторам (суперадмин или доп. админ из БД). Args: update: Message или CallbackQuery """ print(123) # Определяем тип update и извлекаем данные if isinstance(update, CallbackQuery): message = update.message user_id = update.from_user.id is_callback = True else: message = update user_id = update.from_user.id is_callback = False # Проверяем, является ли пользователь суперадмином is_super_admin = user_id in settings.OWNER_ID # Формируем текст помощи help_text = ( f'{tg_emoji(4961073056677103064)} PrimoGuard - Бот-модератор\n\n' '
Автоматическое удаление сообщений с запрещёнными словами.\nПоддержка подстрок, лемм, временных блокировок и режимов модерации.
\n\n' ) # === Команды просмотра === help_text += ( f'{tg_emoji(4961141003059725568)} Просмотр:\n' '/list — список всех правил и слов\n' '/stats — статистика по удалениям\n' '/id — получение айди пользователя\n' '/chatid — получение айди чата\n\n' ) # === Постоянные банворды === help_text += ( f'{tg_emoji(4961019408240608234)} Добавить банворд (постоянно):\n' '/addword слово — подстрока (простой поиск)\n' '/addlemma слово — лемма (все формы слова)\n' '/addpart комбинация — часть (поиск без пробелов)\n\n' ) # === Временные банворды === help_text += ( f'{tg_emoji(4960719190026618714)} Добавить банворд (временно):\n' '/addtempword слово минуты — временная подстрока\n' '/addtemplemma слово минуты — временная лемма\n' 'Пример: /addtempword спам 60\n\n' ) # === Исключения (whitelist) === help_text += ( f'{tg_emoji(4963010134172239128)} Исключения (whitelist):\n' '/addexcept текст — добавить исключение\n' '/remexcept текст — удалить исключение\n' 'Исключения не проверяются фильтром\n\n' ) # === Режимы модерации === help_text += ( f'{tg_emoji(4960987543878239236)} Режим тишины:\n' '/silence минуты — удалять ВСЕ сообщения\n' '/unsilence — отключить режим тишины\n' '/report — отправить репорт\n\n' ) help_text += ( f'{tg_emoji(4960986152308835400)} Режим антиконфликта:\n' '/addconflictword слово — добавить конфликтное слово\n' '/addconflictlemma слово — добавить конфликтную лемму\n' '/stopconflict минуты — активировать режим\n' '/unstopconflict — отключить режим\n\n' ) # === Удаление === help_text += ( f'{tg_emoji(4961196485447254983)} Удалить:\n' '/remword слово — удалить подстроку\n' '/remlemma слово — удалить лемму\n' '/rempart комбинация — удалить часть\n' '/remtempword слово — удалить временную подстроку\n' '/remtemplemma слово — удалить временную лемму\n' '/remconflictword слово — удалить конфликтное слово\n' '/remconflictlemma слово — удалить конфликтную лемму\n\n' ) # === Управление админами (только для суперадминов) === if is_super_admin: help_text += ( f'{tg_emoji(4960891456869893259)} Управление админами (только для владельцев):\n' '/addadmin ID — добавить администратора\n' '/remadmin ID — удалить администратора\n' '/redactcomment — изменить комментарий под постом\n' '/listadmins — список всех админов\n\n' ) # === Типы проверок === help_text += ( f'{tg_emoji(4961021096162755737)} Типы проверок:\n' '• Подстрока — простой поиск в тексте\n' '• Лемма — все формы слова (купить→куплю, купил, купишь...)\n' '• Часть — поиск без пробелов (обходит \"к у п и т ь\")\n' '• Временные — автоматически удаляются через N минут\n' '• Конфликтные — работают только в режиме /stopconflict\n\n' ) # Отправляем ответ try: if is_callback: await message.edit_text( text=help_text, parse_mode="HTML", reply_markup=kb() ) await update.answer() else: await message.answer( text=help_text, parse_mode="HTML", reply_markup=kb() ) except Exception as e: logger.error( f"Ошибка отправки help сообщения: {e}", log_type="ERROR" ) if is_callback: await update.answer(f'{tg_emoji(4963277744994518278)} Ошибка отображения справки', show_alert=True)