【问题标题】:Give roles permission to interact with newly created channel Discord.JS授予角色与新创建的频道 Discord.JS 交互的权限
【发布时间】:2021-04-10 12:23:13
【问题描述】:

我正在使用 Node.JS 创建一个不和谐机器人,其中使用相同的命令创建了一个新角色和频道。为了简单起见,角色名和频道名都是命令的第一个参数:

let chanName = args[0];
let roleName = args[0];

角色/频道名称后面是提及列表 - 这些是接收新角色的用户。角色创建得很好,频道创建得很好,成员被添加到角色中也很好,但是我在设置权限时遇到问题,只有具有新角色或“管理员”角色的用户能够查看频道。

频道是这样创建的:

message.guild.channels.create(chanName, {
    type: "text"
})
.then((channel) => {
    //Each new channel is created under the same category
    const categoryID = '18-digit-category-id';
    channel.setParent(categoryID);
})
.catch(console.error);

频道好像没有添加到公会缓存中

let chan = message.guild.channels.cache.find(channel => channel.name === chanName);

因为此代码将“未定义”返回到控制台。

有什么方法可以让上述用户与这个新频道互动(查看、发送消息、添加反应...)?

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    在创建频道时设置权限非常简单! 感谢GuildChannelManager#create() 为我们提供的多个选项,我们可以非常简单地为我们想要的角色和成员添加权限覆盖。 我们可以非常简单地获取您的代码并添加一个permissionOverwrites 部分来设置频道的权限,如下所示:

    message.guild.channels.create(chanName, {
            type: "text",
            permissionOverwrites: [ 
               // keep in mind permissionOverwrites work off id's!
                {
                    id: role.id, // "role" obviously resembles the role object you've just created
                    allow: ['VIEW_CHANNEL']
                }, 
                {
                    id: administratorRole.id, // "administratorRole" obviously resembles your Administrator Role object
                    allow: ['VIEW_CHANNEL']
                },
                {
                    id: message.guild.id,
                    deny: ['VIEW_CHANNEL']
                }
            ]
        })
        .then((channel) => {
            //Each new channel is created under the same category
            const categoryID = '18-digit-category-id';
            channel.setParent(categoryID);
        })
    

    【讨论】:

    • 再次感谢您的回复!我确实有几个问题:我目前正在创建频道,然后是角色 - 我现在应该交换它们是否有意义?如果我刚刚创建的角色尚未在缓存中,我如何获取它的 ID?
    • 是的!您需要先创建角色,然后将其用于权限。您可以非常简单地定义您刚刚创建的角色,然后在使用 permissionOverwrites! 时使用它!
    • 非常抱歉,我对此很陌生。我如何“定义新角色”?我尝试了let newRole = message.guild.roles.create...roleName.id(因为新角色的名称被定义为roleName),但我收到一个错误,提示传递的参数既不是角色也不是用户。跨度>
    • 您实际上一开始就做对了。您已经正确定义了它,现在只需使用newRole.id!另外,只是一个快速提示,我建议在以后不需要更改变量的情况下使用const。如果您有任何错误,有时它会更清晰,更容易稍后编辑。
    • 好的,我改变了它,所以 newRole 现在是一个常量,但我仍然收到“TypeError [INVALID_TYPE]:提供的参数不是用户也不是角色”。错误。
    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 2021-12-31
    • 2021-03-02
    • 2021-08-19
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多