【问题标题】:How to set permissions differently from channel to channel for several roles at a bulk?如何为多个角色批量设置不同通道的权限?
【发布时间】:2021-05-30 05:17:08
【问题描述】:

我有 5 个文本通道和 2 个语音通道。从一个频道到另一个频道,我想为这些频道授予 4 个不同角色的权限。

text_channel_name = ['server-gateway', 'chatroom', 'gameplay-map', 'spectator-chat', 'log', 'staff-room']
voice_channel_name = ['player-voicechat','spectator-voicechat']
role_name = ['Mediator', 'Player', 'Ghost', 'Spectator'] # (not including admin role)

我希望我的频道设置如下:

Channel Name Description
server-gateway even the ones who first entered can see this channel.
chatroom anyone who has roles can enter this room and have chat here.
gameplay-map anyone with roles can see this, but only ones role with 'Mediator' and 'Player' can write something in here.
spectator chat can only be accessable with someone with 'ghost' and 'spectator' roles
log, staff-room only server admins can access this channel
player-voicechat can only be accessable to ones with 'Mediator' or 'Player' role and admin
spectator-voicechat can only be accessable to ones with 'Ghost' or 'Spectator' role and admin

我应该如何在 discord.py 上设置我的频道?我给了'Mediator'角色除了管理服务器和管理角色权限之外的所有权限。我是否必须取消某些权限才能使我的计划生效?

编辑:有人建议在为我的机器人制作新服务器时使用服务器模板,但从长远来看,我认为这不是可行的解决方案。我想让我的机器人获得尽可能少的帮助,所以我希望我的机器人在进入新服务器时自动运行设置过程。我剩下要做的就是为角色指定权限,这些权限应该因渠道而异,才能按预期工作。

我想问的是我可以用来为一个频道批量指定角色权限的格式(最好是同时在多个频道上工作的代码行)

【问题讨论】:

  • 感谢刚刚编辑它的人。我试图制作一张桌子,但“桌子”显示为损坏。
  • 您可以在服务器设置中管理每个频道和角色的权限,您需要 discord.py 做什么?
  • 可能用于生成具有完全相同设置的新服务器,而无需手动重做。
  • @JasonRebeloNeves 你可以使用server templates。不过这篇文章没有提到多台服务器。
  • @JonathanFeenstra Jason 是对的。当机器人进入全新的服务器时,我正在使它工作。我事先为机器人生成通道制作了部件,我想为它们设置权限。

标签: python discord discord.py


【解决方案1】:

如果您需要的频道集始终相同,您很可能希望在您的机器人加入的每个公会中创建自己的频道集,并具有预设权限。

频道是公会的属性,因此您可以在其中找到管理它们的方法,看看:

Guild

discord.PermissionOverwrite

来自API Reference的示例:

overwrites = {
    guild.default_role: discord.PermissionOverwrite(read_messages=False),
    guild.me: discord.PermissionOverwrite(read_messages=True)
}

channel = await guild.create_text_channel('secret', overwrites=overwrites)

编辑: 这是一个使用旁观者聊天的简单功能示例,如评论中所示

#!/usr/bin/env python3
import discord
from discord.ext import commands

class Setup(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
        
    @commands.Cog.listener()
    async def on_guild_join(self, guild):
        perms = discord.Permissions()
        perms.update(read_messages=True)
        names = ['ghost', 'spectator']
        overwrites = {
            guild.default_role: discord.PermissionOverwrite(read_messages=False),
            guild.me: discord.PermissionOverwrite(read_messages=True)
        }
        for n in names:
            role = await guild.create_role(name=n, permissions=perms)
            overwrites[role] = discord.PermissionOverwrite(read_messages=True)

        await guild.create_text_channel('spectator-chat', overwrites=overwrites)

【讨论】:

  • 我了解如何更改服务器的权限。但是应该如何更新多个角色的权限呢?你能告诉我在桌子上使用“旁观者聊天”的方式吗?
  • @Haidus 我更新了我的答案,不要害怕查看docs
  • 为什么要授予 guild.me 可以读取所有消息的权限?这是否意味着我可以读取所有服务器的消息?设置管理员角色并将其分配给邀请机器人的人怎么样?
  • guild.me 代表您在公会中的 bot Member 类。它只能覆盖邀请它的用户授予的权限,您应该在您在不和谐开发门户中生成的邀请链接中声明您的应用程序需要哪些权限。我的示例中的 guild.me 覆盖允许您的机器人查看您创建的频道中的消息,而不是整个服务器。在没有特别需要的情况下要求管理员权限是不好的做法,应该避免
猜你喜欢
  • 2021-05-28
  • 1970-01-01
  • 2021-08-16
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2016-05-14
  • 2020-12-05
相关资源
最近更新 更多