Python discord.py message.author.id返回回溯

Python discord.py message.author.id返回回溯,python,python-3.x,discord.py,Python,Python 3.x,Discord.py,因此,我试图使我的discord.py bot只接受特定用户对特定命令执行的命令。我现在知道ctx.author.id意味着bot-author-id。我听说message.author.id应该可以工作,但是使用message.author.id会抛出一个回溯,这就是臭名昭著的名称错误。为什么以及如何修复它 @bot.command(description="Restarts The Bot's source file, use if bot freezes etc, [OWNER]") as

因此,我试图使我的discord.py bot只接受特定用户对特定命令执行的命令。我现在知道
ctx.author.id
意味着bot-author-id。我听说
message.author.id
应该可以工作,但是使用
message.author.id
会抛出一个回溯,这就是臭名昭著的名称错误。为什么以及如何修复它

@bot.command(description="Restarts The Bot's source file, use if bot freezes etc, [OWNER]")
async def shutdown(ctx):
     if ctx.author.id == 436646726204653589 or 525334420467744768 or 218142353674731520:
        embed = discord.Embed(color = 0xff0000)
        embed.add_field(name="Shutdown Command Sent, Bot Rebooting in 3 seconds", value = str, inline = False)
        await ctx.send(embed=embed)
        await asyncio.sleep(3)
        await bot.close()
        os.execl(sys.executable, sys.executable, * sys.argv)
        os.system("py -3 theBot.py")

bot.run(TOKEN)
如果您正在使用并且
shutdown
是一个命令,
ctx
是一个对象。
是命令消息的作者,是的缩写。
两者都是可以使用的对象

我不知道你所说的“机器人作者ID”到底是什么意思,但如果你想获得机器人所有者的用户ID,你可以使用,或者如果机器人应用程序是基于团队的。
否则,您可以使用获取表示bot的,然后获取其ID

“未定义错误”实际上应该是一个
namererror
告诉您变量未定义,正如它所说,
消息
未定义,您需要在使用它之前定义它。
您可以使用获取触发正在执行的命令的

注意,
如果ctx.author.id==4366467262046653589或5253344204467744768或218142353674731520:
将始终以
ctx.author.id==43664672620463589或5253344204467744768或218142353674731520
将始终为
True
。这意味着这相当于评估为
(ctx.author.id==4366467262046653589)或5253344204467744768或218142353674731520
,整数
5253344204467744768
,以及
218142353674731520
,将始终计算为
True

相反,您希望检查每个ID是否相等。这可以通过检查元组或集合中的成员身份来完成,例如
ctx.author.id(4366467262046653589、5253344204467744768、218142353674731520)
ctx.author.id(分别位于{43664672620463589、5253344204467744768、218142353674731520}

有关更多信息,请参见此问题

另外,如果您没有在任何地方重新定义
str
(您不应该这样做,因为它是一个内置类),您将类本身作为嵌入值传递,输出将转换为字符串并显示为


此外,我不知道为什么您试图使用os.execl(sys.executable,sys.executable,*sys.argv)执行Python可执行文件,但会立即替换当前进程,因此下一行将永远不会运行。

消息在代码中的任何地方都没有定义。其他人可能在它被定义后使用它,通常作为函数的参数。还要注意的是,如果ctx.author.id在(4366467262046653589,5253344204467744768,218142353674731520)中,您的
if
条件应该是
if
,我的意思是name错误,但是我如何检查消息作者id并将其与发布的3个id进行比较呢?我在回答中已经介绍了这一点。