Даже если пользователь сейчас не в канале, метод
get_chat_member
не выкинет исключение. Это справедливо для покинувших канал (были кикнуты или вышли сами). Так что нужно еще проверить статус на этот случай. По сути, нужных нам только два - left и kicked. Все статусы и типы описаны тут -
https://core.telegram.org/bots/api#chatmember
def is_subscribed(chat_id, user_id):
try:
user = bot.get_chat_member(chat_id, user_id)
if user.status in ('left', 'kicked'):
return False
return True
except ApiTelegramException as e:
if e.result_json['description'] == 'Bad Request: user not found':
return False