我有以下代码:
self.current_task = self.bot.wait_for('message', check=check, timeout=10 * 60)
response = await self.current_task
但是,如果同一类中的另一个函数中的条件变为真,我希望 bot.wait_for 取消。我试过做 self.current_task.close(),但是它在返回 nonetype 之前仍然等待响应/超时。
答案 0 :(得分:0)
你可以有一个变量来评估条件是否满足,在检查函数中只需检查它是否满足并引发错误并在 try/except 块中捕获它
def check(m):
if self.is_condition_met: # Change the variable accordingly
raise # Whatever error you want
return # normal check
一个例子是
class SomeCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.is_condition_met = False
@commands.command()
async def met(self, ctx):
self.is_condition_met = True
@commands.command()
async def foo(self, ctx):
await ctx.send("Please send a message")
def check(m):
if self.is_condition_met:
raise RuntimeError("condition is met")
return ctx.author == m.author
try:
message = await bot.wait_for("message", check=check, timeout=20.0)
except TypeError:
await ctx.send("Condition was met")
except asyncio.TimeoutError:
await ctx.send("Time is over")
如果您先调用 foo
命令,然后调用 met
命令,则等待应在有人发送消息后立即取消