检查message.content中的某些文本

时间:2020-05-13 07:53:41

标签: python-3.x discord.py

我正在尝试做多项选择琐事后台任务。我正在尝试仅等​​待正确答案或错误选择的client.wait_for_message。我正在检查message.content,但我遗漏了一些东西,因为无论任何人键入,它都会显示“错误答案”,除非它是正确答案。如果有人键入了错误答案或正确答案以外的内容,那么我希望它忽略他们的文字。

async def trivia_loop():
    await client.wait_until_ready()
    channel = client.get_channel("123456778999533")
    triviamonies = random.randint(1250, 2550)
    while not client.is_closed:
        await client.send_message(channel, '**Category**: {}\n**Difficulty**: {}\n\n{}\n\n**Potential Answers:**\n{}'.format(category, formatdiff, formatquestion, '\n'.join(tup)))
        winner = ''
        def check(m):
            return m.content.lower() == formatanswer.lower() and m.content.lower() != incorrectanswer1 or incorrectanswer2 or incorrectanswer3
        while winner == '':
            answerid = await client.wait_for_message(timeout=420, channel=channel, check=check)
            if answerid is None:
                winner = 1
                await client.delete_message(questionsend)
                await client.send_message(channel, 'No one answered correctly! The answer was {}'.format(formatanswer))
                await asyncio.sleep(840)
            elif get_triviaguessesTaken(answerid.author) < 1 and answerid.content.lower() == formatanswer.lower():
                winner = 1
                await client.delete_message(questionsend)
                await client.send_message(channel, '**{}** is correct!\n{} earns **${:,}** !'.format(formatanswer, answerid.author.mention, triviamonies))
                add_dollars(answerid.author, triviamonies)
                add_trivias(answerid.author, 1)
                await asyncio.sleep(900)
            elif get_triviaguessesTaken(answerid.author) < 1 and answerid.content.lower() == incorrectanswer1 or incorrectanswer2 or incorrectanswer3:
                await client.send_message(channel, '**{}** that is incorrect! Please try again on the next trivia question'.format(answerid.author.mention))
                add_triviaguessesTaken(answerid.author, 1)
            elif get_triviaguessesTaken(answerid.author) > 0 and answerid.content.lower() == incorrectanswer1 or incorrectanswer2 or incorrectanswer3:
                await client.send_message(channel, '{} you have already tried to guess this trivia question. Try again on the next one!'.format(answerid.author.mention))

1 个答案:

答案 0 :(得分:0)

Discord.py版本:

从代码的外观来看,您仍在使用d.py(v0.16.12)的异步版本,并且尚未迁移到更新更稳定的rewrite version of d.py

我强烈建议为最新的稳定版本运行pip install --upgrade discord.py。确保您这样做并尽早重写代码,因为当您使用较少的代码时,这样会减轻您的痛苦。

Wait_for()的重写用法:

文档在on_message事件中使用示例,但在这里我将通过命令来举例说明您的情况,因此您可以使用两种方法,并且可以进行混合匹配:

@bot.command(aliases=["trivia"])
async def starttrivia(ctx):
    answers = ["paris", "london", "oslo"]
    await ctx.send(f"What's the capital of France?\n\n*Potential answers:*\n{', '.join(answers)}")
    correct = False
    
    def check(m):
        for a in answers:
            if a in m.content.lower():
                return True

    while not correct:
        try:    
            reply = await bot.wait_for("message", check=check, timeout=30)
            if "paris" in reply.content.lower():
                await ctx.send(f"Correct! {reply.author.mention} got the right answer!")
                correct = True
            else:
                await ctx.send("Incorrect, try again!")
        except asyncio.TimeoutError: # exception thrown when no reply is sent in time
            await ctx.send("Nobody guessed for 30 seconds! The answer was: Paris")
            break