如何在discord.js的messageUpdate事件处理器中传入client实例?
解决Discord.js messageUpdate事件中获取Client对象的问题
方法1:从消息实例直接获取Client
Discord.js的Message对象本身自带client属性,指向创建该消息的Client实例,不需要额外传入——直接通过oldMessage.client或newMessage.client就能拿到。
修改你代码中获取频道的那一行即可:
const channel = oldMessage.client.channels.cache.get('1095586244890734644');
完整修改后的代码:
const {} = require("discord.js"); module.exports = (oldMessage, newMessage) => { try { if(oldMessage.author.bot) { return; } const channel = oldMessage.client.channels.cache.get('1095586244890734644'); const logContent = `-------------------------------------------------- Channel: ${oldMessage.channel} Author: ${oldMessage.author} Old message: ${oldMessage.content} Date and time: ${oldMessage.createdAt} New message: ${newMessage.content} Date and time updated: ${newMessage.editedAt} --------------------------------------------------`; console.log(logContent); channel.send(logContent); } catch (error) { console.log(`There was an error ${error}`); } };
注:顺便把newMessage.createdAt改成了newMessage.editedAt,因为消息编辑后的时间应该用editedAt,createdAt是消息最初创建的时间,这样日志更准确。
方法2:模块导出时注入Client
如果你的事件是作为独立模块管理,也可以在导出时先接收Client,再返回事件处理函数:
事件文件代码:
const {} = require("discord.js"); module.exports = (client) => { return (oldMessage, newMessage) => { try { if(oldMessage.author.bot) { return; } const channel = client.channels.cache.get('1095586244890734644'); const logContent = `-------------------------------------------------- Channel: ${oldMessage.channel} Author: ${oldMessage.author} Old message: ${oldMessage.content} Date and time: ${oldMessage.createdAt} New message: ${newMessage.content} Date and time updated: ${newMessage.editedAt} --------------------------------------------------`; console.log(logContent); channel.send(logContent); } catch (error) { console.log(`There was an error ${error}`); } }; };
然后在主文件注册事件时,传入Client:
const client = new Client({ intents: [...] }); client.on('messageUpdate', require('./path/to/your/event/file')(client));
内容的提问来源于stack exchange,提问作者Bot
相关产品推荐
相关产品推荐

