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
|
||
)
|