Судя по-всему ситуация такая:
у вас несколько хендлеров, каждый из которых проверяет наличия юзера в чате.
@client.message_handler(commands = ['start'], func=check)
@client.message_handler(content_type= ['text'], func=check)
и т.д.
Пользователь присылает сообщение. Срабатывает проверка в первом хендлере. Во время этой проверке выясняется, что пользователь не состоит в чате, ему отправляется сообщение и возвращается False.
Из-за того, что первый хендлер не сработал, срабатывает проверка в следующем. И ситуация повторяется.
Как вариант, можно сделать следующее:
Насколько я понимаю, бот не должен ничего делать, если пользователь не состоит в чате.
Делайте отдельный хендлер с проверкой на то, то пользователь НЕ состоит в чате.
def check(message):
if client.get_chat_member(channel_chat_id, message.chat.id).status in need_status:
return False
else:
return True
@client.message_handler(content_types=['text'], func=check)
def access_denied(message):
client.send_message(message.chat.id, subscribe_error_msg)
И этот хендлер надо поставить выше всех остальных, тогда он будет ловить вообще все сообщения самым первым. Если пользователя нет в нужном чате, он срабатывает, пишет что проверка не пройдена и все, другие хендлеры работать не будут.
Думаю, суть понятна.