使用discord.js v14编辑频道权限

问题描述 投票:0回答:2

我在常量值通道和原因中获得了选项,我正在尝试编辑通道权限以锁定通道。这是我当前的命令代码。

const { SlashCommandBuilder } = require("discord.js");

module.exports = {
  data: new SlashCommandBuilder()
    .setName("lock")
    .setDescription("Locks the channel u specify.")
    .addChannelOption((option) =>
      option
        .setName("channel")
        .setDescription("The channel u want to lock.")
        .setRequired(true)
    )
    .addStringOption((option) =>
      option
        .setName("reason")
        .setDescription("The reason why the channel was locked.")
        .setRequired(true)
    ),
  async execute(interaction, client) {
    const channel = interaction.options.getChannel("channel");
    let reason = interaction.options.getString("reason");

        channel.permissionOverwrites.edit(interaction.guild.roles.everyone.id, {
            VIEW_CHANNEL: true,
            SEND_MESSAGES: false,
            READ_MESSAGE_HISTORY: true,
            ATTACH_FILES: false
        });
      await interaction.reply({
        content: `Locked channel ${channel} for the reason ${reason}`
      });
  },
};

但是我在第 23 行遇到错误,其中

channel.permissionOverwrites.edit
是。 错误:

C:\Users\Robin\Documents\Bobbie\node_modules\discord.js\src\util\BitField.js:168
    throw new RangeError(ErrorCodes.BitFieldInvalid, bit);
          ^
    at PermissionOverwriteManager.upsert (C:\Users\Robin\Documents\Bobbie\node_modules\discord.js\src\managers\PermissionOverwriteManager.js:100:50)
    at PermissionOverwriteManager.edit (C:\Users\Robin\Documents\Bobbie\node_modules\discord.js\src\managers\PermissionOverwriteManager.js:145:17)
    at Object.execute (C:\Users\Robin\Documents\Bobbie\src\commands\moderation\lock.js:23:38)
    at Object.execute (C:\Users\Robin\Documents\Bobbie\src\events\client\interactionCreate.js:11:31)    at Client.<anonymous> (C:\Users\Robin\Documents\Bobbie\src\functions\handlers\handleEvents.js:21:23)
    at Client.emit (node:events:527:28)    at InteractionCreateAction.handle (C:\Users\Robin\Documents\Bobbie\node_modules\discord.js\src\client\actions\InteractionCreate.js:81:12) {  code: 'BitFieldInvalid'
}
[nodemon] app crashed - waiting for file changes before starting...
javascript node.js discord.js
2个回答
1
投票

我找到了这个问题的答案。新的discord.js更新v14现在使用

PermissionsBitField.Flags

所以固定代码是

channel.permissionOverwrites.set([
  {
    id: interaction.guild.id,
    deny: [PermissionsBitField.Flags.SendMessages],
  }, {
    id: interaction.guild.id,
    allow: [PermissionsBitField.Flags.ViewChannel],
  }, {
    id: interaction.guild.id,
    allow: [PermissionsBitField.Flags.ReadMessageHistory]
  }, {
     id: interaction.guild.id,
    deny: [PermissionsBitField.Flags.CreatePublicThreads]
  }, {
    id: interaction.guild.id,
    deny: [PermissionsBitField.Flags.CreatePrivateThreads]
  }
]);

0
投票

Debes tener encuenta que la sintaxis “VIEW_CHANNEL”cambió en el salto de discord.js@v13 a discord.js@v14.

Ahora las sobrescrituras ahora se realizan midte la clave de permiso PascalCase en lugar de la clave de permiso SCREAMING_SNAKE_CASE.

这就是解决问题的方法 “ViewChannel”“VIEW_CHANNEL”,反之亦然。

// Forma correcta de editar permisos en [email protected]

channel.permissionOverwrites.edit(interaction.guild.roles.everyone.id, {
        ViewChannel: true,
        SendMessages: false,
        ReadMessageHistory: true,
        AttachFiles: false
})

文档:

© www.soinside.com 2019 - 2024. All rights reserved.