当前位置: 首页 > 知识库问答 >
问题:

权限检查不一致。py机器人

郁鸿博
2023-03-14

我正在开发一个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的角色使用此命令。我还希望其他一些角色也有一些类似于管理消息管理角色等的角色来执行命令。

提前感谢您的帮助!另外,如果我错过了任何愚蠢或愚蠢的事情,对不起;-;

共有3个答案

赫连琦
2023-03-14

如果您使用的是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来获取

请注意,如果要通过多个角色进行检查,则必须使用第二个装饰程序

田阳泽
2023-03-14

就我所能看到的不和谐。不和谐。用户与discord不同。成员

试着改变

async def mod_ban(context, member: discord.User):

async def mod_ban(context, member: discord.Member):
鲜于海
2023-03-14

在第二个示例中,您没有将上下文传递到协同程序(正如@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'则表示需满足所有