Discord.js调用permissionOverwrites遇[INVALID_TYPE]错误求助
Discord.js [INVALID_TYPE] 错误排查与解决
报错信息:
[INVALID_TYPE]: Supplied parameter is not a User nor a Role
错误出在以下调用permissionOverwrites的代码段:
interaction.guild.channels.create(`ticket-${interaction.user.username}`, { parent: client.config.parentOpened, topic: interaction.user.id, type: 'GUILD_TEXT', permissionOverwrites: [{ id: interaction.user.id, allow: ['SEND_MESSAGES', 'VIEW_CHANNEL'], }, { id: client.config.roleSupport, allow: ['SEND_MESSAGES', 'VIEW_CHANNEL'], }, { id: interaction.guild.roles.everyone, deny: ['VIEW_CHANNEL'], }, ], })
错误原因
client.config.roleSupport配置无效:该值不是字符串格式的有效角色ID,可能是未配置、值为undefined、数字或角色名称,导致Discord.js无法识别为合法的角色对象/ID。- @everyone角色传参错误:直接传入
interaction.guild.roles.everyone(角色实例对象),而Discord.js的permissionOverwrites需要的是用户/角色的ID字符串,部分版本API会因此判定类型无效。
解决方法
修复
client.config.roleSupport配置- 打开配置文件,确认
roleSupport的值是服务器支持角色的字符串ID(可在Discord开启开发者模式后右键角色复制ID)。 - 如果是通过代码动态获取角色,确保存入配置的是角色的
id属性,而非角色对象。
- 打开配置文件,确认
修正@everyone角色的传参
将代码中对应部分改为:{ id: interaction.guild.roles.everyone.id, deny: ['VIEW_CHANNEL'], }可选验证步骤
添加日志输出确认参数有效性:console.log('roleSupport配置值:', client.config.roleSupport, '类型:', typeof client.config.roleSupport); console.log('@everyone角色实例:', interaction.guild.roles.everyone, 'ID:', interaction.guild.roles.everyone.id);
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

