Как отследить, что пользователь заблокировал мой Telegram бот?

Рейтинг: -1Ответов: 2Опубликовано: 27.07.2023

Я хотел бы узнать, как можно отследить, что пользователь заблокировал мой Telegram бот. Моя задача состоит в том, чтобы удалять из базы данных пользователей, которые выходят из моего бота в Telegram.

Сейчас у меня реализован следующий обработчик события для бота, который, как я думал, должен срабатывать, когда пользователь удаляет бота из чата:

@dp.message_handler(content_types=[types.ContentType.LEFT_CHAT_MEMBER])
async def left_chat_member(message: types.Message):
    # Удаление из базы
    user_id = message.from_user.id
    print(f"Пользователь {user_id} удалил бота из чата.")

Однако, когда я тестировал это, обработчик не сработал, и база данных оставалась неизменной. Может быть, я делаю что-то не так?

Буду благодарен за любые советы или подсказки, как правильно отслеживать, когда пользователь заблокировал мой бот в Telegram и каким образом я могу удалить его из базы данных.

Заранее спасибо за вашу помощь!

Ответы

▲ 1

Бот в скрипт шлет сообщение в момент когда юзер блокирует/разблокирует бота, ловить их надо так:

@dp.my_chat_member_handler()
async def my_chat_member_handler(message: types.ChatMemberUpdated):
    if message.chat.type == 'private':
        if message.new_chat_member.status == "kicked":
            # сохраняем в базу что юзер заблочил бота
        elif tmessageg.new_chat_member.status == "member":
            # сохраняем в базу что юзер разблочил бота

и сохранять статус юзера в бот. Далее ты в базе можешь увидеть кто заблочил а кто нет

Если ты хочешь так проверить юзеров которые ранее у тебя в базе, к сожалению такого способа нет. Отправь рассылку на всех, и лови ответы. "bot was blocked by the user" - означает что юзер заблочил бота. и можешь после отправки сообщения сразу удалять.

▲ 0

Если Вы уже имеете ID удаленных пользователей, то такая конструкция, думаю, вам поможет отделить одних от других

   from aiogram.utils.exceptions import BotBlocked 
   try:
      await message.bot.send_message(DELETED_USER_ID, msg)
   except BotBlocked:
      // We do something, because bot blocked by user