首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在disnake或discord.py中对用户权限进行模拟

如何在disnake或discord.py中对用户权限进行模拟
EN

Stack Overflow用户
提问于 2022-11-27 10:13:09
回答 1查看 30关注 0票数 2

我有一个有权限的代码。我需要检查一个成员的权限,如果成员没有这样的权限,发送一条消息。

主要代码:

代码语言:javascript
复制
@commands.slash_command(name = "addrole", description="Додати користувачу роль")
@commands.has_permissions(view_audit_log=True)
async def addrole(self, ctx, member: disnake.Member, role: disnake.Role):
    #try:
        await member.add_roles(role)
        emb = disnake.Embed(title=f"Видача ролі", description=f"Користувачу {member.mention} було видано роль {role.mention} на сервері {ctx.guild.name}\n Видав модератор - **{ctx.author.mention}**", colour=disnake.Color.blue(), timestamp=ctx.created_at)
        await ctx.send(embed=emb)

我想要的是:

代码语言:javascript
复制
    @commands.slash_command(name = "addrole", description="Додати користувачу роль")
    @commands.has_permissions(view_audit_log=True)
    async def addrole(self, ctx, member: disnake.Member, role: disnake.Role):
        if ctx.author.guild_permissions.view_audit_log:
            await member.add_roles(role)
            emb = disnake.Embed(title=f"Видача ролі", description=f"Користувачу {member.mention} було видано роль {role.mention} на сервері {ctx.guild.name}\n Видав модератор - **{ctx.author.mention}**", colour=disnake.Color.blue(), timestamp=ctx.created_at)
            await ctx.send(embed=emb)
        else:
            await ctx.send("You don`t have such permissions!")

求你帮帮我。我试过不同的变体,没有人工作。

EN

回答 1

Stack Overflow用户

发布于 2022-11-28 15:36:38

我认为你没有得到你想要的,因为你正在尝试同时整合两者。从您的描述和代码中我可以看到,我可以提供的最简单的解决方案是从代码的“我想要的东西”部分中删除@commands.has_permissions(view_audit_log=True)。但是,如果您不想在每个命令下向用户发送“您没有权限”的if和add语句,我建议创建一个错误处理程序。使用此方法,您将能够使用您在问题中列出的第一个代码块。下面是我使用的一个非常基本的示例,它处理的是没有权限使用某个命令的用户。您可能需要更改它以适应特定的机器人,但这是一个开始:

代码语言:javascript
复制
@client.event
async def on_command_error(ctx, error)
   await ctx.send(error) # this sends the error where the user is attempting to use a command. This means if the user is missing the right permissions to use a command, it will send something like "missing permissions" to the user. Which I think is what you are looking for

“我想要的”代码不起作用,因为除非用户拥有audit_log权限,否则无法访问它下面的代码。如果它们已经具有这些权限,则if和not语句检查权限并不是很有用。在我看来,有一个错误处理程序是很好的,并且帮助了我处理我的机器人。希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74589128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档