繁体   English   中英

discord.py - 获取用户的频道权限

[英]discord.py - Get channel permissions of user

我正在尝试创建一个列出用户在当前频道中拥有的权限的命令。 我尝试使用 function 将权限添加到列表并在命令中调用它。

不幸的是,这个命令发送的是成员可能拥有的所有权限,而不是成员当前拥有的权限。 我如何编辑我的代码以查找成员当前拥有的权限?

@commands.command()
async def perms(self, ctx, user):
     def _perms(ctx):
          perms = []

         for p in user.permissions_in(ctx.channel):
              perms.append(p[0])
            
         return perms
     
     await ctx.send(" ".join(_perms(ctx)))

文档中所述, discord.Permissions object 通过返回元组列表(permission_name, permission_value)定义__iter__ -方法,其中如果成员具有权限,则permission_value将为True ,否则为False 在将名称附加到列表之前,您只需检查值是否为真,如下所示:

for p in user.permissions_in(ctx.channel):
    if p[1] is True:
        perms.append(p[0])

也就是说,您对_perms的定义完全没有必要,您的代码可以改进/缩短很多。 以下单线也应该做你想做的事:

@commands.command()
async def perms(self, ctx, user):
     await ctx.send(" ".join(p[0] for p in user.permissions_in(ctx.channel) if p[1]))

一般来说,应该采取一些预防措施,以防用户对频道没有权限(机器人不能发送空消息,会抛出错误)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM