89 lines
4.3 KiB
Python
89 lines
4.3 KiB
Python
|
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
|
|||
|
)
|