Задать вопрос
@Alwex0920

Не работает inline кнопка telebot?

При нажатии на кнопку ничего не происходит, а раньше всё работало.
вот код
def show_subscription_options(chat_id):
    USER_ID = chat_id  # Получаем user_id из chat_id
    markup = types.InlineKeyboardMarkup()

    # Кнопки для выбора тарифа
    for period, price in prices.items():
        btn = types.InlineKeyboardButton(text=f"{period.capitalize()} - {price}₽", callback_data=period)
        markup.add(btn)

    # Кнопка пробного периода только если можно активировать
    if can_activate_trial(USER_ID):
        trial_btn = types.InlineKeyboardButton(
            text="Активировать пробный период", 
            callback_data="activate_trial"
        )
        markup.add(trial_btn)
    else:
        bot.send_message(chat_id, "⚠️ Пробный период уже был использован")

    bot.send_message(chat_id, "Выберите тариф:", reply_markup=markup)

@bot.callback_query_handler(func=lambda call: call.data == "activate_trial")
def func_activate_trial(call):
    print("[DEBUG]: Кнопка activated_trial нажата!")
    try:
        USER_ID = call.from_user.id
        
        print(f"[DEBUG]: Активация пробного периода для {USER_ID}")
        bot.send_message(USER_ID, "Загрузка...")
        
        if not can_activate_trial(USER_ID):
            bot.send_message(USER_ID, "❌ Пробный период уже был активирован")
            return
            
        # Сбрасываем данные и активируем
        trial_data[USER_ID] = {
            'questions': 0,
            'symbols': 0,
            TRIAL_ACTIVATED_FLAG: True
        }
        trial_data.save_to_disk()
        
        bot.send_message(USER_ID, "✅ Пробный период активирован! Доступно: 10 вопросов / 10 000 символов")
        
        # Обновляем интерфейс
        bot.edit_message_reply_markup(
            chat_id=call.message.chat.id,
            message_id=call.message.message_id,
            reply_markup=None
        )
        
    except Exception as e:
        print(f"Ошибка активации: {str(e)}")
        bot.answer_callback_query(call.id, "❌ Ошибка активации", show_alert=True)

def can_activate_trial(user_id):
    data = trial_data[user_id]
    # Можно активировать только если не активирован ИЛИ активирован но не использован
    return not data[TRIAL_ACTIVATED_FLAG] or \
           (data[TRIAL_ACTIVATED_FLAG] and not is_trial_active(user_id))
  • Вопрос задан
  • 13 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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