因此,我尝试为不和谐的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'
答案 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
我也建议你把命令名和函数名一样设置