""" Обработчик команды /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.decorators import log_action __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 = ( "🤖 PrimoGuard - Бот-модератор\n\n" "Автоматическое удаление сообщений с запрещёнными словами.\n" "Поддержка подстрок, лемм, временных блокировок и режимов модерации.\n\n" ) # === Команды просмотра === help_text += ( "📋 Просмотр:\n" "/list — список всех правил и слов\n" "/stats — статистика по удалениям\n" "/id — получение айди пользователя\n" "/chatid — получение айди чата\n\n" ) # === Постоянные банворды === help_text += ( "➕ Добавить банворд (постоянно):\n" "/addword слово — подстрока (простой поиск)\n" "/addlemma слово — лемма (все формы слова)\n" "/addpart комбинация — часть (поиск без пробелов)\n\n" ) # === Временные банворды === help_text += ( "⏱ Добавить банворд (временно):\n" "/addtempword слово минуты — временная подстрока\n" "/addtemplemma слово минуты — временная лемма\n" "Пример: /addtempword спам 60\n\n" ) # === Исключения (whitelist) === help_text += ( "✅ Исключения (whitelist):\n" "/addexcept текст — добавить исключение\n" "/remexcept текст — удалить исключение\n" "Исключения не проверяются фильтром\n\n" ) # === Режимы модерации === help_text += ( "🔇 Режим тишины:\n" "/silence минуты — удалять ВСЕ сообщения\n" "/unsilence — отключить режим тишины\n" "/report — отправить репорт\n\n" ) help_text += ( "⚔️ Режим антиконфликта:\n" "/addconflictword слово — добавить конфликтное слово\n" "/addconflictlemma слово — добавить конфликтную лемму\n" "/stopconflict минуты — активировать режим\n" "/unstopconflict — отключить режим\n\n" ) # === Удаление === help_text += ( "➖ Удалить:\n" "/remword слово — удалить подстроку\n" "/remlemma слово — удалить лемму\n" "/rempart комбинация — удалить часть\n" "/remtempword слово — удалить временную подстроку\n" "/remtemplemma слово — удалить временную лемму\n" "/remconflictword слово — удалить конфликтное слово\n" "/remconflictlemma слово — удалить конфликтную лемму\n\n" ) # === Управление админами (только для суперадминов) === if is_super_admin: help_text += ( "👑 Управление админами (только для владельцев):\n" "/addadmin ID — добавить администратора\n" "/remadmin ID — удалить администратора\n" "/listadmins — список всех админов\n\n" ) # === Типы проверок === help_text += ( "ℹ️ Типы проверок:\n" "• Подстрока — простой поиск в тексте\n" "• Лемма — все формы слова (купить→куплю, купил, купишь...)\n" "• Часть — поиск без пробелов (обходит \"к у п и т ь\")\n" "• Временные — автоматически удаляются через N минут\n" "• Конфликтные — работают только в режиме /stopconflict\n\n" ) help_text += ( "🔧 Технологии:\n" "• Unicode-нормализация (латиница→кириллица)\n" "• Обход через разделители (\"с п а м\" → \"спам\")\n" "• Морфологический анализ (pymorphy3)\n" "• SQLAlchemy + SQLite с кэшированием\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("❌ Ошибка отображения справки", show_alert=True)