discord.py 如何使用 wait_for 等待作者消息?
Posted
技术标签:
【中文标题】discord.py 如何使用 wait_for 等待作者消息?【英文标题】:discord.py how to wait for author message using wait_for? 【发布时间】:2019-07-10 09:53:37 【问题描述】:我正在发出等待用户回复机器人的命令,但我希望机器人只接受作者的回复。
@client.command(name='numgame',
brief='Guess a number between 1 and 100',
pass_context=True)
async def numgame(context):
number = random.randint(1,100)
guess = 4
while guess != 0:
await context.send('Pick a number between 1 and 100')
msg = await client.wait_for('message', check=check, timeout=30)
attempt = int(msg.content)
if attempt > number:
await context.send(str(guess) + ' guesses left...')
await asyncio.sleep(1)
await context.send('Try going lower')
await asyncio.sleep(1)
guess -= 1
elif attempt < number:
await context.send(str(guess) + ' guesses left...')
await asyncio.sleep(1)
await context.send('Try going higher')
await asyncio.sleep(1)
guess -=1
elif attempt == number:
await context.send('You guessed it! Good job!')
break
我的问题是任何人都可以响应“选择一个数字”,而我只希望启动命令的人能够响应。
我不太确定该尝试什么,但我认为这可能与争论有关。不过,我不知道从哪里开始,所以一个解决方案将不胜感激!非常感谢。
【问题讨论】:
我们能看到你的check
吗?您需要在该函数中包含对作者的检查
@PatrickHaugh ,我编辑了我的帖子以显示整个命令。希望这会有所帮助。
您将check=check
传递给wait_for
。 check
是什么?
哦,我使用的支票完全不相关。哈哈,那我怎么让它得到作者呢?
【参考方案1】:
您需要重写您的check
,以便它知道作者是谁。一种方法是使用闭包。假设您有一张现有的支票
def check(message):
return message.content == "Hello"
您可以将其替换为生成等效检查函数的函数,并将您要检查的作者注入其中
def check(author):
def inner_check(message):
return message.author == author and message.content == "Hello"
return inner_check
然后您将通过使用适当的参数调用外部检查将内部检查传递给wait_for
:
msg = await client.wait_for('message', check=check(context.author), timeout=30)
为了您的检查,这将是
def check(author):
def inner_check(message):
if message.author != author:
return False
try:
int(message.content)
return True
except ValueError:
return False
return inner_check
【讨论】:
我现有的检查是:def check(message): try: int(message.content) return True except ValueError: return False
在这种情况下我应该如何合并闭包?
嘿,我知道这个答案已经 2 年了,但我试过了,得到了:discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: rolecheck() takes 1 positional argument but 2 were given
没关系,我忘了传递自我,因为命令在齿轮中哈哈以上是关于discord.py 如何使用 wait_for 等待作者消息?的主要内容,如果未能解决你的问题,请参考以下文章
discord.py wait_for message... 如何取消息内容和写消息的人?
Discord.py:wait_for('reaction_add') 未按预期工作
在 discord.py wait_for 上带有 check() 的 TypeError