我正在开发一个discord机器人,用于基本的调节功能,至少现在能做到踢
,禁止
和静音
。但问题是其他成员也可以使用它。我只需要几个特定的角色谁可以使用它。
也不想根据@角色
来处理它,因为不同服务器上的角色名称不相同。也想让机器人尽可能简单。
现在,我开始是这样的:
@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)
但是任何成员都可以使用这些命令。所以,尝试遵循这个=不和谐的许可系统。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.
另外,除了上下文之外。消息著者服务器预分配。管理员
我不想只让具有Admin perm的角色使用此命令。我还希望其他一些角色也有一些类似于管理消息
,管理角色
等的角色来执行命令。
提前感谢您的帮助!另外,如果我错过了任何愚蠢或愚蠢的事情,对不起;-;
如果您使用的是discord。py rewrite,您可以使用检查(Discord.py rewrite checks),它(明显地)检查某些事情,例如命令调用程序上的角色或权限
您可以在第一个decorator下面同时使用这两个decorator
@commands.has_role("rolename"/roleid)
@commands.has_any_role("rolename"/roleid,"rolename"/roleid,"rolename"/roleid ...)
其中rolename是一个字符串,其中包含角色的确切名称,一个字母一个字母,一个空格一个空格,角色标识是角色的标识,如果可以提及,您可以通过在任何服务器聊天室键入@rolename来获取
请注意,如果要通过多个角色进行检查,则必须使用第二个装饰程序
就我所能看到的不和谐。不和谐。用户与discord不同。成员
试着改变
async def mod_ban(context, member: discord.User):
到
async def mod_ban(context, member: discord.Member):
在第二个示例中,您没有将上下文传递到协同程序(正如@Andrei所建议的,您只能禁止成员):
@client.command(name='ban', pass_context=True)
async def mod_ban(context, member: discord.Member):
...
另外,我可能应该更新我对这个问题的回答。在命令上下文中,可以使用discord中内置的非常强大的检查。ext.commands
可以为您执行许多操作具有\u权限
完全执行您正在查找的操作,验证用户是否具有任何必要的权限。
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.")
此代码用于测试应用程序是否具有权限,如果您具有权限,则返回true,否则返回false。 错误: PID:25504 java.lang.NullPointerException:试图在Android.Content.Context Android.Content.Content.Context.GetApplicationContext(view.java:21147)在Android.os.h
我想发送消息,如果作者有角色,但如果我尝试此代码不工作(角色的id是正确的)。
cmf_auth_check($userId, $name = null, $relation = 'or') 功能 检查用户权限 参数 $userId: int 要检查权限的用户 ID $name: string|array 需要验证的规则列表,支持逗号分隔的权限规则或索引数组 $relation:string 如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有
上面的代码正在运行。 我没有得到任何错误,但我也希望机器人显示他们是afk的原因,当他们提到。有人能帮忙吗?
cmf_auth_check($userId, $name = null, $relation = 'or') 功能 检查用户权限 参数 $userId: int 要检查权限的用户 ID $name: string|array 需要验证的规则列表,支持逗号分隔的权限规则或索引数组 $relation:string 如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有