嗨,我是不和谐的python编码的新手,我试图制作一个命令来告诉用户他们是否是管理员,但是很好……它丝毫没有作用
@client.command(name="whoami",description="who are you?")
async def whoami():
if message.author == client.user:
return
if context.message.author.mention == discord.Permissions.administrator:
msg = "You're an admin {0.author.mention}".format(message)
await client.send_message(message.channel, msg)
else:
msg = "You're an average joe {0.author.mention}".format(message)
await client.send_message(message.channel, msg)
然后我尝试输入whoami时得到了
Ignoring exception in command whoami
Traceback (most recent call last):
File "/home/python/.local/lib/python3.6/site-packages/discord/ext/commands/core.py", line 50, in wrapped
ret = yield from coro(*args, **kwargs)
File "<stdin>", line 3, in whoami
NameError: name 'message' is not defined
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/python/.local/lib/python3.6/site-packages/discord/ext/commands/bot.py", line 846, in process_commands
yield from command.invoke(ctx)
File "/home/python/.local/lib/python3.6/site-packages/discord/ext/commands/core.py", line 374, in invoke
yield from injected(*ctx.args, **ctx.kwargs)
File "/home/python/.local/lib/python3.6/site-packages/discord/ext/commands/core.py", line 54, in wrapped
raise CommandInvokeError(e) from e
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NameError: name 'message' is not defined
答案 0 :(得分:2)
如果message.author.server_permissions.administrator
不起作用。
将其更改为message.author.guild_permissions.administrator
或者尝试message.author.top_role.permissions.administrator
,这将给您带来麻烦。
有一件事是,通常服务器所有者将管理员设置为服务器的最高角色,因此这在大多数情况下都会起作用。但是,如果他们不这样做,那么第三个sol将无法工作。
答案 1 :(得分:1)
更改
@client.command(name="whoami",description="who are you?")
async def whoami():
到
@client.command(pass_context=True)
async def whoami(ctx):
然后,您可以使用ctx
获取各种内容,例如编写它的用户,消息内容等
要查看User
是否为管理员
if ctx.message.author.server_permissions.administrator:
,如果用户是管理员,则应返回True
您的代码应如下所示:
import discord
import asyncio
from discord.ext.commands import Bot
client = Bot(description="My Cool Bot", command_prefix="!", pm_help = False, )
@client.event
async def on_ready():
print("Bot is ready!")
return await client.change_presence(game=discord.Game(name='My bot'))
@client.command(pass_context = True)
async def whoami(ctx):
if ctx.message.author.server_permissions.administrator:
msg = "You're an admin {0.author.mention}".format(ctx.message)
await client.send_message(ctx.message.channel, msg)
else:
msg = "You're an average joe {0.author.mention}".format(ctx.message)
await client.send_message(ctx.message.channel, msg)
client.run('Your_Bot_Token')
答案 2 :(得分:0)
您可以使用has_permissions
check来查看用户是否具有administrator
特权。
然后我们可以处理未能通过检查以发送失败消息的错误。
from discord.ext.commands import Bot, has_permissions, CheckFailure
client = Bot()
@client.command(pass_context=True)
@has_permissions(administrator=True)
async def whoami(ctx):
msg = "You're an admin {}".format(ctx.message.author.mention)
await client.send_message(ctx.message.channel, msg)
@whoami.error
async def whoami_error(error, ctx):
if isinstance(error, CheckFailure):
msg = "You're an average joe {}".format(ctx.message.author.mention)
await client.send_message(ctx.message.channel, msg)