Инициализатор модуля
This commit is contained in:
4
bot/__init__.py
Normal file
4
bot/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
from .core import *
|
||||||
|
from .handlers import router
|
||||||
|
from .middlewares import *
|
||||||
|
from .filters import *
|
||||||
5
bot/core/__init__.py
Normal file
5
bot/core/__init__.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
"""
|
||||||
|
Модуль управления ботом
|
||||||
|
"""
|
||||||
|
from .bots import *
|
||||||
|
from .webhook import *
|
||||||
11
bot/filters/__init__.py
Normal file
11
bot/filters/__init__.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
"""
|
||||||
|
Модуль фильтров для aiogram
|
||||||
|
"""
|
||||||
|
from .subscription import *
|
||||||
|
from .admin import *
|
||||||
|
from .spam import *
|
||||||
|
from .modes import *
|
||||||
|
from .chat_type import *
|
||||||
|
from .msg_content import *
|
||||||
|
from .chat_rights import *
|
||||||
|
from .callback import *
|
||||||
16
bot/handlers/__init__.py
Normal file
16
bot/handlers/__init__.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
from aiogram import Router
|
||||||
|
|
||||||
|
from .commands import router as cmd_routers
|
||||||
|
from .messages import router as messages_routers
|
||||||
|
from .chl_comment import router as channels_routers
|
||||||
|
|
||||||
|
# Настройка экспорта и роутера
|
||||||
|
__all__ = ("router",)
|
||||||
|
router: Router = Router(name=__name__)
|
||||||
|
|
||||||
|
# Подключение роутеров
|
||||||
|
router.include_routers(
|
||||||
|
channels_routers,
|
||||||
|
cmd_routers,
|
||||||
|
messages_routers,
|
||||||
|
)
|
||||||
16
bot/handlers/commands/__init__.py
Normal file
16
bot/handlers/commands/__init__.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
from aiogram import Router
|
||||||
|
|
||||||
|
#from .admins import router as admin_cmd_router
|
||||||
|
from .users import router as users_cmd_router
|
||||||
|
#from .settings import router as settings_cmd_router
|
||||||
|
|
||||||
|
# Настройка экспорта и роутера
|
||||||
|
__all__ = ("router",)
|
||||||
|
router: Router = Router(name=__name__)
|
||||||
|
|
||||||
|
# Подключение роутеров
|
||||||
|
router.include_routers(
|
||||||
|
#settings_cmd_router,
|
||||||
|
#admin_cmd_router,
|
||||||
|
users_cmd_router,
|
||||||
|
)
|
||||||
18
bot/handlers/commands/admins/__init__.py
Normal file
18
bot/handlers/commands/admins/__init__.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
from aiogram import Router
|
||||||
|
|
||||||
|
#from .ban_cmd import router as ban_cmd_router
|
||||||
|
from .all_cmd import router as all_cmd_router
|
||||||
|
from .pin_cmd import router as pin_cmd_router
|
||||||
|
from .kick_cmd import router as kick_cmd_router
|
||||||
|
|
||||||
|
# Настройка экспорта и роутера
|
||||||
|
__all__ = ("router",)
|
||||||
|
router: Router = Router(name=__name__)
|
||||||
|
|
||||||
|
router.include_routers(
|
||||||
|
#ban_cmd_router,
|
||||||
|
kick_cmd_router,
|
||||||
|
pin_cmd_router,
|
||||||
|
all_cmd_router,
|
||||||
|
|
||||||
|
)
|
||||||
19
bot/handlers/commands/settings/__init__.py
Normal file
19
bot/handlers/commands/settings/__init__.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
from aiogram import Router
|
||||||
|
|
||||||
|
from .set_description_cmd import router as set_description_cmd_router
|
||||||
|
from .set_name_cmd import router as set_name_cmd_router
|
||||||
|
from .set_widget_cmd import router as set_widget_cmd_router
|
||||||
|
from .settings_cmd import router as settings_cmd_router
|
||||||
|
|
||||||
|
# Настройка экспорта и роутера
|
||||||
|
__all__ = ("router",)
|
||||||
|
router: Router = Router(name=__name__)
|
||||||
|
|
||||||
|
|
||||||
|
# Подключение роутеров
|
||||||
|
router.include_routers(
|
||||||
|
settings_cmd_router,
|
||||||
|
set_name_cmd_router,
|
||||||
|
set_description_cmd_router,
|
||||||
|
set_widget_cmd_router,
|
||||||
|
)
|
||||||
37
bot/handlers/commands/users/__init__.py
Normal file
37
bot/handlers/commands/users/__init__.py
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
from aiogram import Router
|
||||||
|
|
||||||
|
from .start_cmd import router as start_cmd_router
|
||||||
|
from .listwords import router as listwords_cmd_router
|
||||||
|
from .word import router as word_cmd_router
|
||||||
|
from .slience import router as slice_router
|
||||||
|
from .conflict import router as conflict_router
|
||||||
|
from .stats import router as stats_router
|
||||||
|
from .report import router as report_router
|
||||||
|
from .admins import router as admin_router
|
||||||
|
from .notifications import router as notifications_router
|
||||||
|
from .id import router as id_router
|
||||||
|
from .emoji import router as emoji_router
|
||||||
|
from .cancel import router as cancel_router
|
||||||
|
from .bot_settings import router as setting_router
|
||||||
|
|
||||||
|
# Настройка экспорта и роутера
|
||||||
|
__all__ = ("router",)
|
||||||
|
router: Router = Router(name=__name__)
|
||||||
|
|
||||||
|
|
||||||
|
# Подключение роутеров
|
||||||
|
router.include_routers(
|
||||||
|
cancel_router,
|
||||||
|
notifications_router,
|
||||||
|
report_router,
|
||||||
|
admin_router,
|
||||||
|
start_cmd_router,
|
||||||
|
listwords_cmd_router,
|
||||||
|
word_cmd_router,
|
||||||
|
slice_router,
|
||||||
|
conflict_router,
|
||||||
|
stats_router,
|
||||||
|
id_router,
|
||||||
|
emoji_router,
|
||||||
|
setting_router,
|
||||||
|
)
|
||||||
15
bot/handlers/messages/__init__.py
Normal file
15
bot/handlers/messages/__init__.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
from aiogram import Router
|
||||||
|
|
||||||
|
from .default_msg import router as default_message_router
|
||||||
|
from .ping_test import router as ping_test_message_router
|
||||||
|
|
||||||
|
# Настройка экспорта и роутера
|
||||||
|
router: Router = Router(name=__name__)
|
||||||
|
|
||||||
|
# Подготовка роутера команд
|
||||||
|
# router.include_routers(
|
||||||
|
# ping_test_message_router,
|
||||||
|
# )
|
||||||
|
|
||||||
|
# Подключение стандартного роутера
|
||||||
|
router.include_router(default_message_router)
|
||||||
2
bot/keyboards/__init__.py
Normal file
2
bot/keyboards/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
from .inline import *
|
||||||
|
from .reply import *
|
||||||
142
bot/middlewares/__init__.py
Normal file
142
bot/middlewares/__init__.py
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
"""
|
||||||
|
Middleware для бота PrimoGuardBot.
|
||||||
|
|
||||||
|
Порядок выполнения middleware важен:
|
||||||
|
1. TimingMiddleware - замер времени выполнения
|
||||||
|
2. LoggingMiddleware - логирование всех событий
|
||||||
|
3. BanCheckMiddleware - проверка статуса бана (блокирует забаненных)
|
||||||
|
4. ErrorHandlingMiddleware - обработка ошибок (последний)
|
||||||
|
|
||||||
|
Message-level middleware:
|
||||||
|
1. RateLimitMiddleware/AntiSpamMiddleware - защита от флуда
|
||||||
|
2. SubscriptionMiddleware - проверка подписки на каналы
|
||||||
|
3. ReferralMiddleware - обработка реферальных ссылок
|
||||||
|
"""
|
||||||
|
from aiogram import Dispatcher, Bot
|
||||||
|
|
||||||
|
from configs import settings
|
||||||
|
from middleware.loggers import logger
|
||||||
|
from .error_mdw import ErrorHandlingMiddleware
|
||||||
|
from .logging_mdw import LoggingMiddleware
|
||||||
|
from .referal_mdw import ReferralMiddleware
|
||||||
|
from .spam_mdw import AntiSpamMiddleware, spam_stats
|
||||||
|
from .sub_mdw import SubscriptionMiddleware
|
||||||
|
from .time_mdw import TimingMiddleware
|
||||||
|
from .banwords_mdw import BanWordsMiddleware
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
# Middleware классы
|
||||||
|
"TimingMiddleware",
|
||||||
|
"LoggingMiddleware",
|
||||||
|
"ErrorHandlingMiddleware",
|
||||||
|
"AntiSpamMiddleware",
|
||||||
|
"SubscriptionMiddleware",
|
||||||
|
"ReferralMiddleware",
|
||||||
|
"BanWordsMiddleware",
|
||||||
|
|
||||||
|
# Статистика
|
||||||
|
"spam_stats",
|
||||||
|
|
||||||
|
# Утилиты
|
||||||
|
"setup_middlewares",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def setup_middlewares(
|
||||||
|
dp: Dispatcher,
|
||||||
|
bot: Bot,
|
||||||
|
admin_ids: list[int] = settings.ADMIN_ID+settings.OWNER_ID,
|
||||||
|
channel_ids: list[int | str] | None = None,
|
||||||
|
enable_spam_check: bool = False,
|
||||||
|
enable_subscription_check: bool = False,
|
||||||
|
) -> dict:
|
||||||
|
"""
|
||||||
|
Регистрирует все middleware в диспетчере.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
dp: Диспетчер aiogram
|
||||||
|
bot: Экземпляр бота
|
||||||
|
admin_ids: ID администраторов (для защиты и уведомлений)
|
||||||
|
channel_ids: ID каналов для проверки подписки
|
||||||
|
enable_spam_check: Включить антиспам
|
||||||
|
enable_subscription_check: Включить проверку подписки
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: Словарь с экземплярами middleware для доступа к методам
|
||||||
|
"""
|
||||||
|
channel_ids = channel_ids or []
|
||||||
|
|
||||||
|
# === UPDATE LEVEL MIDDLEWARE (для всех событий) ===
|
||||||
|
middlewares_updates = []
|
||||||
|
instances = {}
|
||||||
|
|
||||||
|
# 1. Timing - замер времени (первый!)
|
||||||
|
timing_mdw = TimingMiddleware()
|
||||||
|
middlewares_updates.append(timing_mdw)
|
||||||
|
instances['timing'] = timing_mdw
|
||||||
|
|
||||||
|
# 2. Logging - логирование всех событий
|
||||||
|
loggings_mdw = LoggingMiddleware()
|
||||||
|
middlewares_updates.append(loggings_mdw)
|
||||||
|
instances['logging'] = loggings_mdw
|
||||||
|
|
||||||
|
# 3. ErrorHandling - обработка ошибок (последний!)
|
||||||
|
errors_mdw = ErrorHandlingMiddleware(admin_ids=admin_ids)
|
||||||
|
middlewares_updates.append(errors_mdw)
|
||||||
|
instances['error'] = errors_mdw
|
||||||
|
|
||||||
|
# === MESSAGE LEVEL MIDDLEWARE (только для сообщений) ===
|
||||||
|
middlewares_msg = []
|
||||||
|
|
||||||
|
# 1. AntiSpam - защита от флуда (опционально)
|
||||||
|
if enable_spam_check:
|
||||||
|
spams_mdw = AntiSpamMiddleware()
|
||||||
|
middlewares_msg.append(spams_mdw)
|
||||||
|
instances['spam'] = spams_mdw
|
||||||
|
|
||||||
|
# 2. Subscription - проверка подписки на каналы (опционально)
|
||||||
|
if enable_subscription_check and channel_ids:
|
||||||
|
subs_mdw = SubscriptionMiddleware(bot=bot, channels=channel_ids)
|
||||||
|
middlewares_msg.append(subs_mdw)
|
||||||
|
instances['subscription'] = subs_mdw
|
||||||
|
|
||||||
|
dp.message.middleware(BanWordsMiddleware())
|
||||||
|
|
||||||
|
# 3. Referral - обработка реферальных ссылок
|
||||||
|
referral_mdw = ReferralMiddleware()
|
||||||
|
middlewares_msg.append(referral_mdw)
|
||||||
|
instances['referral'] = referral_mdw
|
||||||
|
|
||||||
|
# === РЕГИСТРАЦИЯ MIDDLEWARE ===
|
||||||
|
|
||||||
|
# Регистрируем update-level middleware
|
||||||
|
for middleware in middlewares_updates:
|
||||||
|
dp.update.middleware(middleware)
|
||||||
|
|
||||||
|
# Регистрируем message-level middleware
|
||||||
|
for middleware in middlewares_msg:
|
||||||
|
dp.message.middleware(middleware)
|
||||||
|
|
||||||
|
# Логируем успешную регистрацию
|
||||||
|
enabled_features = []
|
||||||
|
if enable_spam_check:
|
||||||
|
enabled_features.append("AntiSpam")
|
||||||
|
if enable_subscription_check:
|
||||||
|
enabled_features.append("Subscription")
|
||||||
|
|
||||||
|
dp.channel_post.middleware(LoggingMiddleware())
|
||||||
|
dp.edited_channel_post.middleware(LoggingMiddleware())
|
||||||
|
|
||||||
|
logger.info(
|
||||||
|
text=(
|
||||||
|
f"Middleware зарегистрированы: "
|
||||||
|
f"Update={len(middlewares_updates)}, "
|
||||||
|
f"Message={len(middlewares_msg)}, "
|
||||||
|
f"Функции=[{', '.join(enabled_features) if enabled_features else 'базовые'}]"
|
||||||
|
),
|
||||||
|
log_type="MIDDLEWARE_SETUP"
|
||||||
|
)
|
||||||
|
|
||||||
|
return instances
|
||||||
|
|
||||||
|
|
||||||
1
bot/special/__init__.py
Normal file
1
bot/special/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from .text_processing import *
|
||||||
0
bot/states/__init__.py
Normal file
0
bot/states/__init__.py
Normal file
4
bot/tasks/__init__.py
Normal file
4
bot/tasks/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
"""
|
||||||
|
Модуль фоновых задач для бота
|
||||||
|
"""
|
||||||
|
from .cleanup import *
|
||||||
1
bot/templates/__init__.py
Normal file
1
bot/templates/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from .message_callback import *
|
||||||
39
bot/utils/__init__.py
Normal file
39
bot/utils/__init__.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
"""
|
||||||
|
Утилиты бота PrimoGuardBot
|
||||||
|
|
||||||
|
Модули:
|
||||||
|
- usernames: Работа с пользователями (username, mentions, display names)
|
||||||
|
- type_message: Типы контента и чатов
|
||||||
|
- hidden_username: Упоминания администраторов
|
||||||
|
- format_time: Форматирование времени и дат
|
||||||
|
- argument: Парсинг команд и аргументов
|
||||||
|
- state_utils: Работа с FSM состояниями
|
||||||
|
- auto_delete: Автоматическое удаление сообщений
|
||||||
|
- decorators: Декораторы для хендлеров
|
||||||
|
"""
|
||||||
|
|
||||||
|
# ================= USER INFO =================
|
||||||
|
from .usernames import *
|
||||||
|
|
||||||
|
# ================= CONTENT TYPES =================
|
||||||
|
from .type_message import *
|
||||||
|
|
||||||
|
# ================= MENTIONS =================
|
||||||
|
from .hidden_username import *
|
||||||
|
|
||||||
|
# ================= TIME FORMATTING =================
|
||||||
|
from .format_time import *
|
||||||
|
|
||||||
|
# ================= COMMANDS =================
|
||||||
|
from .argument import *
|
||||||
|
|
||||||
|
# ================= STATE UTILS =================
|
||||||
|
from .state_utils import *
|
||||||
|
|
||||||
|
# ================= AUTO DELETE =================
|
||||||
|
from .auto_delete import *
|
||||||
|
|
||||||
|
# ================= DECORATORS =================
|
||||||
|
from .decorators import *
|
||||||
|
|
||||||
|
from .telegram_emoji import *
|
||||||
3
configs/__init__.py
Normal file
3
configs/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from .cmd_alias_list import *
|
||||||
|
from .config import *
|
||||||
|
from .mapping import *
|
||||||
39
database/__init__.py
Normal file
39
database/__init__.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
"""
|
||||||
|
Database модуль для работы с банвордами в SQLite.
|
||||||
|
|
||||||
|
Использует SQLAlchemy ORM для async работы с БД.
|
||||||
|
|
||||||
|
Структура:
|
||||||
|
- models.py: Модели таблиц (BanWord, TempBanWord, WhitelistWord, Admin, Setting, SpamStat)
|
||||||
|
- database.py: Подключение к БД через SQLAlchemy
|
||||||
|
- repository.py: CRUD операции через ORM
|
||||||
|
- manager.py: Высокоуровневый API для handlers/middleware
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
from database import get_manager, BanWordType
|
||||||
|
|
||||||
|
# Инициализация
|
||||||
|
manager = get_manager()
|
||||||
|
await manager.init()
|
||||||
|
|
||||||
|
# Добавление банворда
|
||||||
|
await manager.add_banword("спам", BanWordType.SUBSTRING, added_by=123)
|
||||||
|
|
||||||
|
# Проверка (из кэша - быстро)
|
||||||
|
words = manager.get_banwords_cached(BanWordType.SUBSTRING)
|
||||||
|
if "спам" in text and "спам" in words:
|
||||||
|
await manager.log_spam(...)
|
||||||
|
|
||||||
|
# Режим тишины
|
||||||
|
await manager.set_silence_mode(minutes=30)
|
||||||
|
if await manager.is_silence_active():
|
||||||
|
# Удаляем всё
|
||||||
|
"""
|
||||||
|
|
||||||
|
from .models import *
|
||||||
|
|
||||||
|
from .database import *
|
||||||
|
|
||||||
|
from .repository import *
|
||||||
|
|
||||||
|
from .manager import *
|
||||||
2
middleware/__init__.py
Normal file
2
middleware/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
from .loggers import *
|
||||||
|
from .validators import *
|
||||||
1
middleware/loggers/__init__.py
Normal file
1
middleware/loggers/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from .logs import *
|
||||||
2
middleware/validators/__init__.py
Normal file
2
middleware/validators/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
from .email_vld import *
|
||||||
|
from .url_vld import *
|
||||||
Reference in New Issue
Block a user