如何获得具有特定权限的所有角色

我当时正在创建票务系统,但我希望它能在多台服务器上工作,但是我不知道如何获得具有一定许可的服务器上的所有角色。或者,也许是一条额外的命令,供人们添加可以查看频道的角色。但是我不知道怎么办?这就是我的atm:

@bot.command(name='ticket', aliases=['Ticket'])
async def ticket(ctx):
    ticketnum = random.randint(1000,9999)
    guild = ctx.message.guild
    channel = await guild.create_text_channel(name=f'Ticket-{ticketnum}')
    channel.set_permissions(guild.default_role, read_messages=False)
    await ctx.send(f'Created ticket: {channel}')
迪格

有一个commands.has_permissions()装饰器或commands.has_guild_permissions(),您可以在命令上使用:

@commands.has_permissions(administrator=True) # Just an example - use the permission you want
@bot.command(...)
async def ticket(ctx):
    # Rest of your code here

这将检查用户是否具有可用的权限。


以下代码是等效的示例(并非唯一的方法)。

这是如何获得具有特定权限的所有角色:

roles = [r for r in ctx.guild.roles if any(p[1] and p[0] == "administrator" for p in r.permissions)]

# p[1] is checking that the second element of the tuple is True
# As the permissions are returned in the format:
# ("permission_name", boolean)
# Where True is saying the role has the permission enabled
# and False is saying that the role doesn't have the permission

您可以使用此列表检查作者是否具有以下任何角色:

@bot.command(...)
async def ticket(ctx):
    roles = [r for r in ctx.guild.roles if any(p[1] and p[0] == "administrator" for p in r.permissions)]
    if any(r in ctx.author.roles for r in roles):
        # Let the code run
    else:
        # Send an error message

编辑:

方法1:要设置多个角色的权限,您可以遍历已创建的角色列表中的每个角色:

@bot.command(...)
async def ticket(ctx):
    # Some code
    roles = [...]
    for role in roles:
        await channel.set_permissions(role, permission_name=True) # Or false

这可能会导致您的漫游器受到速率限制,因此建议您asyncio.sleep()在每次权限更新之间进行一些调整。

方法2:或者,当您create_text_channel()可以为所有目标角色添加一堆改写时,请参见此处的添加改写示例。

方法3:但是,我建议一个更简单的解决方案-拥有一个预先存在的目标频道,该频道具有您希望新频道拥有的权限。
这将使您能够简单地clone()说出频道:

@bot.command()
async def ticket(ctx):
    # Some code
    target_channel = bot.get_channel(112233445566778899)
    new_channel = await target_channel.clone(name="...")

然后,您可以edit()根据需要确定new_channel职位的位置。


参考文献:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何显示对特定表具有“ SELECT”权限的列表用户?

来自分类Dev

蠕变具有特定记忆(角色)的所有蠕变

来自分类Dev

试图获得身份中的所有角色

来自分类Dev

如何检查用户在Meteor中是否具有特定角色

来自分类Dev

如何获得应用程序的所有授予的权限

来自分类Dev

如何获得具有所有匹配记录的特定数字字段的总和

来自分类Dev

向具有特定角色的特定用户添加和撤消权限

来自分类Dev

如何获得具有特定名称的所有节点

来自分类Dev

如何获得我的discord机器人所具有的所有角色的列表?

来自分类Dev

Laravel使用RelationShip仅获得具有特定角色的用户

来自分类Dev

如何获得具有特定顺序的任意长度的任意数量的数组的所有组合

来自分类Dev

尝试删除具有特定角色的用户发送的所有消息,除非该消息为!verify

来自分类Dev

Discord.py:如何将某个命令限制为具有特定权限的角色或人员?

来自分类Dev

如何获得具有角色权限的用户

来自分类Dev

Lotus Notes中具有特定角色的所有用户名

来自分类Dev

如何获得具有相同键的所有元素的数组?

来自分类Dev

如何获得具有特定风格的元素

来自分类Dev

获得具有特定角色的用户

来自分类Dev

如何显示角色在laravel 5委托中拥有的所有权限?

来自分类Dev

如何对具有特定权限集的文件进行chmod

来自分类Dev

在Oracle中授予具有特定且有限权限的特定角色“ GRANT”特权

来自分类Dev

SharePoint O365获取具有特定角色的所有用户

来自分类Dev

如何获得应用程序的所有授予的权限

来自分类Dev

如何在laravel中获得具有角色的用户?

来自分类Dev

如何通过 DM 向具有特定角色的所有成员发送消息?

来自分类Dev

如何创建具有读取、写入、删除和查看数据库中所有对象的完全权限的 sql 用户角色?

来自分类Dev

如何分区Java列表以获得具有特定条件的列表和其他所有相交的列表?

来自分类Dev

如何在 spatie 权限包中列出具有权限的所有角色?

来自分类Dev

对于具有所有权限的角色“admin”的用户,不显示 Voyager 管理菜单

Related 相关文章

  1. 1

    如何显示对特定表具有“ SELECT”权限的列表用户?

  2. 2

    蠕变具有特定记忆(角色)的所有蠕变

  3. 3

    试图获得身份中的所有角色

  4. 4

    如何检查用户在Meteor中是否具有特定角色

  5. 5

    如何获得应用程序的所有授予的权限

  6. 6

    如何获得具有所有匹配记录的特定数字字段的总和

  7. 7

    向具有特定角色的特定用户添加和撤消权限

  8. 8

    如何获得具有特定名称的所有节点

  9. 9

    如何获得我的discord机器人所具有的所有角色的列表?

  10. 10

    Laravel使用RelationShip仅获得具有特定角色的用户

  11. 11

    如何获得具有特定顺序的任意长度的任意数量的数组的所有组合

  12. 12

    尝试删除具有特定角色的用户发送的所有消息,除非该消息为!verify

  13. 13

    Discord.py:如何将某个命令限制为具有特定权限的角色或人员?

  14. 14

    如何获得具有角色权限的用户

  15. 15

    Lotus Notes中具有特定角色的所有用户名

  16. 16

    如何获得具有相同键的所有元素的数组?

  17. 17

    如何获得具有特定风格的元素

  18. 18

    获得具有特定角色的用户

  19. 19

    如何显示角色在laravel 5委托中拥有的所有权限?

  20. 20

    如何对具有特定权限集的文件进行chmod

  21. 21

    在Oracle中授予具有特定且有限权限的特定角色“ GRANT”特权

  22. 22

    SharePoint O365获取具有特定角色的所有用户

  23. 23

    如何获得应用程序的所有授予的权限

  24. 24

    如何在laravel中获得具有角色的用户?

  25. 25

    如何通过 DM 向具有特定角色的所有成员发送消息?

  26. 26

    如何创建具有读取、写入、删除和查看数据库中所有对象的完全权限的 sql 用户角色?

  27. 27

    如何分区Java列表以获得具有特定条件的列表和其他所有相交的列表?

  28. 28

    如何在 spatie 权限包中列出具有权限的所有角色?

  29. 29

    对于具有所有权限的角色“admin”的用户,不显示 Voyager 管理菜单

热门标签

归档