Discord机器人开发遇message事件弃用告警 替换为messageCreate无效
问题原因及修复方案
你碰到的告警是discord.js v13及以上版本废弃了旧的message事件导致的,替换没生效大概率是只修改了回调函数的参数名,没有修改事件监听的事件名字符串。除此之外你的代码还存在多处语法错误和过时API调用问题,所有需要修正的点如下:
- 事件名修正:将
client.on('message', (message) => {中的事件名改为messageCreate,即修改为client.on('messageCreate', (message) => {,回调参数名可以保持message不变,不需要额外修改 - 语法错误修正:
- 数组取元素使用方括号,将
let cmd = MessageArray(0).slice(prefix.length)改为let cmd = MessageArray[0].slice(prefix.length) - 补全代码缺失的闭合符号:原有代码最后缺少if块的闭合
},以及事件回调的闭合}
- 数组取元素使用方括号,将
- API适配修正(适配discord.js v13+版本):
- 判断消息发送者为机器人的属性修改:将
if(message.author.client) return;改为if(message.author.bot) return; - 频道类型枚举值修改:将
if(message.channel.type !== 'text') return;改为if(message.channel.type !== 'GUILD_TEXT') return; - 消息发送方法修正:将
message.channel.send({ messages: ['hello'] });改为message.channel.send('hello');
- 判断消息发送者为机器人的属性修改:将
修正后可正常运行的完整代码如下:
client.on('messageCreate', (message) => { if(message.author.bot) return; if(message.channel.type !== 'GUILD_TEXT') return; let prefix = '!'; let MessageArray = message.content.split(' '); let cmd = MessageArray[0].slice(prefix.length) let args = MessageArray.slice(1) if(!message.content.startsWith(prefix)) return; if(cmd == 'hello') { message.channel.send('hello'); } })
内容的提问来源于stack exchange,提问作者PhoebeConrey
相关产品推荐
相关产品推荐

