Как удалить сообщение участника Телеграм группы, если для него есть ограничения?
Подскажите как удалить сообщение участника группы, если по параметрам не прошел проверку. Суть такова: Есть группа. Участники пишут разные сообщения, но часто прилетает реклама. Я решил написать бота кторый будет отсеивать частую рекламу. Логика такова: Есть единственный роутер @router.message(), который принимает все сообщения, подхватывает нужные данные (message.from_user.id, message.chat.id, message.message_id...) и перенаправляет на функцию регистрации в базе данных
async def set_user(tg_id, username, k_msng, ch_id, mеs_id):
Эта функция проверяет, если ID пользователя нет в базе, то заносит в базу его данные и необходимые метки для проверки на спам.
Если есть в базе, то передаёт на другую функцию, async def spamer(tg_id, username, k_msng, ch_id, mуs_id):
которая смотрит его данные в базе, сверяет с допустимыми (Например: этому пользователю разрешено писать в группе не более 4 сообщения в неделю. Функция проверяет в базе лимит его сообщений и остаток времени ограничения. Если лимит не исчерпан, то ничего не делаем, если ичерпан, то сообщение нужно удалить и написать уведомление для него, что он спамер)
Эта функция проверяет, разрешено ли ему писать и причину неразрешения. Так вот если не разрешено, нужно удалить это сообщение и уведомить спамера об этом. Но не получается никак.
async def set_user(tg_id, username, k_msng, ch_id, msid):
async with session_maker() as session:
user = await session.scalar(select(User).where(User.tg_id == tg_id)) # проверяем юзера на присутствие в базе
if user is not None: # Если юзер в базе есть, сразу увеличиваем счётчик сообщений
.........
await session.execute(cursor)
await session.commit() # сохраняем в базе
await spamer(tg_id, username, k_msng, ch_id, msid) # дальше отправляем на функцию проверки спамер или нет
else: # Если юзера нет в базе, то создаём запись, создаём юзера и записываем в БД ..............................
await session.commit() # сохранить в БД
# Проверяем на спамерство
async def spamer(tg_id, username, k_msng, ch_id, msid):
async with session_maker() as session:
...........................
if activ: #Если спамер (activ = 1), проверяем дату ограничения
print('Активный спамер. Проверяем дату ограничения')
date_t=time.time()
.............................
await session.commit() # сохраняем в базе
if data2 < date_t: # Если у спамера дата ограничения меньше сегодняшней
cursor = update(User).where(User.tg_id == tg_id).values( # Устанавливаем лимит сообщений
.................................
date_t2=time.time() + dney)
await session.execute(cursor)
await session.execute(cursor1)
await session.commit() # сохраняем в базе
if kol_msg < 0: # Лимит даты не вычерпан. Проверяем лимит сообщений
ЗДЕСЬ НУЖНО УДАЛИТЬ ЕГО СООБЩЕНИЕ
И СООБЩИТЬ ЧТО ОН СПАМЕР.
await message.delete(ch_id, msid) НЕ РАБОТАЕТ
print(f'Лимит сообщений закончен и равен {kol_msg}')
Ответы (1 шт):
if activ:
date_t = time.time()
data2 = user.date_t2 # Проверяем дату ограничения
if data2 < date_t: # Если дата ограничения истекла
cursor = update(User).where(User.tg_id == tg_id).values(
kol_msg=0, # Обнуляем количество сообщений
date_t2=time.time() + dney # Устанавливаем новый лимит
)
await session.execute(cursor)
await session.commit()
if kol_msg < 0: # Лимит сообщений не вычерпан
# Удаляем сообщение
await message.delete() # Удаляем сообщение с помощью message.delete()
# Уведомляем спамера
await message.answer("Вы достигли лимита сообщений и не можете отправлять больше сообщений. Вы заблокированы.")
print("Сообщение удалено, пользователь - спамер")