deleting_messages/handlers.py
2025-01-11 03:09:05 +06:00

89 lines
4.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
)