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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:57:25