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

升级到Discord.js v13后messageCreate事件异常,命令args参数未定义

修复方案

1. 命令参数undefined问题

原因

你调用命令run方法的参数顺序和命令定义的接收顺序不匹配:

  • messageCreate.js中调用run时传参顺序为 bot, message, args 共3个参数
  • 命令文件中run函数的接收顺序为 bot, message, config, args 共4个参数
    多出来的config参数占了位置,导致第四个参数args没有对应传入值,始终为undefined。

修复方法

二选一即可:

  • 把所有命令文件的run函数参数改为 async (bot, message, args)
  • 把messageCreate.js中调用run的代码改为 await cmd.run(bot, message, config, args),主动传入config参数

2. 机器人自身消息拦截不生效问题

原因排查&修复

  1. 缓存清理路径大小写不一致
    你index.js中加载事件用的路径是./Events/${file},删除缓存用的路径是./events/${file},Node.js在大小写敏感的系统中会判定为两个不同路径,导致旧代码缓存没有被清除,实际运行的还是未修改的旧逻辑。
    修复:统一路径大小写,将删除缓存代码改为:
delete require.cache[require.resolve(`./Events/${file}`)]
  1. 缺失v13要求的网关意图
    Discord.js v13开始必须明确配置网关意图才能正常接收消息:
  • 前往Discord开发者后台的机器人设置页面,开启Message Content Intent权限
  • 初始化bot时添加所需的消息相关意图,示例配置:
const { Client, Intents } = require('discord.js');
const bot = new Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.DIRECT_MESSAGES
  ]
});
  1. 逻辑优化建议
    可以将机器人消息拦截逻辑放到messageCreate处理函数的最开头,统一拦截所有机器人消息,无需分DM和非DM分支重复判断:
module.exports = async (bot, message) => {
  if(message.author.bot) return;
  // 后续其他逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:06:04