运行Discord.js机器人报错ReferenceError: Discord is not defined如何解决
错误原因
ReferenceError: Discord is not defined
这个报错的根本原因是你没有在代码中引入Discord全局命名空间,也没有单独导入Collection类,直接调用Discord.Collection时找不到对应的对象定义。
解决方法
两种方案选其一即可:
方案1:单独导入Collection类
修改你的第一行导入语句,将Collection加入解构列表:
const { Client, Intents, DiscordAPIError, Collection } = require('discord.js');
再将报错的第9行修改为:
client.commands = new Collection();
这是更轻量化的写法,不需要导入整个discord.js模块的所有内容。
方案2:全量导入Discord命名空间
如果你希望保留Discord.Collection的写法,就把第一行的解构导入改为全量导入:
const Discord = require('discord.js');
注意修改后续用到的其他discord.js内置类的调用方式,比如创建客户端的代码要对应修改为:
const client = new Discord.Client({ intents: [Discord.Intents.FLAGS.GUILDS, Discord.Intents.FLAGS.GUILD_MESSAGES] });
其他注意事项
你的代码里还存在其他会导致后续报错的问题,建议同步修复:
- 你定义的前缀常量是
const PREFIX = '$',但在message事件里切割参数时用的是小写的prefix,变量名不匹配会抛出未定义错误,需要统一变量名。 client.login()方法现在写在了play函数内部,只有play被调用时才会执行登录逻辑,正常情况应该将这行代码移到整个脚本的最末尾、全局作用域下,才能让机器人正常启动登录。- 如果你使用的是discord.js v13及以上版本,
message事件已被弃用,需要替换为messageCreate事件,playStream方法也需要替换为play方法,避免兼容问题。
内容的提问来源于stack exchange,提问作者FatherFabian
相关产品推荐
相关产品推荐

