deleting_messages/handlers.py

89 lines
4.3 KiB
Python
Raw Permalink Normal View History

2025-01-11 03:09:05 +06:00
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
)