Циклится отображение инлайн кнопок, как этого избежать?
python, telebot Всем привет! Решил по преколу попробовать сделать текстовую мморпг) Сейчас пытаюсь сделать сражение с монстром, чтобы перед каждой атакой у игрока спрашивали, в какую часть тела он хочет ударить, и он отвечал посредством нажатия на инлайн кнопок в чате. К сожалению, у меня почему то при запуске бесконечно отправляются сообщения о выборе места, куда игрок может ударить. Я понимаю почему это происходит, но не могу понять каким образом это исправить, так как опыта нет вообще. К сожалению break прописать не удается, так как получается, что он у меня будет находится не в цикле, а в другой функции внутри основной функции) Надеюсь я нормально объяснил. Буду очень благодарен, если подскажете как это исправить
@bot.message_handler(func=lambda message: message.text == 'Охота')
def hunting(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
go_fight = types.KeyboardButton('Начать поиски')
back_menu = types.KeyboardButton('Назад')
markup.add(go_fight, back_menu)
bot.send_message(
message.chat.id,
"Вы можете начать поиски монстров",
reply_markup=markup
)
@bot.message_handler(func=lambda message: message.text == 'Начать поиски')
def lets_fight(message):
hp_player = hp_global
hp_monster = 10
global xp_global
while hp_player > 0 and hp_monster > 0:
markup = types.InlineKeyboardMarkup()
hit_head = types.InlineKeyboardButton('Голова', callback_data='head')
hit_body = types.InlineKeyboardButton('Тело', callback_data='body')
hit_legs = types.InlineKeyboardButton('Ноги', callback_data='legs')
markup.add(hit_head, hit_body, hit_legs)
bot.send_message(
message.chat.id,
"Куда вы хотите ударить?",
reply_markup=markup
)
@bot.callback_query_handler(func=lambda call: True)
def hit_handler(call):
if call.data == 'head':
damage_to_monster = random.randint(4, 5)
hp_monster -= damage_to_monster
if hp_monster <= 0:
xp_global += 1
bot.send_message(
message.chat.id, "Монстр мертв"
)
damage_to_player = random.randint(1, 3)
hp_player -= damage_to_player
if hp_player <= 0:
bot.send_message(
message.chat.id, "Вы погибли"
)
if call.data == 'body':
damage_to_monster = random.randint(2, 3)
hp_monster -= damage_to_monster
if hp_monster <= 0:
xp_global += 1
bot.send_message(
message.chat.id, "Монстр мертв"
)
damage_to_player = random.randint(1, 3)
hp_player -= damage_to_player
if hp_player <= 0:
bot.send_message(
message.chat.id, "Вы погибли"
)
if call.data == 'legs':
damage_to_monster = random.randint(0, 1)
hp_monster -= damage_to_monster
if hp_monster <= 0:
xp_global += 1
bot.send_message(
message.chat.id, "Монстр мертв"
)
damage_to_player = random.randint(1, 3)
hp_player -= damage_to_player
if hp_player <= 0:
bot.send_message(
message.chat.id, "Вы погибли"
)
bot.send_message(
message.chat.id, f"Вы ударили монстра на {damage_to_monster} единиц здоровья. Здоровье монстра: {hp_monster}.")
bot.send_message(
message.chat.id, f"Монстр ударил вас на {damage_to_player} единиц здоровья. Ваше здоровье: {hp_player}.")
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
back_menu = types.KeyboardButton('Назад')
go_fight = types.KeyboardButton('Начать поиски')
markup.add(back_menu, go_fight)
bot.send_message(
message.chat.id,
"Вы можете начать поиски монстров",
reply_markup=markup
)
bot.polling()