我正在使用discord.py和asyncio制作一个discord bot . 机器人有像 kick
和 ban
这样的命令,显然不应该对普通用户可用 .
我想创建一个简单的系统,它将使用 ctx.message.author
来检测用户角色拥有的权限,以获取发送命令的用户 .
我不希望机器人检测到特定的角色名称,因为这些角色因服务器而异 . 我也不希望机器人有多个文件来保持简单 .
我已经看过discord.py文档和其他各种来源但没有包含如何实现他们所讨论的各种方法的示例 .
举个例子,这是我的机器人的一个命令:
async def kick(ctx, userName: discord.User):
if True: #ctx.message.author.Permissions.administrator
await BSL.kick(userName)
else:
permission_error = str('Sorry ' + ctx.message.author + ' you do not have permissions to do that!')
await BSL.send_message(ctx.message.channel, permission_error)
if else
声明是我自己尝试这样做的地方 . #ctx.message.author.Permissions.administrator
已注释掉,因为它不起作用并替换为 True
用于测试目的 .
感谢您提前提供任何帮助和建议 .
2 回答
Permissions是该类的名称 . 要获取消息作者权限,您应该访问作者的server_permissions属性 .
更新:
验证调用命令的人员权限的更好方法是使用
commands
扩展名的check功能,特别是has_permissions检查 . 例如,如果您只想向拥有manage_roles
权限或ban_members
权限的人员打开命令,您可以像这样编写命令:发现接受的答案的提示可能不起作用:
discord.py库的重写版本和预重写版本可能存在兼容性问题,这些版本仍然是非过时的,不推荐使用且仍在使用中 .
机器人还应该检查它自己的权限,以排除错误的一个原因 .
如果有错误,或者机器人本身的权限无效,机器人应该说些什么,对吗?
需要实现某些东西以防止机器人尝试在DM或组上下文中使用此命令 . 它几乎总是错误的 .
我提出以下解决方案(假设您使用命令扩展名):