我在常量值通道和原因中获得了选项,我正在尝试编辑通道权限以锁定通道。这是我当前的命令代码。
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...
我找到了这个问题的答案。新的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]
}
]);
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
})
文档: