@Berthellar

Почему не работает inline кнопка (telebot)?

начинаю изучать питон, часть была написана с помощью ChatGPT(3), часть руками. Возникла следующая проблема:
При кнопке купить "Купить" появляется кнопка "Пополнить баланс" с call.data == 'balans'. Аналогичная кнопка появляется и при нажатии кнопки "Баланс". Вся остальная часть, кроме этой кнопки работает замечательно. Помогите пожалуйста найти причины неработоспособности.
import telebot
from telebot import types
import requests
TOKEN = '****'

bot = telebot.TeleBot(TOKEN)

# kurs
key = "https://api.binance.com/api/v3/ticker/price?symbol=BTCRUB"
data = requests.get(key)
data = data.json()
kurs = data['price']
kursstr = kurs.partition('.')[0]
kursint = int(kurs.partition('.')[0])
print(kursint)
# kurs









@bot.message_handler(commands=['start'])
def welcome_message(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton('Профиль')
    btn2 = types.KeyboardButton('Купить')
    btn3 = types.KeyboardButton('История заказов')
    btn4 = types.KeyboardButton('Поддержка')
    btn5 = types.KeyboardButton('Отзывы')
    btn6 = types.KeyboardButton('Баланс')
    markup.add(btn1, btn2, btn3, btn4, btn5, btn6)
    bot.send_message(message.chat.id, 'Приветствуем, друг! Добро пожаловать в наш магазин \n Узнать о всех доступных вакансиях ты можешь у @milfmefhunter \n Удачных покупок и приятных эмоций', reply_markup=markup)

def podknopka1_submenu(call):
    markup = types.InlineKeyboardMarkup(row_width=2)
    btn1 = types.InlineKeyboardButton('Москва', callback_data='sub_podknopka1_1')
    btn2 = types.InlineKeyboardButton('Санкт-Петербург', callback_data='sub_podknopka1_2')
    btn3 = types.InlineKeyboardButton('Екатеринбург', callback_data='sub_podknopka1_3')
    btn4 = types.InlineKeyboardButton('Доставка по РФ', callback_data='sub_podknopka1_4')
    markup.add(btn1, btn2, btn3, btn4)
    bot.send_message(call.message.chat.id, 'Выберите свой город:', reply_markup=markup)

def sbpnal(call):
    if call.data == 'sub_podknopka1_2':
        markup = types.InlineKeyboardMarkup()
        btn1 = types.InlineKeyboardButton('Дунайская ', callback_data='sub_podknopka1_2_1')
        btn2 = types.InlineKeyboardButton('Девяткино', callback_data='sub_podknopka1_2_2')
        btn3 = types.InlineKeyboardButton('Старая Деревня', callback_data='sub_podknopka1_2_3')
        btn4 = types.InlineKeyboardButton('Автово ', callback_data='sub_podknopka1_2_4')
        btn5 = types.InlineKeyboardButton('Новочеркасская', callback_data='sub_podknopka1_2_5')
        btn6 = types.InlineKeyboardButton('Площадь Восстания', callback_data='sub_podknopka1_2_6')
        markup.add(btn1, btn2, btn3, btn4, btn5,btn6)
        bot.send_message(call.message.chat.id, 'Выберите ближайшую станцию метро:', reply_markup=markup)

def msknal(call):
    if call.data == 'sub_podknopka1_1':
        mm = types.InlineKeyboardMarkup(row_width=2)
        but1 = types.InlineKeyboardButton('Планерная', callback_data='sub_podknopka1_1_1')
        but2 = types.InlineKeyboardButton('Лесопарковая', callback_data='sub_podknopka1_1_2')
        but3 = types.InlineKeyboardButton('Битца', callback_data='sub_podknopka1_1_3')
        but4 = types.InlineKeyboardButton('Ольховая', callback_data='sub_podknopka1_1_4')
        but5 = types.InlineKeyboardButton('Римская', callback_data='sub_podknopka1_1_5')
        but6 = types.InlineKeyboardButton('Медведково', callback_data='sub_podknopka1_1_6')
        but7 = types.InlineKeyboardButton('Аминьевская', callback_data='sub_podknopka1_1_7')
        but8 = types.InlineKeyboardButton('Минская', callback_data='sub_podknopka1_1_8')
        but9 = types.InlineKeyboardButton('Ховрино', callback_data='sub_podknopka1_1_9')
        but10 = types.InlineKeyboardButton('Тушинская', callback_data='sub_podknopka1_1_10')
        but11 = types.InlineKeyboardButton('Бульвар Рокоссовского', callback_data='sub_podknopka1_1_11')
        mm.add(but11, but10, but9, but8, but7, but6, but5, but4, but3, but2, but1)
        bot.send_message(call.message.chat.id, 'Выберите ближайшую станцию метро:', reply_markup=mm)

def ekbnal(call):
    if call.data == 'sub_podknopka1_3':
        mm = types.InlineKeyboardMarkup(row_width=2)
        but1 = types.InlineKeyboardButton('Солнечный Микрорайон', callback_data='sub_podknopka1_3_1')
        but2 = types.InlineKeyboardButton('Вторая Больница', callback_data='sub_podknopka1_3_2')
        but3 = types.InlineKeyboardButton('УрФУ', callback_data='sub_podknopka1_3_3')
        but4 = types.InlineKeyboardButton('Метро Проспект Космонавтов', callback_data='sub_podknopka1_3_4')
        mm.add(but4, but3, but2, but1)
        bot.send_message(call.message.chat.id, 'Выберите ближайшую станцию метро:', reply_markup=mm)

def rfnal(call):
    if call.data == 'sub_podknopka1_4':
        mm = types.InlineKeyboardMarkup(row_width=2)
        but1 = types.InlineKeyboardButton('Центральный ФО', callback_data='sub_podknopka1_4_1')
        but2 = types.InlineKeyboardButton('Северо-Западный ФО', callback_data='sub_podknopka1_4_2')
        but3 = types.InlineKeyboardButton('Южный ФО', callback_data='sub_podknopka1_4_3')
        but4 = types.InlineKeyboardButton('Северо-Кавказский ФО', callback_data='sub_podknopka1_4_4')
        but5 = types.InlineKeyboardButton('Приволжский ФО', callback_data='sub_podknopka1_4_5')
        but6 = types.InlineKeyboardButton('Уральский ФО', callback_data='sub_podknopka1_4_6')
        but7 = types.InlineKeyboardButton('Сибирский ФО', callback_data='sub_podknopka1_4_7')
        but8 = types.InlineKeyboardButton('Дальневосточный ФО', callback_data='sub_podknopka1_4_8')
        mm.add (but1, but2, but3, but4, but5, but6, but7, but8)
        bot.send_message(call.message.chat.id, 'Выберите округ для доставки:', reply_markup=mm)

@bot.callback_query_handler(func=lambda call: call.data.startswith(('sub_podknopka1', 'podknopka1')))
def handle_callback_query(call):
    if call.data == "podknopka1":
        podknopka1_submenu(call)
    elif call.data == "sub_podknopka1_1":
        msknal(call)
    elif call.data == "sub_podknopka1_2":
        sbpnal(call)
    elif call.data == "sub_podknopka1_3":
        ekbnal(call)
    elif call.data == "sub_podknopka1_4":
        rfnal(call)
    elif call.data == "balans":
        print (2+2)


@bot.message_handler(func=lambda message: True)
def menu(message):
    if message.text == 'Купить':
        markup = types.InlineKeyboardMarkup()
        btn1 = types.InlineKeyboardButton('Наличие', callback_data='podknopka1')
        btn2 = types.InlineKeyboardButton('Пополнить баланс', callback_data='balans')
        markup.add(btn1, btn2)
        bot.send_message(message.chat.id, 'Выберите действие:', reply_markup=markup)
    elif message.text == 'Профиль':
        chat_id = str(message.chat.id)
        bot.send_message(message.chat.id, '*Профиль* \n \nВаш ID: ' + chat_id + '\nВаш баланс: 0 руб.\nЗаказов: 0\nНа сумму: 0 руб.\nСредний чек: 0 руб.\nВаша скидка: 0%' , parse_mode = 'Markdown')
    elif message.text == 'Поддержка':
        bot.send_message(message.chat.id, '*По вопросам работы магазина, доступных вакансий и многого другого:*\n@milfmefhunter', parse_mode="Markdown")
    elif message.text == 'История заказов':
        bot.send_message(message.chat.id, '*Ваши последние заказы:*', parse_mode="Markdown")
    elif message.text == 'Отзывы':
        bot.send_message(message.chat.id, '*Все отзывы и новости публикуются в нашем основном канале:*\n@tgkvapeshop', parse_mode="Markdown")
    elif message.text == 'Баланс':
        markup = types.InlineKeyboardMarkup()
        btn2 = types.InlineKeyboardButton('Пополнить баланс', callback_data='balans')
        markup.add(btn2)
        bot.send_message(message.chat.id, '*Ваш баланс:*\n0₽ ~ 0 BTC\nКурс биткоина на текущий момент: ' + kursstr + '₽', parse_mode="Markdown", reply_markup=markup)









bot.polling(none_stop=True)
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ответы на вопрос 1
RimMirK
@RimMirK
Вроде человек. Вроде учусь. Вроде пайтону
убери ненужный фильтр в декораторе.
- @bot.callback_query_handler(func=lambda call: call.data.startswith(('sub_podknopka1', 'podknopka1')))
+ @bot.callback_query_handler(func=lambda call: True)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы