Eup*_*ony 7 python python-3.x discord discord.py
我工作的基本适度其中做了不和谐的机器人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)
Run Code Online (Sandbox Code Playgroud)
但是任何成员都可以使用这些命令。因此,尝试遵循这个 = 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.')
Run Code Online (Sandbox Code Playgroud)
这让我遇到了这个错误:;-;
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.
Run Code Online (Sandbox Code Playgroud)
此外,除此之外,context.message.author.server_premission.administrator
我不仅希望具有 Admin perm 的角色使用此命令。我也想有几个像烫发其他几个角色manage message
,manage roles
等来使用命令了。
在此先感谢您的帮助!另外,对不起,如果我错过了任何愚蠢或愚蠢的事情;-;
在第二个示例中,您没有将上下文传递到协程中(正如 @Andrei 所建议的,您只能禁止成员):
@client.command(name='ban', pass_context=True)
async def mod_ban(context, member: discord.Member):
...
Run Code Online (Sandbox Code Playgroud)
另外,我可能应该更新我对该问题的回答。在命令上下文中,您可以使用内置的非常强大的检查discord.ext.commands
来为您完成很多工作。has_permissions
完全符合您的要求,验证用户是否具有任何必要的权限。
from discord.ext.commands import has_permissions, CheckFailure
@client.command(name='ban', pass_context=true)
@has_permissions(administrator=True, manage_messages=True, manage_roles=True)
async def mod_ban(ctx, member: discord.Member):
await client.ban(member, delete_message_days=0)
await client.say('**{0}** has been banned.'.format(str(member)))
@mod_ban.error
async def mod_ban_error(error, ctx):
if isinstance(error, CheckFailure):
await client.send_message(ctx.message.channel, "Looks like you don't have the perm.")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20563 次 |
最近记录: |