Python - 在 Discord.py-v1.0 中是否可以 wait_for 一个或另一个事件?
Python - Is it possible to wait_for one event or another in Discord.py-v1.0?
是否可以使用 wait_for
等待 reaction_add
或 reaction_remove
?
我看到有 on_reaction_add
和 on_reaction_remove
函数,但我想要一种没有这些函数的方法。
我想要这样的东西:
reaction,user=await bot.wait_for('reaction_add/reaction_remove',check=check)
因为这看起来是在使用 asyncio
工具,所以使用内置函数。只需为每个创建一个任务,然后使用 asyncio.wait
等待第一个触发:
pending_tasks = [bot.wait_for('reaction_add',check=check),
bot.wait_for('reaction_remove',check=check)]
done_tasks, pending_tasks = await asyncio.wait(pending_tasks, return_when=asyncio.FIRST_COMPLETED)
当其中一项任务完成时,这将 return,完成的任务将出现在 done_tasks
集合中。如果您在其中一项任务完成后不再对其他任务感兴趣,您可以继续并取消其他任务,例如:
for task in pending_tasks:
task.cancel()
是否可以使用 wait_for
等待 reaction_add
或 reaction_remove
?
我看到有 on_reaction_add
和 on_reaction_remove
函数,但我想要一种没有这些函数的方法。
我想要这样的东西:
reaction,user=await bot.wait_for('reaction_add/reaction_remove',check=check)
因为这看起来是在使用 asyncio
工具,所以使用内置函数。只需为每个创建一个任务,然后使用 asyncio.wait
等待第一个触发:
pending_tasks = [bot.wait_for('reaction_add',check=check),
bot.wait_for('reaction_remove',check=check)]
done_tasks, pending_tasks = await asyncio.wait(pending_tasks, return_when=asyncio.FIRST_COMPLETED)
当其中一项任务完成时,这将 return,完成的任务将出现在 done_tasks
集合中。如果您在其中一项任务完成后不再对其他任务感兴趣,您可以继续并取消其他任务,例如:
for task in pending_tasks:
task.cancel()