discord.py:wait_for()方法的检查参数阻止执行

时间:2019-09-20 09:30:17

标签: python discord.py discord.py-rewrite

上下文

我正在制作一个discord.py(rewrite-v1.0 +)机器人,我只是用一些基本的sql和python创建了一个嵌齿轮来制作一个聊天机器人,但是当'message'事件发生时,机器人将完全忽略它。我做了一些研究,发现最多的是user = discord.Clientuser = discord.Client()的更改
我是Discord.py的新手,所以我们将不胜感激!



迷你代码:

#ai cog
import discord
from discord.ext import commands
import asyncio

client = commands.Bot(command_prefix="$")
user = discord.Client()

class ai(commands.Cog):
    def __init__(self, client):
        self.client = client

    @commands.command(aliases=['c','ch','cha','4'])
    async def chat(self, ctx, *, message:str):
        Bot = 'Hello!'
        #I am guessing problem is here
        def nobotspeakshere(message):
                if message.author.bot == True:
                    return False
        while True:

            #try:
            msg = await user.wait_for('message', check=nobotspeakshere)             
            #except asyncio.TimeoutError:
                #await ctx.send('Bot: bye')
                #break

            you = msg.content
            print(you)
            await ctx.send('Bot: ' + Bot)
            if you == '':
                break
            elif you == 'bye':
                await ctx.send("Bot: bye")
                break
            else:
                pass
            #some working sql
            #sql gives bot = "something else"

def setup(client):
    client.add_cog(ai(client))


预期:输出变量“ you”并继续执行

输出:忽略在通道中输入的消息

预期的问题:nobotspeakshere方法无法正常运行。

重新完成:https://github.com/Rapptz/discord.py/issues/1371

如果在不带“ message”参数的情况下使用命令,则漫游器会引发错误,因此漫游器会响应命令使用情况

1 个答案:

答案 0 :(得分:1)

您的函数从不返回True,仅返回False(如果作者是机器人)或None(默认返回值)。由于None是一个虚假值,因此会将其视为false。

最好的选择是始终返回message.author.bot的反面

msg = await user.wait_for('message', check=lambda message: not message.author.bot)