如何退出discord.py on_message函数?

时间:2020-10-16 10:04:53

标签: python python-3.x discord bots discord.py

我想用python命令制作一个不和谐的机器人,从而启动游戏,在该游戏中,您必须编写给定的单词,并在用户正确拼写后停止,但是return在我的情况下不起作用

async def joc(ctx):

     a=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
     'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
     '0','1','2','3','4','5','6','7','8','9']

     cuv=random.sample(a,10)
     cuvant=''
     for x in cuv:
         cuvant+=x

     await ctx.send('The game begins in: ')
     await ctx.send('3')
     time.sleep(1)
     await ctx.send('2')
     time.sleep(1)
     await ctx.send('1')
     time.sleep(1)
     await ctx.send('Start!')
     await ctx.send(cuvant)



     @bot.event
     async def on_message(message):
         if message.content==cuvant:
             await message.channel.send(message.author)
             await message.channel.send("Nice")
             return 
     return

我可以通过访问历史记录来做到这一点,但我想知道如何做到这一点

3 个答案:

答案 0 :(得分:1)

哦,我也遇到了同样的问题

通过将此添加到 on_message() 的最后一行来修复

await client.process_commands(message)
# Replace the client with own bot or something that you have started with

答案 1 :(得分:0)

您不应该将事件放在命令内,它不能那样工作。您正在寻找的是wait_for,链接中包含了如何使用它的示例。基本上,您创建一个check来查看邮件是否采用某种格式或是否符合您的要求,以检查邮件是否为正确的单词。

答案 2 :(得分:0)

这是stijndcl告诉我们的wait_for修订后的代码

async def joc(ctx):

     a=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
     'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
     '0','1','2','3','4','5','6','7','8','9']

     cuv=random.sample(a,10)
     cuvant=''
     for x in cuv:
         cuvant+=x

     await ctx.send('The game begins in: ')
     await ctx.send('3')
     time.sleep(1)
     await ctx.send('2')
     time.sleep(1)
     await ctx.send('1')
     time.sleep(1)
     await ctx.send('Start!')
     await ctx.send(cuvant)
     content = ""
     while content != cuvant:
          msg = await bot.wait_for("message", check=lambda m: m.author == ctx.author and m.channel.id == ctx.channel.id)
          content = msg.content
     await ctx.send(message.author)
     await ctx.send(cuvant)