gpt4 book ai didi

python - discord.py 如何使用 wait_for 等待作者消息?

转载 作者:行者123 更新时间:2023-12-01 08:19:46 27 4
gpt4 key购买 nike

我正在创建一个等待用户回复机器人的命令,但我希望机器人只接受作者的回复。

@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

我的问题是任何人都可以响应“选择一个号码”,而我只希望启动命令的人能够响应。

我不太确定要尝试什么,但我认为这可能与争论有关。不过,我不知道从哪里开始,因此将不胜感激!非常感谢。

最佳答案

您需要重写您的检查,以便它知道作者是谁。做到这一点的一种方法是使用闭包。假设您有一张现有支票

def check(message):
return message.content == "Hello"

您可以将其替换为一个函数,该函数会生成等效的检查函数,并将您想要检查的作者注入(inject)其中

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

关于python - discord.py 如何使用 wait_for 等待作者消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54723139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com