Discord.js v14创建仅用户与机器人可见私有频道报错解决
Discord.js v14 私有频道创建错误修复
你的代码出现DiscordAPIError[50035]: Invalid Form Body错误,核心原因是Discord.js v14的API调用格式有多处变更,具体问题和修复方案如下:
问题点分析
channels.create参数格式错误:v14中该方法不再接受单独的名称和类型参数,必须传入包含完整配置的对象,且频道类型需使用ChannelType枚举指定。overwritePermissions方法已废弃:v14移除了该方法,替换为editPermissions,且权限配置的结构也进行了调整。- 错误获取用户对象:交互场景下应使用
interaction.user而非interaction.author,后者是传统消息对象的属性,不适用于按钮/菜单交互。
修复后的代码
// 先导入ChannelType枚举 const { ChannelType } = require('discord.js'); else if (interaction.customId === 'donatid') { if(interaction.values[0] === '01'){ const everyoneRole = interaction.guild.roles.everyone; const name = interaction.user.tag; // 使用v14要求的配置对象格式创建频道 interaction.guild.channels.create({ name: name, type: ChannelType.GuildText, // 直接在创建时配置权限,避免多次异步调用 permissionOverwrites: [ { id: interaction.user.id, allow: ['ViewChannel'] }, { id: client.user.id, allow: ['ViewChannel'] }, { id: everyoneRole.id, deny: ['ViewChannel'] } ] }) .then(channel => { console.log(`私有频道创建成功:${channel.name}`); }) .catch(console.error); } };
关键修改说明
- 导入
ChannelType:必须通过该枚举指定频道类型,确保API请求格式符合Discord要求。 - 重构
channels.create参数:将频道名称、类型、权限规则整合到一个配置对象中,一次性完成频道创建与权限设置,提升代码效率。 - 替换权限配置方式:移除废弃的
overwritePermissions,改为在创建频道时通过permissionOverwrites字段批量配置权限规则。 - 修正用户对象获取:将
interaction.author.id改为interaction.user.id,适配交互场景的用户信息获取逻辑。
内容的提问来源于stack exchange,提问作者ART0022VI
相关产品推荐
相关产品推荐

