""" Обработчик команды /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)