from aiogram.filters import CommandStart, Command from aiogram.types import Message, CallbackQuery from aiogram import F, Router from aiogram.fsm.state import StatesGroup, State from aiogram.fsm.context import FSMContext from db import async_session from models import Users from sqlalchemy.future import select from sqlalchemy import and_ from states import Admin from config import ADMINS router = Router() @router.message(CommandStart()) async def start(message: Message, state: FSMContext): if message.from_user.id in ADMINS: await state.clear() await message.reply(f"Привет, я бот который следит за сообщениями в группе, и удаляет сообщения тех пользователей кого нет в моём списке.\n/admin_id") else: await message.delete() await message.answer( "Приветствую! Вы недавно в нашем чате? Тогда вам обязательно нужно [ознакомиться с методичкой для новичков](https://telegra.ph/Segodnya-reshila-napisat-metodichku-dlya-novichkov-kto-po-kakim-libo-prichinam-ne-smotrel-video-iz-chata-01-08-3).", parse_mode="Markdown", disable_web_page_preview=True ) @router.message(Command("admin_id")) async def admin_command(message: Message, state: FSMContext): if message.from_user.id in ADMINS: await state.set_state(Admin.users) await message.reply("Пожалуйста, введите ID пользователей, чьи сообщения не будут удаляться. Каждый ID должен быть на отдельной строке.") else: await message.delete() await message.answer( "Приветствую! Вы недавно в нашем чате? Тогда вам обязательно нужно [ознакомиться с методичкой для новичков](https://telegra.ph/Segodnya-reshila-napisat-metodichku-dlya-novichkov-kto-po-kakim-libo-prichinam-ne-smotrel-video-iz-chata-01-08-3).", parse_mode="Markdown", disable_web_page_preview=True ) @router.message(Admin.users) async def check_id(message: Message, state: FSMContext): if not message.text.isalpha(): ids = message.text.split("\n") valid_ids = [] async with async_session() as session: for user_id in ids: try: user_id_int = int(user_id.strip()) valid_ids.append(user_id_int) result = await session.execute(select(Users).where(Users.user_id == user_id_int)) existing_user = result.scalars().first() if not existing_user: new_user = Users(user_id=user_id_int) session.add(new_user) except ValueError: await message.reply(f"⛔ Ошибка: ID `{user_id}` не является числом.") continue await session.commit() await message.reply("Список ID пользователей, чьи сообщения не будут удаляться, успешно обновлен! 👍") await state.clear() else: await message.reply("⛔ Ошибка: ID должны состоять только из цифр.") await state.clear() @router.message() async def delete_messages(message: Message): user_id = message.from_user.id if user_id in ADMINS: return async with async_session() as session: result = await session.execute(select(Users).where(Users.user_id == user_id)) existing_user = result.scalars().first() if not existing_user: await message.delete() await message.answer( "Приветствую! Вы недавно в нашем чате? Тогда вам обязательно нужно [ознакомиться с методичкой для новичков](https://telegra.ph/Segodnya-reshila-napisat-metodichku-dlya-novichkov-kto-po-kakim-libo-prichinam-ne-smotrel-video-iz-chata-01-08-3).", parse_mode="Markdown", disable_web_page_preview=True )