我正在执行一条命令,等待用户回复该漫游器,但我希望该漫游器仅接受作者的回复。
@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
我的问题是,任何人都可以回答“选择号码”,而我只希望启动命令的人能够回答。
我不太确定尝试什么,但是我认为这可能与参数有关。不过,我不知道从哪里开始,因此不胜感激!多谢。
答案 0 :(得分: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