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

Discord.js V13权限覆盖报错INVALID_TYPE,求技术协助

问题分析与修复方案

错误根源

你遇到的INVALID_TYPE错误,并非Discord.js v13版本本身的问题,而是permissionOverwrites的配置格式不符合v13的严格要求:每个权限覆盖项必须明确指定是用户(member)还是角色(role),或者直接传入User/Role实例。你的代码存在两处不符合要求的地方:

  1. 第一个权限项中,你将client.users.cache.get(chan.topic)返回的User对象赋值给了id字段——id需要的是字符串格式的ID,而非对象。
  2. 第三个权限项中,你使用了角色ID字符串,但未指定type: 'role',Discord.js无法识别这是角色还是用户ID。

修正后的代码示例

写法1:使用ID字符串+明确类型

// 先获取目标用户(需判断用户是否存在于缓存)
const targetUser = client.users.cache.get(chan.topic);
if (!targetUser) {
    console.error('目标用户不在缓存中');
    return;
}

chan.edit({
    name: `closed-${chan.name}`,
    permissionOverwrites: [
        {
            id: targetUser.id,
            type: 'member',
            deny: ['SEND_MESSAGES', 'VIEW_CHANNEL'],
        },
        {
            id: interaction.guild.roles.everyone.id,
            type: 'role',
            deny: ['VIEW_CHANNEL'],
        },
        {
            id: client.config.roleSupport,
            type: 'role',
            allow: ['SEND_MESSAGES', 'VIEW_CHANNEL'],
        },
    ],
});

写法2:直接传入User/Role实例(更简洁)

const targetUser = client.users.cache.get(chan.topic);
const everyoneRole = interaction.guild.roles.everyone;
// 从服务器缓存中获取支持角色(提前验证角色是否存在)
const supportRole = interaction.guild.roles.cache.get(client.config.roleSupport);

if (!targetUser || !supportRole) {
    console.error('用户或支持角色不存在');
    return;
}

chan.edit({
    name: `closed-${chan.name}`,
    permissionOverwrites: [
        {
            ...targetUser,
            deny: ['SEND_MESSAGES', 'VIEW_CHANNEL'],
        },
        {
            ...everyoneRole,
            deny: ['VIEW_CHANNEL'],
        },
        {
            ...supportRole,
            allow: ['SEND_MESSAGES', 'VIEW_CHANNEL'],
        },
    ],
});

额外注意事项

  • 确保chan.topic存储的是有效的用户ID字符串,否则client.users.cache.get()会返回undefined,引发新的错误。
  • 对于角色,建议从服务器角色缓存中获取实例,而非直接使用配置中的ID,这样能提前验证角色是否存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:15:11