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

discord.js报错INVALID_TYPE:提供的参数既不是用户也不是角色

解决方法

问题根因

该报错是discord.js处理频道创建的权限覆写参数时,无法识别传入的实体类型,或使用了已废弃的API参数导致的。

修复步骤

  • 修正权限覆写的ID取值:id字段需要传入字符串格式的用户/角色ID,不能直接传入Role或User对象,你当前代码里直接传入button.guild.roles.everyone对象,没有取ID属性是核心报错原因。
  • 修正频道创建参数:discord.js v13及以上版本,父分类参数名为parent,不是parent_id;v14版本频道类型需要使用ChannelType枚举,不能用字符串"text"。
  • 权限枚举适配:v14版本权限字符串改为小驼峰格式,不再使用大写下划线分隔的格式。
  • 可选优化:权限覆写项可以明确添加type字段,0代表角色,1代表成员,进一步避免类型识别错误。

修正后代码示例

discord.js v13版本

button.guild.channels.create('cs', {
  type: "GUILD_TEXT",
  parent: '802172599836213258',
  permissionOverwrites: [
    {
      id: button.guild.roles.everyone.id,
      deny: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'READ_MESSAGE_HISTORY']
    },
    {
      // 原生按钮交互的触发用户ID用button.user.id,如确认使用的clicker对象取值正确可保留原写法
      id: button.user.id,
      allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'READ_MESSAGE_HISTORY']
    }
  ]
})

discord.js v14版本

const { ChannelType } = require('discord.js');

button.guild.channels.create('cs', {
  type: ChannelType.GuildText,
  parent: '802172599836213258',
  permissionOverwrites: [
    {
      id: button.guild.roles.everyone.id,
      deny: ['ViewChannel', 'SendMessages', 'ReadMessageHistory'],
      type: 0
    },
    {
      id: button.user.id,
      allow: ['ViewChannel', 'SendMessages', 'ReadMessageHistory'],
      type: 1
    }
  ]
})

额外注意

如果你当前使用的是第三方discord-buttons插件实现按钮交互,该插件早已停止维护,与新版discord.js存在大量兼容问题,建议替换为discord.js原生的按钮交互体系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:39:05