如何在 discord.py 中检查特定用户的权限
How to check permissions of a specific user in discord.py
我有一个 discord 审核机器人,禁止功能的代码是这样的:
@client.command(name="ban")
async def banpeep(ctx,member: discord.Member, *reason):
if has_permissions(ban_members=True) or has_permissions(administrator=True):
reason=' '.join(reason)
if reason == '':
reason = "Deserves to be banned"
await member.ban(reason=reason)
embed=discord.Embed(title=f"Banned {member} for reason: "+reason,color=0x72d345)
await ctx.send(embed=embed)
message=ctx.message
await message.add_reaction(str(""))
if not member.bot:
await member.send(f"You have been banned from the server by {ctx.author} for reason: {reason}")
elif has_permissions(ban_members=False) and has_permissions(administrator=False):
embed = discord.Embed(title="You don't have permission to ban members!",color=0x72d345)
await ctx.send(embed=embed)
抱歉,Whosebug 破坏了我的缩进,但您可以看出我的意图。错误是 has_permissions() 检查机器人的权限,而不是用户的权限。我想检查作者是否有权禁止成员或者是管理员。我最近发现了这个错误,一个普通用户通过发送此命令来禁止我服务器的一半成员。我是从 discord.commands import has_permissions
开始做的,所以这就是我不做 commands.has_permissions 的原因。如何检查特定用户的权限?我会做类似 ctx.author.check_permissions()
之类的事情吗?我想像 has_permissions 一样获取数据。我花了 3 个多小时查看堆栈溢出答案和文档,但所有这些都不适合我正在做的事情,或者只是过时了。我不知道这是否是重写,但我是从源代码安装的,所以我认为它是重写。
你应该用这样的方式开始命令:
@client.command(aliases=['purge'])
@commands.has_permissions(manage_messages=True)
async def clear(self, ctx, amount=5):
Code goes here
这将检查用户是否具有括号中指定的权限。有错就加上这个
@ban.error
async def ban_error(self, ctx, error):
if isinstance(error, commands.MissingPermissions):
await ctx.send('Sorry you are not allowed to use this command!')
has_permissions()
装饰器应该像这样位于异步语句的顶部。
@client.command(name = "ban")
@has_permissions(ban_members = True)
async def banpeep(ctx, member: discord.Member, *, reason):
另请注意,如果用户拥有 administrator
权限,他们将拥有 ban_member
权限。
我有一个 discord 审核机器人,禁止功能的代码是这样的:
@client.command(name="ban")
async def banpeep(ctx,member: discord.Member, *reason):
if has_permissions(ban_members=True) or has_permissions(administrator=True):
reason=' '.join(reason)
if reason == '':
reason = "Deserves to be banned"
await member.ban(reason=reason)
embed=discord.Embed(title=f"Banned {member} for reason: "+reason,color=0x72d345)
await ctx.send(embed=embed)
message=ctx.message
await message.add_reaction(str(""))
if not member.bot:
await member.send(f"You have been banned from the server by {ctx.author} for reason: {reason}")
elif has_permissions(ban_members=False) and has_permissions(administrator=False):
embed = discord.Embed(title="You don't have permission to ban members!",color=0x72d345)
await ctx.send(embed=embed)
抱歉,Whosebug 破坏了我的缩进,但您可以看出我的意图。错误是 has_permissions() 检查机器人的权限,而不是用户的权限。我想检查作者是否有权禁止成员或者是管理员。我最近发现了这个错误,一个普通用户通过发送此命令来禁止我服务器的一半成员。我是从 discord.commands import has_permissions
开始做的,所以这就是我不做 commands.has_permissions 的原因。如何检查特定用户的权限?我会做类似 ctx.author.check_permissions()
之类的事情吗?我想像 has_permissions 一样获取数据。我花了 3 个多小时查看堆栈溢出答案和文档,但所有这些都不适合我正在做的事情,或者只是过时了。我不知道这是否是重写,但我是从源代码安装的,所以我认为它是重写。
你应该用这样的方式开始命令:
@client.command(aliases=['purge'])
@commands.has_permissions(manage_messages=True)
async def clear(self, ctx, amount=5):
Code goes here
这将检查用户是否具有括号中指定的权限。有错就加上这个
@ban.error
async def ban_error(self, ctx, error):
if isinstance(error, commands.MissingPermissions):
await ctx.send('Sorry you are not allowed to use this command!')
has_permissions()
装饰器应该像这样位于异步语句的顶部。
@client.command(name = "ban")
@has_permissions(ban_members = True)
async def banpeep(ctx, member: discord.Member, *, reason):
另请注意,如果用户拥有 administrator
权限,他们将拥有 ban_member
权限。