После выполнения if срабатывает и else, как можно решить?

import telebot
from telebot import types
import webbrowser
import random

api = 'TOKEN'
bot = telebot.TeleBot(api)

#Капча
@bot.message_handler(commands = ['start'])
def start(message):
    markup = types.InlineKeyboardMarkup()
    btn1 = types.InlineKeyboardButton('?', callback_data = '?')
    btn2 = types.InlineKeyboardButton('?', callback_data = '?')
    btn3 = types.InlineKeyboardButton('?', callback_data = '?')
    markup.row(btn1, btn2, btn3)
    icon = ['?', '?', '?']
    global antibot 
    antibot = random.choice(icon)
    bot.send_message(message.chat.id, f'<b>✌?Привет, {message.from_user.first_name}.\n\nНажми на {antibot} , чтобы я убедился, что ты не робот.</b>', parse_mode="html", reply_markup = markup)

#Ловим callback
@bot.callback_query_handler(func = lambda call: True)
def antibotresult(call):
    antibotnew = antibot
    if call.data == antibotnew:
        bot.delete_message(call.message.chat.id, call.message.message_id)
        markup2 = types.InlineKeyboardMarkup()
        menubtn = types.InlineKeyboardButton('В главное меню', callback_data = 'menu')
        markup2.row(menubtn)
        bot.send_message(call.message.chat.id, '<b>Проверка пройдена, для продолжения нажми кнопку.</b>', reply_markup = markup2, parse_mode="html")
        
    else:
        bot.delete_message(call.message.chat.id, call.message.message_id)
        markup3 = types.InlineKeyboardMarkup()
        returnbtn = types.InlineKeyboardButton('Повторить попытку.', callback_data = 'return')
        markup3.row(returnbtn)
        bot.send_message(call.message.chat.id, '<b>Проверка не пройдена.</b>', parse_mode="html", reply_markup = markup3)
        

bot.polling(none_stop = True)

После выполнения if срабатывает и else, в чем может быть проблема?


Ответы (1 шт):

Автор решения: Amgarak

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

import telebot
from telebot import types
import random
import re

api = 'TOKEN'
bot = telebot.TeleBot(api)

# Капча
@bot.message_handler(commands=['start'])
def start(message):
    markup = types.InlineKeyboardMarkup()
    btn1 = types.InlineKeyboardButton('?', callback_data='?')
    btn2 = types.InlineKeyboardButton('?', callback_data='?')
    btn3 = types.InlineKeyboardButton('?', callback_data='?')
    markup.row(btn1, btn2, btn3)
    icon = ['?', '?', '?']
    antibot = random.choice(icon)  
    bot.send_message(message.chat.id, f'<b>✌?Привет, {message.from_user.first_name}.\n\nНажми на {antibot}, чтобы я убедился, что ты не робот.</b>', parse_mode="html", reply_markup=markup)
    
# Ловим callback
@bot.callback_query_handler(func=lambda call: True)
def antibotresult(call):
    symbols = ['?', '?', '?']
    antibot = None

    # Получаем значение antibot из текста сообщения
    for symbol in symbols:
        if re.search(symbol, call.message.text):
            antibot = symbol
            break
 
    if call.data == antibot:
        bot.delete_message(call.message.chat.id, call.message.message_id)
        markup2 = types.InlineKeyboardMarkup()
        menubtn = types.InlineKeyboardButton('В главное меню', callback_data='menu')
        markup2.row(menubtn)
        bot.send_message(call.message.chat.id, '<b>Проверка пройдена, для продолжения нажми кнопку.</b>', reply_markup=markup2, parse_mode="html")
        
    elif call.data in ['menu', 'return']:
        bot.delete_message(call.message.chat.id, call.message.message_id)
        markup = types.InlineKeyboardMarkup()
        btn1 = types.InlineKeyboardButton('?', callback_data='?')
        btn2 = types.InlineKeyboardButton('?', callback_data='?')
        btn3 = types.InlineKeyboardButton('?', callback_data='?')
        markup.row(btn1, btn2, btn3)
        icon = ['?', '?', '?']
        antibot = random.choice(icon)  
        bot.send_message(call.message.chat.id, f'<b>✌?Привет, {call.from_user.first_name}. Повторим проверку? \n\nНажми на {antibot}, чтобы я убедился, что ты не робот.</b>', parse_mode="html", reply_markup=markup)

    else:
        bot.delete_message(call.message.chat.id, call.message.message_id)
        markup3 = types.InlineKeyboardMarkup()
        returnbtn = types.InlineKeyboardButton('Повторить попытку.', callback_data='return')
        markup3.row(returnbtn)
        bot.send_message(call.message.chat.id, '<b>Проверка не пройдена.</b>', parse_mode="html", reply_markup=markup3)
        
bot.polling(none_stop=True)
→ Ссылка