I am making a command which waits for a user to reply to the bot, but I would like the bot to only accept the author's reply.

@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 

My issue is that anyone can respond to "Pick a number," whereas I would only like the person who started the command to be able to respond.

I am not too sure what to try, but I think it may have something to do with arguments. I have no idea where to begin, though, so a solution would be appreciated! Thanks a ton.

4

1 Answer

You need rewrite your check so that it knows who the author is. One way of doing this is to use a closure. Let's say you have an existing check

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

You can replace this with a function that generates equivalent check functions with the author you want to check for injected into them

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

Then you would pass the inner check to wait_for by calling the outer check with the appropriate argument:

msg = await client.wait_for('message', check=check(context.author), timeout=30) 

For your check this would be

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 
3

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy