Aiogram не ждет ответ от пользователя, а выполняет всю функ. сразу
Пытаюсь в ботоводство и делаю бота с боевкой. Конечно, пока она выглядит максимально условно, но все же. Возник вопрос при создании самой функции сражения. Она просто не хочет ждать сообщение пользователя, а выводит все, как есть.
Код сражения
@rtr.message(Command('fight'))
async def fight_command(message: Message):
global in_battle
in_battle = True
await message.reply(f"Ты начал бой с {rand_enemy.name}! У него {rand_enemy.hp} здоровья.")
await fight_loop(message.chat.id)
async def fight_loop(chat_id):
global in_battle
while in_battle:
# Ход пользователя
bot.send_message(chat_id,'Твой ход! Напиши "атаковать"')
if (F.text == 'атаковать'):
rand_enemy.hp -= per.damage
await bot.send_message(chat_id, 'Вы атаковали!')
await bot.send_message(chat_id, f'''Ты нанес {per.damage} урона! У {rand_enemy.name}
осталось {max(0, rand_enemy.hp)} здоровья.''')
if rand_enemy.hp <= 0:
await bot.send_message(chat_id, f"Ты победил {rand_enemy.name}!")
in_battle = False
break
per.hp -= rand_enemy.damage
await bot.send_message(chat_id, f'''{rand_enemy.name} нанес тебе {rand_enemy.damage} урона!
У тебя осталось {max(0, per.hp)} здоровья.''')
if per.hp <= 0:
await bot.send_message(chat_id, f"Ты проиграл бой!")
in_battle = False
break
Код перса и мобов (если надо)
import random
class person():
hp = 100
damage = 10
class enemies():
def __init__(self, hp, damage, name):
self.hp = hp
self.damage = damage
self.name = name
rat = enemies(20, 5, 'Крыса')
goblin = enemies(50, 15, 'Гоблин')
per = person
list = [rat, goblin]
rand_enemy = random.choice(list)
И вот, что выводит бот: