我正在开发一款用于基本审核的Discord机器人,该机器人至少目前至少kick
,ban
和mute
。但是问题是其他成员也可以使用它。我只希望有几个指定的角色可以使用它。
也不想根据@role
对其进行处理,因为跨不同服务器的角色名称不同。还希望使机器人尽可能简单。
现在,我开始是这样的:
@client.command(name='ban')
async def mod_ban(member: discord.User):
try:
await client.ban(member, delete_message_days=0)
await client.say('**{0}** has been banned.'.format(str(member)))
except Exception as error:
await client.say(error)
但是任何成员都可以使用命令。因此,尝试遵循此= Permission System for Discord.py Bot并最终得到:
@client.command(name='ban')
async def mod_ban(context, member: discord.User):
if context.message.author.server_premission.administrator:
try:
await client.ban(member, delete_message_days=0)
await client.say('**{0}** has been banned.'.format(str(member)))
except Exception as error:
await client.say(error)
else:
await client.say('Looks like you don\'t have the perm.')
哪个错误使我着陆:;-;
raise MissingRequiredArgument('{0.name} is a required argument that is missing.'.format(param))
discord.ext.commands.errors.MissingRequiredArgument: member is a required argument that is missing.
此外,除了context.message.author.server_premission.administrator
外,我不仅希望具有管理员权限的角色使用此命令。我还希望其他一些角色具有很少的权限,例如manage message
,manage roles
等,也可以用于命令。
预先感谢您的帮助!另外,如果我错过了任何愚蠢或愚蠢的事情,对不起;-;
答案 0 :(得分:1)
据我在discord.py文档中所见,discord.User与discord.Member是不同的。
尝试更改
async def mod_ban(context, member: discord.User):
至
async def mod_ban(context, member: discord.Member):
答案 1 :(得分:0)
在第二个示例中,您没有将上下文传递到协程中(正如@Andrei建议的那样,您只能禁止成员):
<QuerySet [<Books: Book Title>]>
此外,我可能应该更新my answer to that question。在命令的上下文中,您可以使用内置在@client.command(name='ban', pass_context=True)
async def mod_ban(context, member: discord.Member):
...
中的非常强大的checks来为您完成很多工作。 has_permissions
完全按照您的要求进行操作,验证用户是否具有任何必要的权限。
discord.ext.commands
答案 2 :(得分:0)
如果您使用discord.py重写,则可以使用检查(Discord.py rewrite checks) 哪个(很明显)检查某些事情,例如命令调用者的角色或权限
您可以在第一个装饰器下方使用这两个装饰器
@commands.has_role("rolename"/roleid)
@commands.has_any_role("rolename"/roleid,"rolename"/roleid,"rolename"/roleid ...)
其中rolename是一个字符串,其中包含角色的确切名称,一个字母一个字母,一个空格一个字符,而roleid是角色的ID,如果可以提及的话,您可以通过在任意位置键入@rolename来获取它服务器聊天室的数量
请注意,如果要传递多个角色进行检查,必须使用第二个装饰器