Бот реагирует на инлайн кнопку, хотя не должен
Python, pyTelegremBotAPI. Пишу бота для текстовой рпг. При сражении игрок выбирает в какую часть монстра ударить с помощью инлайн кнопок. После того, как у монстра меньше 0 хп, игрок все равно может нажать на оставшиеся инлайн кнопки, и снова хп отнимется. Я думаю, мейби удалять эти кнопки, но был бы благодарен, если подскажете логику, почему так происходит
@bot.message_handler(func=lambda message: message.text == 'Охота')
def go_hunt(message):
markup = types.InlineKeyboardMarkup()
hit_head = types.InlineKeyboardButton('голова', callback_data='голова')
hit_body = types.InlineKeyboardButton('тело', callback_data='тело')
markup.add(hit_body, hit_head)
bot.reply_to(message, 'Where to hit?', reply_markup=markup)
@bot.callback_query_handler(func=lambda call: True)
def fight(call):
global my_heal_point, monster_heal_point, exp_global
if call.data == 'голова':
monster_heal_point -= 5
bot.send_message(call.message.chat.id,
f"Ты ударил монстра в голову! У него осталось - {monster_heal_point} жизней")
elif call.data == 'тело':
monster_heal_point -= 4
bot.send_message(call.message.chat.id,
f"Ты ударил монстра в тело! У него осталось - {monster_heal_point} жизней")
if my_heal_point <= 0:
bot.send_message(call.message.chat.id, 'Ты умер чмоха')
return
elif monster_heal_point <= 0:
exp_global += 1
bot.send_message(call.message.chat.id,
f'Монстр погиб, ваш опыт {exp_global}')
return
else:
markup = types.InlineKeyboardMarkup()
hit_head = types.InlineKeyboardButton('голова', callback_data='голова')
hit_body = types.InlineKeyboardButton('тело', callback_data='тело')
markup.add(hit_body, hit_head)
bot.send_message(call.message.chat.id,
'Куда ударить?', reply_markup=markup)
Ответы (1 шт):
Автор решения: AnnaBazueva
→ Ссылка
Просто добавьте проверку в функцию fight:
@bot.callback_query_handler(func=lambda call: True)
def fight(call):
global my_heal_point, monster_heal_point, exp_global
# Если монстр мертв, игнорируем нажатия на кнопки
if monster_heal_point <= 0:
bot.send_message(call.message.chat.id, 'Монстр уже мертв. Вы не можете его атаковать.')
return 1
# Next, the code for processing single messages
