Проверьте, приходит ли wait_for_message от определенного пользователя и вводит ли определенное сообщение

#python-3.x #discord.py

#python-3.x #discord.py

Вопрос:

Я пытаюсь выполнить команду, которая запрашивает пользователя, который упоминается в команде подобным образом sir pls testinput @user , хочет ли он играть. Если он отвечает с sir pls testinput accept , то он должен что-то сделать.

Мой подход к этому был (который, к сожалению, не работает, потому что у него нет атрибута content и, вероятно, также нет author .

 @bot.command(pass_context = True)
async def testinput(ctx, user: discord.Member=None):
    await bot.say('Do you want to play {}? If yes type **sir pls testinput accept**.'.format(user.mention))
    response = bot.wait_for_message(author=user, content="sir pls testinput accept", timeout=30)
    if response.content == "sir pls testinput accept" and response.author == user:
        await bot.say('User {} decided to play with you {}'.format(user, ctx.message.author))
    else:
        await bot.say('Debug: Skipped the if statement')
  

Комментарии:

1. wait_for_message это сопрограмма. Вам просто нужно добавить await перед ним, чтобы оно могло вернуть вам сообщение. Итак response = await bot.wait_for_message

2. Боже, я пытался отлаживать эту команду в течение часа и забыл только await перед командой. Я чувствую себя таким тупым прямо сейчас xD. Большое вам спасибо @Tristo .

Ответ №1:

Как сказал @Tristo в комментариях, я забыл добавить await перед командой, поскольку это сопрограмма.

Рабочая команда выглядит следующим образом:

 @bot.command(pass_context = True)
async def testinput(ctx, user: discord.Member=None):
    await bot.say('Do you want to play {}? If yes type **sir pls testinput accept**.'.format(user.mention))
    response = await bot.wait_for_message(author=user, content="sir pls testinput accept", timeout=30)
    if response.content == "sir pls testinput accept" and response.author == user:
        await bot.say('User {} decided to play with you {}'.format(user, ctx.message.author))
    else:
        await bot.say('Debug: Skipped the if statement')