Discord.js运行报TypeError: client.on is not a function错误如何解决?
报错原因
TypeError: Client.on is not a function 报错的核心原因是你调用on方法的对象不是Discord.js Client类的有效实例,常见场景如下:
../index.js文件导出的是Client类本身,而非实例化后的客户端对象。on是Client类的实例方法,必须在new生成的实例上调用,不能直接用类调用。../index.js中实例化了Client对象,但没有通过module.exports正确导出,导致require("../index")拿到的是空对象或其他非预期值。- 导入路径填写错误,实际引入的文件不是你存放Client实例的index.js,自然不存在
on方法。
解决方案
- 修正index.js的导出逻辑,确保导出的是实例化后的Client对象,参考写法:
const { Client, IntentsBitField } = require('discord.js'); // 必须开启对应intents,Guilds权限是接收guildCreate事件的前提 const client = new Client({ intents: [ IntentsBitField.Flags.Guilds, IntentsBitField.Flags.GuildMessages, // 其他业务需要的权限 ] }); // 导出实例,这一步不能漏 module.exports = client; client.login('你的机器人Token');
- 核对当前文件的导入路径,确保
../index对应你存放Client实例的index.js的相对位置。 - 额外兼容调整:Discord.js v13及以上版本已废弃频道类型的字符串判断,你代码里的
channel.type === "text"会失效,需要调整为枚举值判断:
// 首先引入ChannelType const { MessageEmbed, ChannelType } = require("discord.js"); // 对应判断条件修改为 channel.type === ChannelType.GuildText
内容的提问来源于stack exchange,提问作者Rask
相关产品推荐
相关产品推荐

