Как остановить выполнение кода до ввода следующего сообщения
Пишу бота для своего сервера, есть вот такая функция
async def buy_currency(ctx, arg):
embed_obj = discord.Embed()
embed_obj.title = f'**Вы точно хотите получить {arg} валюты? (да/нет).**'
embed_obj.colour = 0x0000E10B #C++ HEX - Colormania
await ctx.send(embed=embed_obj)
if ctx.message.text == 'да':
garant_temp_text = f'''Ожидайте, вам напишет администратор для приобретения валюты.'''
embed_obj = discord.Embed()
embed_obj.description = garant_temp_text
embed_obj.title = '**Заявка на покупку зарегестрирована.**'
embed_obj.colour = 0x0000E10B #C++ HEX - Colormania
await ctx.send(embed=embed_obj)
user = bot.get_user(414776948145782784)
garant_t_help_text = f'''Игрок {ctx.author.mention} хочет купить валюту.'''
embed_obj = discord.Embed()
embed_obj.description = garant_t_help_text
embed_obj.title = '**Покупка валюты**'
embed_obj.colour = 0x0000E10B #C++ HEX - Colormania
await user.send(embed=embed_obj)
else:
await ctx.send('wtf')
Нужно, что бы код после if ctx.message.text выполнялся ТОЛЬКО после ввода ещё одного сообщения.
Ответы (1 шт):
Обработку заказа ввдели в отдельную функцию.
Параметры клади в какой-то список, стек, очередь вместе с этой функцией. Например создай карирование через functools.partials
Да\нет принимай новым сообщением, забирай функцию с очереди и выполняй.
Отвечая на вопрос - прерывать программу тоже можно.
Нужно создать объект типа asyncio.Future https://docs.python.org/3/library/asyncio-future.html#asyncio.Future И поместить его в словарик.
yesno_fut[user] = loop.create_future()
Дальше делаешь if (await yesno_fut[user]) :
На этом месте твоя функция преврвалась.
При ответе да вызывается новый обработчик, в котором
yesno_fut[user].set_result(True)
После этого await что был выше исполнится и в if попадет True