忽略命令中的异常无:discord.ext.commands.errors.CommandNotFound:找不到命令“ makePoll”

时间:2020-10-23 16:15:41

标签: python-3.x discord.py

因此,我尝试为不和谐的bot使用python做这个简单的轮询功能:

@command(name="makePoll")
@has_permissions(manage_guild=True)
async def createPoll(self, ctx, question, *options):
    if len(options) > 10:
        await ctx.send("You can only supply a maximum of 10 options.")

    else:
        embed = Embed(title="Poll",
                     description=question,
                     colour=ctx.author.colour,
                     timestamp=datetime.utcnow())
    fields = [("Options", "\n".join([f"{numbers[idx]} {options}" for idx, option in enumerate(options)]), False),
              ("Instructions", "React to case a vote!", False)]

    for name, value, inline in fields:
        embed.add_field(name=name, value=value, inline=inline)

    await ctx.send(embed=embed)

问题是当我尝试调用该函数时,它引发了错误。 错误:忽略命令None中的异常: discord.ext.commands.errors.CommandNotFound:找不到命令“ makePoll”。

edit:试图命名client.command makepoll,但是知道它给了我这个错误:忽略命令makePoll中的异常: 追溯(最近一次通话): 文件“ F:\首先尝试使用python \ venv \ lib \ site-packages \ discord \ ext \ commands \ core.py”,第85行,已包装 ret =等待coro(* args,** kwargs) 在createPoll中,文件“ F:/首先尝试使用python / for loop / bot1.py”,第40行 colour = ctx.author.colour, AttributeError:'str'对象没有属性'author'

上述异常是以下异常的直接原因:

回溯(最近通话最近): 文件“ F:\首先尝试使用python \ venv \ lib \ site-packages \ discord \ ext \ commands \ bot.py”,行903,在调用中 等待ctx.command.invoke(ctx) 在调用中,文件“ F:\首先尝试使用python \ venv \ lib \ site-packages \ discord \ ext \ commands \ core.py”,行859 等待注入(* ctx.args,** ctx.kwargs) 文件“ F:\首先尝试使用python \ venv \ lib \ site-packages \ discord \ ext \ commands \ core.py”,第94行,已包装 从ex引发CommandInvokeError(exc) discord.ext.commands.errors.CommandInvokeError:命令引发了异常:AttributeError:'str'对象没有属性'author'

1 个答案:

答案 0 :(得分:1)

参考你的编辑,它说‘str’对象没有‘author’属性。

并且 str 对象在您的函数中引用了 ctx。您不必添加变量self,因为我认为此命令不在类中。

Discord.py 看到这个,认为“self 是上下文,ctx 是一个字符串参数(用于命令)......”

解决办法是去掉“self”。

所以代码是:

@client.command(name="makePoll")
@has_permissions(manage_guild=True)
async def createPoll(ctx, question, *options):
    if len(options) > 10:
        await ctx.send("You can only supply a maximum of 10 options.")

    else:
        embed = Embed(title="Poll",
                     description=question,
                     colour=ctx.author.colour,
                     timestamp=datetime.utcnow())
    fields = [("Options", "\n".join([f"{numbers[idx]} {options}" for idx, option in enumerate(options)]), False),
              ("Instructions", "React to case a vote!", False)]

    for name, value, inline in fields:
        embed.add_field(name=name, value=value, inline=inline)

    await ctx.send(embed=embed)

self 主要用于类 btw

我也建议你把命令名和函数名一样设置