Telegram Bot API Python | Фильтрация id пользователей

Рейтинг: 0Ответов: 1Опубликовано: 14.07.2023

У меня есть Id пользователей и мне нужно проверить: заблокировал ли пользователь бота, если да : убрать id этого пользователя из базы данных. Как это осуществить? Можете прикрепить код?

Ответы

▲ 0Принят

Не понятно в какой БД у вас хранятся id, покажу как можно опросить пользователей используя библиотеку requests

import requests
import time

token = 'TOKEN'
ids = ['864681328', '864681123', '864681229', '864681608', '864687548', '864681222', '864684213']

for x in ids:
    r = requests.get(f'https://api.telegram.org/bot{token}/sendMessage?chat_id={x}&text=привет')
    if r.json()['ok'] is False:
        print(x) # Вывод id чата, который либо заблокировал, либо не найден
        time.sleep(0.2) # на всякий случай добавляем небольшую паузу, чтобы не словить антифлуд

вообще, если бот заблокирован, то в ответ на get запрос телеграм отдает ответ:

{'ok': False, 'error_code': 403, 'description': 'Forbidden: bot was blocked by the user'}

а, к примеру, если чат не найден, то:

{'ok': False, 'error_code': 400, 'description': 'Bad Request: chat not found'}

по этому можете цепляться и за error_code и за description, как вам удобнее. Так же имейте ввиду, что если бот не заблокирован, то пользователю придет сообщение привет (можете изменить) от бота.

UPD

Если хотите указать parse_more и отправлять ссылку, то можете переделать код так:

import requests
import time

token = 'TOKEN'
ids = ['111111111', '222222222', '333333333']
url = '<a href="http://www.example.com/">Это ссылка на мой сайт</a>'

for x in ids:
    params = {"chat_id": x, "text": url, "parse_mode": "HTML"}
    r = requests.get(f'https://api.telegram.org/bot{token}/sendMessage', params)
    if r.json()['ok'] is False:
        print(x)
        time.sleep(0.2)