Как сделать два @bot.callback_query_handler чтобы они обрабатывали каждую фунцию отдельно
У меня есть две функции get_promo и get_calc мне нужно чтобы @bot.callback_query_handler обрабатывали каждую фунцию отдельно.Снизу освещены данные функции и соответствующие обработчики к ним. Но почему-то когда дело доходит до обработчика функции никаких действий не выполняет. В чем может быть проблема ???
@bot.message_handler(commands=['promo'])
def get_promo(message):
if auth(message.chat.id):
# кнопки
keyboard = telebot.types.InlineKeyboardMarkup()
# почергово готуєм текст і обробник для кожної кнопки. виводим кнопки на екран
for promo_code in PromoCode.objects.filter(is_active=True):
key_gift_code = telebot.types.InlineKeyboardButton(
text=promo_code.alias, callback_data=f'promo_code__{promo_code.id}'
)
keyboard.add(key_gift_code)
# показуєм всі кнопки і відображаєм текс
bot.send_message(message.from_user.id, text='Вибирай промо', reply_markup=keyboard)
else:
bot.send_message(
message.chat.id,
f'Доступ обмежено.\nТвій ID: {message.chat.id} \nЗверністься до адміністратора @den4ik.zim з своїм чат ід'
)
@bot.callback_query_handler(func=lambda call: call.data == 'promo_code')
def callback_worker_promo(call):
# global USER_NUM1, USER_NUM2, A, B
try:
model_type, object_id = call.data.split("__")
except ValueError:
bot.send_message(call.message.chat.id, 'Отримано невірні дані.')
return None
#if model_type in ['promo_code', '1']:
try:
promo_code = PromoCode.objects.get(id=int(object_id))
bot.send_message(call.message.chat.id, promo_code.code) # виводим текс у тг.
except PromoCode.DoesNotExist:
bot.send_message(call.message.chat.id, 'Такого промокода не існує!')
# функція старту розрахунку продукта
@bot.message_handler(commands=['calc'])
def get_calc(message):
if auth(message.chat.id):
markup = types.ReplyKeyboardRemove(selective=False)
msg = bot.send_message(
message.chat.id,
f'Привіт, {message.from_user.first_name}, я почнемо рахувати \nВведіть суму кредиту',
reply_markup=markup
)
bot.register_next_step_handler(msg, process_num1_step)
else:
bot.send_message(
message.chat.id,
f'Доступ обмежено.\nТвій ID: {message.chat.id} \nЗверністься до адміністратора @den4ik.zim з своїм чат ід'
)
# алогоритм розрахунку позики
# функція записує в глобальну зміну цифру отриману від користувача
def process_num1_step(message, user_result=None):
try:
global USER_NUM1
# запам'ятовуєм число
# якщо тільки почали /розрахунок
if user_result is None:
USER_NUM1 = int(message.text)
else:
# якщо результат був переданий раніше
# пишим перше число, не запитуючи
USER_NUM1 = int(user_result)
msg = bot.send_message(message.chat.id, "Введіть кількість днів")
bot.register_next_step_handler(msg, process_num2_step)
except Exception as e:
bot.reply_to(message, 'Це не число або щось пілшло не так...')
# отримання 2 числа
@bot.message_handler(func=lambda message: True, content_types=['text'])
def process_num2_step(message):
try:
global USER_NUM2
# запам'ятовуємо число
USER_NUM2 = int(message.text)
# генерація списка продуктів
message.text = bot.send_message(message.chat.id, "Почнемо рахувати")
keyboard = telebot.types.InlineKeyboardMarkup()
for product in Product.objects.all():
key_product = telebot.types.InlineKeyboardButton(
text=product.name, callback_data=f'product__{product.id}'
)
keyboard.add(key_product)
bot.send_message(message.from_user.id, text="Вибери продукт", reply_markup=keyboard)
except Exception as e:
bot.reply_to(message, 'Це не число або щось пілшло не так...')
@bot.callback_query_handler(func=lambda call: call.data == 'product')
def callback_worker_calc(call):
global USER_NUM1, USER_NUM2, A, B
try:
model_type, object_id = call.data.split("__")
except ValueError:
bot.send_message(call.message.chat.id, 'Отримано невірні дані.')
return None
if model_type == 'product':
try:
product = Product.objects.get(id=int(object_id))
except Product.DoesNotExist:
bot.send_message(call.message.chat.id, 'Такого продукту не існує!')
return None
user_result = (USER_NUM1 * product.value) * USER_NUM2 + USER_NUM1
user_proc = USER_NUM1 * product.value
user_proc_in_full_time = USER_NUM1 * product.value * USER_NUM2
Ответы (1 шт):
Автор решения: vp_arth
→ Ссылка
Попробуйте startswith:
@bot.callback_query_handler(func=lambda call: call.data.startswith('promo_code'))
def callback_worker_promo(call):
pass
@bot.callback_query_handler(func=lambda call: call.data.startswith('product'))
def callback_worker_calc(call):
pass