我的 discord.py 机器人有啥方法可以检查用户是不是具有使用命令的特定权限?

Posted

技术标签:

【中文标题】我的 discord.py 机器人有啥方法可以检查用户是不是具有使用命令的特定权限?【英文标题】:Is there any way for my discord.py bot to check check for whether a user has a certain permission to use a command?我的 discord.py 机器人有什么方法可以检查用户是否具有使用命令的特定权限? 【发布时间】:2021-09-14 19:24:05 【问题描述】:

例如,我的机器人有服务器设置,目前,任何可以发送消息的用户都可以编辑设置。如果没有Manage Server 权限的用户尝试编辑权限,我很乐意向the one the Dank Memer Bot sends 发送类似的消息。我四处搜索,似乎您只能看到您自己的机器人拥有哪些权限,但我不确定。我有办法做到这一点吗?谢谢。

【问题讨论】:

我在 Google 上搜索了“python discord.py 检查用户权限”,第一个结果是 codegrepper.com/code-examples/python/… 似乎是你要找的。​​span> @TheLazyScripter 我已经看过了,但我相信不幸的是,它只检查机器人本身是否具有某些权限,而不是检查某个用户是否具有某些权限。 :( 在 discord.py 文档中,查看 Member.rolesMember.permissionsRole.permissions。只要您对成员有一些引用(如果您在公会中回复他们的消息,您应该这样做),您可以引用这些来检查必要的权限。 @Stephen 非常感谢!我现在明白了! 【参考方案1】:

显然我刚刚做了

# check if someone has certain permissions
def hasPerms(member, perms):
  for role in reversed(member.roles):
    if not perms.is_subset(role.permissions):
        return False
  return True

它有效。

【讨论】:

【参考方案2】:

对于命令,

from discord.ext import commands

@commands.has_permissions(manage_server=True)

您可以将manage_server 更改为您想要的任何权限。这个Discord API。

然后你可以做一个错误处理程序。所以如果用户没有权限执行这个命令,它会发送消息。

@command.error
async def command_error(ctx, error):
    if isinstance(error, MissingPermissions):
        await ctx.send('You do not have permission to do this command!')

必须command 更改为您希望Manage Server 启用的任何命令。

【讨论】:

以上是关于我的 discord.py 机器人有啥方法可以检查用户是不是具有使用命令的特定权限?的主要内容,如果未能解决你的问题,请参考以下文章

(discord.py) 检查消息是不是包含列表中的元素的正确方法是啥?

Discord.py:在检查中使用特殊响应导致不同的输出

权限检查 Discord.py 机器人

Discord.py 在命令方法上使用多个权限检查装饰器

如何在 discord.py 中创建密码检查命令 [关闭]

Discord.py:检查用户是不是具有列表中的角色 ID 不起作用