You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
    }
};

关键修改说明

  1. 导入ChannelType:必须通过该枚举指定频道类型,确保API请求格式符合Discord要求。
  2. 重构channels.create参数:将频道名称、类型、权限规则整合到一个配置对象中,一次性完成频道创建与权限设置,提升代码效率。
  3. 替换权限配置方式:移除废弃的overwritePermissions,改为在创建频道时通过permissionOverwrites字段批量配置权限规则。
  4. 修正用户对象获取:将interaction.author.id改为interaction.user.id,适配交互场景的用户信息获取逻辑。

内容的提问来源于stack exchange,提问作者ART0022VI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:55:27