Это определенно возможно с wait_for
, которое задокументировано здесь . Функция wait_for
ожидает любого указанного события, указанного в справочнике событий .
Она принимает три параметра Event
, Check (optional)
и timeout(optional)
в документации есть примеры, но для вас это будет примерно так:
bot = commands.Bot(command_prefix='.', case_insensitive=True)
@bot.command()
async def game(ctx):
# Whatever you want here
msg = await ctx.send("React first to win")
await msg.add_reaction('?')
def check(reaction, user):
return str(reaction.emoji) == '?' and user != bot.user
try:
# Timeout parameter is optional but sometimes can be useful
reaction, user = await bot.wait_for('reaction_add', timeout=30, check=check)
# Will wait until a user reacts with the specified checks then continue on with the code
await ctx.send(f"Congratulations {user.name} you won!")
except asyncio.TimeoutError:
# when wait_for reaches specified timeout duration (in this example it is 30 seconds)
await ctx.send("You ran out of time!")
Параметр Timeout=30
является на 100% необязательным, вы можете удалить его, чтобы он ждал вечно (или пока вы не выключите своего бота ). Параметр check
также является необязательным.
PS Я предполагаю, что вы используете python 3 или более, следовательно, F-строки