""" Обработчик команды /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' '
/word слово — слова (простой поиск)\n'
'/lemma слово — лемма (все формы слова)\n'
'/part комбинация — часть (поиск без пробелов)\n\n'
)
# === Временные банворды ===
help_text += (
f'{tg_emoji("4960719190026618714")} Добавить банворд (временно):\n'
'/tempword слово минуты — временная слова\n'
'/templemma слово минуты — временная лемма\n'
'Пример: /tempword спам 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'
'/addconflictpart слово — добавить конфликтную часть\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'
'/remconflictpart слово — удалить конфликтное часть\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)