discord.js从v12升级v13后startTyping方法不存在报错咨询
问题排查与修复方案
核心错误原因
你怀疑的module.exports写法没有问题,报错的根本原因是discord.js v13版本重构了原v12版本的频道输入状态相关API,直接移除了startTyping()和stopTyping()方法。
修复步骤
1. 替换废弃的输入状态API
找到app/events/messageCreate.js文件第172行左右的代码:
message.channel.startTyping(); cmdFile.exec(bot, msg, args).then(message.channel.stopTyping());
替换为v13版本的新API即可:
// sendTyping()会自动维持10秒的输入状态,满足绝大多数命令执行场景 message.channel.sendTyping(); await cmdFile.exec(bot, msg, args);
如果你的部分命令执行时长超过10秒,可以自行设置定时器重复调用sendTyping()延长输入状态显示时长。
2. 补全缺失的Gateway Intent
你目前的机器人配置少了接收消息内容必须的Intent,会导致后续即使修复了API问题也无法识别指令,需要修改bot.js里的Client初始化配置:
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.MESSAGE_CONTENT] });
修改完成后需要前往Discord开发者后台的机器人管理页面,在「Privileged Gateway Intents」板块开启Message Content Intent权限,否则该Intent无法生效。
其他潜在问题优化
你代码里还存在一个容易触发i18n读取错误的问题:全局定义的language变量和多处局部定义的let language存在作用域冲突,部分场景下会取到空值导致返回消息异常,建议统一使用message.guild?.language ?? "en"来读取语言配置,替换掉所有对全局language变量的引用。
内容的提问来源于stack exchange,提问作者MarcZX10
相关产品推荐
相关产品推荐

