Discord.js v14迁移报错:TypeError: Intents is not a constructor
Discord.js v14 迁移:Intents 构造函数报错解决
错误原因
Discord.js v14 彻底移除了旧版本的Intents构造函数,改用GatewayIntentBits枚举类定义网关意图,你沿用v9的旧写法,才触发了TypeError: Intents is not a constructor错误。
代码修正方案
步骤1:清理冗余导入并使用正确API
移除无效的Intents导入,合并重复的discord.js模块导入,改用GatewayIntentBits配置意图:
const fs = require('fs') const ms = require('ms') const moment = require('moment') const mongoose = require('mongoose') // 一次性解构导入所需的discord.js组件 const { Client, GatewayIntentBits, Partials, Collection, EmbedBuilder } = require('discord.js'); // 推荐方式:用枚举值数组声明所需意图(直观且易维护) const client = new Client({ intents: [ GatewayIntentBits.Guilds, // 服务器相关基础操作 GatewayIntentBits.GuildMessages, // 服务器消息事件 GatewayIntentBits.MessageContent, // 读取消息内容(需在开发者门户开启特权意图) // 按需添加其他你需要的意图,比如GuildMembers、DirectMessages等 ], partials: [Partials.Channel, Partials.Message] // 根据机器人功能需求添加Partial类型 }); const config = require('./storage/config.json') client.commands = new Collection() const Logs = require('./models/logs.js')
可选:保留数字意图值的兼容写法
如果你想继续使用数字7796指定意图组合,可以借助BitField处理:
const { Client, GatewayIntentBits, BitField } = require('discord.js'); const client = new Client({ intents: new BitField(GatewayIntentBits, 7796) });
额外注意事项
- v14中
MessageEmbed已更名为EmbedBuilder,代码中所有创建嵌入消息的地方都需要替换为new EmbedBuilder()。 - 部分敏感意图(如
MessageContent、GuildMembers)需要在Discord开发者门户的机器人设置中手动开启「特权网关意图」,否则机器人无法正常接收相关事件。
内容的提问来源于stack exchange,提问作者Alvin Huang
相关产品推荐
相关产品推荐

