Проверка состоит ли пользователь в канале
Задача сделать так , чтобы бот проверял состоит ли человек в канале. Попытался получить user_id и проверить его статус в указанном канале.
import telebot
import config
from telebot import types
bot = telebot.TeleBot(config.token)
@bot.message_handler(content_types=['text'])
def lalala(message):
statuss = ['creator', 'administrator', 'member']
for chri in statuss:
if chri == bot.get_chat_member(chat_id='@pomogaikachannel', user_id=message.from_user.id).status:
bot.send_message(message.chat.id, 'Начнем!')
break
text_handler(message)
else:
bot.send_message(message.chat.id, 'Подпишитесь на канал @pomogaikachannel ')
bot.polling(none_stop=True)
После запуска кода в консоле отображается (__init__.py:455 MainThread) ERROR - TeleBot: "A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body: [b'{"ok":false,"error_code":400,"description":"Bad Request: user not found"}']" хотя пользователь существует и находится в канале. В чём может быть проблема? И как с ней разобраться?
Ответы (2 шт):
Попробуйте таким образом:
statuss = ['creator', 'administrator', 'member']
user_status = str(bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id).status)
if user_status in statuss:
bot.send_message(message.chat.id, 'Начнем!')
text_handler(message)
else:
bot.send_message(message.chat.id, 'Подпишитесь на канал @pomogaikachannel ')
Проблема оказалась в том , что бота нужно было добавить в администраторы канала и предоставить ему нужные права. Также строчка text_handler(message) оказалась лишней и её нужно просто убрать.