diff --git a/handlers/__init__.py b/handlers/__init__.py index f984092c..85ac4866 100644 --- a/handlers/__init__.py +++ b/handlers/__init__.py @@ -12,6 +12,7 @@ from .pay import router as pay_router from .payments import router as payments_router from .profile import router as profile_router from .start import router as start_router +from .user import router as user_router router = Router(name="handlers_main_router") @@ -26,4 +27,5 @@ router.include_routers( keys_router, instructions_router, admin_router, + user_router, ) diff --git a/handlers/notifications.py b/handlers/notifications.py index cc3cc46c..cdc2263c 100644 --- a/handlers/notifications.py +++ b/handlers/notifications.py @@ -36,28 +36,6 @@ from logger import logger router = Router() -async def check_users_and_update_blocked(bot: Bot): - conn = None - try: - conn = await asyncpg.connect(DATABASE_URL) - users = await conn.fetch("SELECT tg_id FROM users") - - for user in users: - try: - await bot.send_chat_action(user['tg_id'], "typing") - except (TelegramForbiddenError,Exception): - await conn.execute( - "INSERT INTO blocked_users (tg_id) VALUES ($1) ON CONFLICT (tg_id) DO NOTHING", - user['tg_id'] - ) - logger.info(f"User {user['tg_id']} added to blocked_users") - except Exception as e: - logger.error(f"Error in check_users_and_update_blocked: {e}") - finally: - if conn: - await conn.close() - - async def periodic_expired_keys_check(bot: Bot): """Периодическая проверка истекших ключей с кастомным интервалом.""" while True: diff --git a/handlers/user.py b/handlers/user.py new file mode 100644 index 00000000..5e183db8 --- /dev/null +++ b/handlers/user.py @@ -0,0 +1,21 @@ +from typing import Any + +from aiogram import Router +from aiogram.filters.chat_member_updated import KICKED, MEMBER, ChatMemberUpdatedFilter +from aiogram.types import ChatMemberUpdated + +from logger import logger + +router = Router() + + +@router.my_chat_member(ChatMemberUpdatedFilter(member_status_changed=KICKED)) +async def user_blocked_bot(event: ChatMemberUpdated, session: Any): + logger.info(f"User {event.from_user.id} blocked the bot.") + await session.execute("INSERT INTO blocked_users (tg_id) VALUES ($1) ON CONFLICT (tg_id) DO NOTHING", event.from_user.id) + + +@router.my_chat_member(ChatMemberUpdatedFilter(member_status_changed=MEMBER)) +async def user_unblocked_bot(event: ChatMemberUpdated, session: Any): + logger.info(f"User {event.from_user.id} unblocked the bot.") + await session.execute("DELETE FROM blocked_users WHERE tg_id = $1", event.from_user.id) diff --git a/middlewares/__init__.py b/middlewares/__init__.py index 66397ae5..3257c3bd 100644 --- a/middlewares/__init__.py +++ b/middlewares/__init__.py @@ -1,12 +1,13 @@ from typing import Any -from admin import AdminMiddleware from aiogram import Dispatcher -from delete import DeleteMessageMiddleware -from loggings import LoggingMiddleware -from session import SessionMiddleware -from throttling import ThrottlingMiddleware -from user import UserMiddleware + +from .admin import AdminMiddleware +from .delete import DeleteMessageMiddleware +from .loggings import LoggingMiddleware +from .session import SessionMiddleware +from .throttling import ThrottlingMiddleware +from .user import UserMiddleware def register_middleware(dispatcher: Dispatcher) -> None: