Инициализатор модуля

This commit is contained in:
2026-02-23 14:07:32 +07:00
parent a474814b7d
commit 4f5aaba0ce
21 changed files with 377 additions and 0 deletions

4
bot/__init__.py Normal file
View 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
View File

@@ -0,0 +1,5 @@
"""
Модуль управления ботом
"""
from .bots import *
from .webhook import *

11
bot/filters/__init__.py Normal file
View 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
View 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,
)

View 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,
)

View 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,
)

View 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,
)

View 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,
)

View 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)

View File

@@ -0,0 +1,2 @@
from .inline import *
from .reply import *

142
bot/middlewares/__init__.py Normal file
View 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
View File

@@ -0,0 +1 @@
from .text_processing import *

0
bot/states/__init__.py Normal file
View File

4
bot/tasks/__init__.py Normal file
View File

@@ -0,0 +1,4 @@
"""
Модуль фоновых задач для бота
"""
from .cleanup import *

View File

@@ -0,0 +1 @@
from .message_callback import *

39
bot/utils/__init__.py Normal file
View 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
View File

@@ -0,0 +1,3 @@
from .cmd_alias_list import *
from .config import *
from .mapping import *

39
database/__init__.py Normal file
View 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
View File

@@ -0,0 +1,2 @@
from .loggers import *
from .validators import *

View File

@@ -0,0 +1 @@
from .logs import *

View File

@@ -0,0 +1,2 @@
from .email_vld import *
from .url_vld import *