Как удалить сообщение участника Телеграм группы, если для него есть ограничения?

Подскажите как удалить сообщение участника группы, если по параметрам не прошел проверку. Суть такова: Есть группа. Участники пишут разные сообщения, но часто прилетает реклама. Я решил написать бота кторый будет отсеивать частую рекламу. Логика такова: Есть единственный роутер @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("Сообщение удалено, пользователь - спамер")
→ Ссылка