v1.2.0
This commit is contained in:
@@ -10,10 +10,12 @@ 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
|
||||
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"):
|
||||
@@ -21,7 +23,6 @@ def kb(text: str = "Создатель⬆️", url: str = "https://t.me/verdise"
|
||||
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)
|
||||
@@ -36,6 +37,7 @@ async def start_cmd(update: Message | CallbackQuery) -> None:
|
||||
update: Message или CallbackQuery
|
||||
"""
|
||||
print(123)
|
||||
|
||||
# Определяем тип update и извлекаем данные
|
||||
if isinstance(update, CallbackQuery):
|
||||
message = update.message
|
||||
@@ -51,98 +53,89 @@ async def start_cmd(update: Message | CallbackQuery) -> None:
|
||||
|
||||
# Формируем текст помощи
|
||||
help_text = (
|
||||
"🤖 <b>PrimoGuard - Бот-модератор</b>\n\n"
|
||||
"Автоматическое удаление сообщений с запрещёнными словами.\n"
|
||||
"Поддержка подстрок, лемм, временных блокировок и режимов модерации.\n\n"
|
||||
f'{tg_emoji(4961073056677103064)} <b>PrimoGuard - Бот-модератор</b>\n\n'
|
||||
'<blockquote>Автоматическое удаление сообщений с запрещёнными словами.\nПоддержка подстрок, лемм, временных блокировок и режимов модерации.</blockquote>\n\n'
|
||||
)
|
||||
|
||||
# === Команды просмотра ===
|
||||
help_text += (
|
||||
"📋 <b>Просмотр:</b>\n"
|
||||
"/list — список всех правил и слов\n"
|
||||
"/stats — статистика по удалениям\n"
|
||||
"/id — получение айди пользователя\n"
|
||||
"/chatid — получение айди чата\n\n"
|
||||
f'{tg_emoji(4961141003059725568)} <b>Просмотр:</b>\n'
|
||||
'<b>/list</b> — список всех правил и слов\n'
|
||||
'<b>/stats</b> — статистика по удалениям\n'
|
||||
'<b>/id</b> — получение айди пользователя\n'
|
||||
'<b>/chatid</b> — получение айди чата\n\n'
|
||||
)
|
||||
|
||||
# === Постоянные банворды ===
|
||||
help_text += (
|
||||
"➕ <b>Добавить банворд (постоянно):</b>\n"
|
||||
"/addword <code>слово</code> — подстрока (простой поиск)\n"
|
||||
"/addlemma <code>слово</code> — лемма (все формы слова)\n"
|
||||
"/addpart <code>комбинация</code> — часть (поиск без пробелов)\n\n"
|
||||
f'{tg_emoji(4961019408240608234)} <b>Добавить банворд (постоянно):</b>\n'
|
||||
'<code>/addword</code> <code>слово</code> — подстрока (простой поиск)\n'
|
||||
'<code>/addlemma</code> <code>слово</code> — лемма (все формы слова)\n'
|
||||
'<code>/addpart</code> <code>комбинация</code> — часть (поиск без пробелов)\n\n'
|
||||
)
|
||||
|
||||
# === Временные банворды ===
|
||||
help_text += (
|
||||
"⏱ <b>Добавить банворд (временно):</b>\n"
|
||||
"/addtempword <code>слово минуты</code> — временная подстрока\n"
|
||||
"/addtemplemma <code>слово минуты</code> — временная лемма\n"
|
||||
"<i>Пример: /addtempword спам 60</i>\n\n"
|
||||
f'{tg_emoji(4960719190026618714)} <b>Добавить банворд (временно):</b>\n'
|
||||
'<code>/addtempword</code> <code>слово минуты</code> — временная подстрока\n'
|
||||
'<code>/addtemplemma</code> <code>слово минуты</code> — временная лемма\n'
|
||||
'<i>Пример: /addtempword спам 60</i>\n\n'
|
||||
)
|
||||
|
||||
# === Исключения (whitelist) ===
|
||||
help_text += (
|
||||
"✅ <b>Исключения (whitelist):</b>\n"
|
||||
"/addexcept <code>текст</code> — добавить исключение\n"
|
||||
"/remexcept <code>текст</code> — удалить исключение\n"
|
||||
"<i>Исключения не проверяются фильтром</i>\n\n"
|
||||
f'{tg_emoji(4963010134172239128)} <b>Исключения (whitelist):</b>\n'
|
||||
'<code>/addexcept</code> <code>текст</code> — добавить исключение\n'
|
||||
'<code>/remexcept</code> <code>текст</code> — удалить исключение\n'
|
||||
'<i>Исключения не проверяются фильтром</i>\n\n'
|
||||
)
|
||||
|
||||
# === Режимы модерации ===
|
||||
help_text += (
|
||||
"🔇 <b>Режим тишины:</b>\n"
|
||||
"/silence <code>минуты</code> — удалять ВСЕ сообщения\n"
|
||||
"/unsilence — отключить режим тишины\n"
|
||||
"/report — отправить репорт\n\n"
|
||||
f'{tg_emoji(4960987543878239236)} <b>Режим тишины:</b>\n'
|
||||
'<code>/silence</code> <code>минуты</code> — удалять ВСЕ сообщения\n'
|
||||
'<b>/unsilence</b> — отключить режим тишины\n'
|
||||
'<code>/report</code> — отправить репорт\n\n'
|
||||
)
|
||||
|
||||
help_text += (
|
||||
"⚔️ <b>Режим антиконфликта:</b>\n"
|
||||
"/addconflictword <code>слово</code> — добавить конфликтное слово\n"
|
||||
"/addconflictlemma <code>слово</code> — добавить конфликтную лемму\n"
|
||||
"/stopconflict <code>минуты</code> — активировать режим\n"
|
||||
"/unstopconflict — отключить режим\n\n"
|
||||
f'{tg_emoji(4960986152308835400)} <b>Режим антиконфликта:</b>\n'
|
||||
'<code>/addconflictword</code> <code>слово</code> — добавить конфликтное слово\n'
|
||||
'<code>/addconflictlemma</code> <code>слово</code> — добавить конфликтную лемму\n'
|
||||
'<code>/stopconflict</code> <code>минуты</code> — активировать режим\n'
|
||||
'<code>/unstopconflict</code> — отключить режим\n\n'
|
||||
)
|
||||
|
||||
# === Удаление ===
|
||||
help_text += (
|
||||
"➖ <b>Удалить:</b>\n"
|
||||
"/remword <code>слово</code> — удалить подстроку\n"
|
||||
"/remlemma <code>слово</code> — удалить лемму\n"
|
||||
"/rempart <code>комбинация</code> — удалить часть\n"
|
||||
"/remtempword <code>слово</code> — удалить временную подстроку\n"
|
||||
"/remtemplemma <code>слово</code> — удалить временную лемму\n"
|
||||
"/remconflictword <code>слово</code> — удалить конфликтное слово\n"
|
||||
"/remconflictlemma <code>слово</code> — удалить конфликтную лемму\n\n"
|
||||
f'{tg_emoji(4961196485447254983)} <b>Удалить:</b>\n'
|
||||
'<code>/remword</code> <code>слово</code> — удалить подстроку\n'
|
||||
'<code>/remlemma</code> <code>слово</code> — удалить лемму\n'
|
||||
'<code>/rempart</code> <code>комбинация</code> — удалить часть\n'
|
||||
'<code>/remtempword</code> <code>слово</code> — удалить временную подстроку\n'
|
||||
'<code>/remtemplemma</code> <code>слово</code> — удалить временную лемму\n'
|
||||
'<code>/remconflictword</code> <code>слово</code> — удалить конфликтное слово\n'
|
||||
'<code>/remconflictlemma</code> <code>слово</code> — удалить конфликтную лемму\n\n'
|
||||
)
|
||||
|
||||
# === Управление админами (только для суперадминов) ===
|
||||
if is_super_admin:
|
||||
help_text += (
|
||||
"👑 <b>Управление админами (только для владельцев):</b>\n"
|
||||
"/addadmin <code>ID</code> — добавить администратора\n"
|
||||
"/remadmin <code>ID</code> — удалить администратора\n"
|
||||
"/listadmins — список всех админов\n\n"
|
||||
f'{tg_emoji(4960891456869893259)} <b>Управление админами (только для владельцев):</b>\n'
|
||||
'<code>/addadmin</code> <i>ID</i> — добавить администратора\n'
|
||||
'<code>/remadmin</code> <i>ID</i> — удалить администратора\n'
|
||||
'<b>/redactcomment</b> — изменить комментарий под постом\n'
|
||||
'<b>/listadmins</b> — список всех админов\n\n'
|
||||
)
|
||||
|
||||
# === Типы проверок ===
|
||||
help_text += (
|
||||
"ℹ️ <b>Типы проверок:</b>\n"
|
||||
"• <b>Подстрока</b> — простой поиск в тексте\n"
|
||||
"• <b>Лемма</b> — все формы слова (купить→куплю, купил, купишь...)\n"
|
||||
"• <b>Часть</b> — поиск без пробелов (обходит \"к у п и т ь\")\n"
|
||||
"• <b>Временные</b> — автоматически удаляются через N минут\n"
|
||||
"• <b>Конфликтные</b> — работают только в режиме /stopconflict\n\n"
|
||||
)
|
||||
|
||||
help_text += (
|
||||
"🔧 <b>Технологии:</b>\n"
|
||||
"• Unicode-нормализация (латиница→кириллица)\n"
|
||||
"• Обход через разделители (\"с п а м\" → \"спам\")\n"
|
||||
"• Морфологический анализ (pymorphy3)\n"
|
||||
"• SQLAlchemy + SQLite с кэшированием\n\n"
|
||||
"💾 Все настройки сохраняются в базе данных"
|
||||
f'{tg_emoji(4961021096162755737)} <b>Типы проверок:</b>\n'
|
||||
'• <b>Подстрока</b> — простой поиск в тексте\n'
|
||||
'• <b>Лемма</b> — все формы слова (купить→куплю, купил, купишь...)\n'
|
||||
'• <b>Часть</b> — поиск без пробелов (обходит \"к у п и т ь\")\n'
|
||||
'• <b>Временные</b> — автоматически удаляются через N минут\n'
|
||||
'• <b>Конфликтные</b> — работают только в режиме /stopconflict\n\n'
|
||||
)
|
||||
|
||||
# Отправляем ответ
|
||||
@@ -166,4 +159,4 @@ async def start_cmd(update: Message | CallbackQuery) -> None:
|
||||
log_type="ERROR"
|
||||
)
|
||||
if is_callback:
|
||||
await update.answer("❌ Ошибка отображения справки", show_alert=True)
|
||||
await update.answer(f'{tg_emoji(4963277744994518278)} Ошибка отображения справки', show_alert=True)
|
||||
|
||||
Reference in New Issue
Block a user