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

如何在Discord.js/Node.js中延迟复制消息以适配嵌入消息编辑

解决Discord消息复制时嵌入消息编辑不同步的问题

要解决嵌入消息编辑后脚本仍发送初始版本的问题,核心思路是延迟一段时间后再获取并发送最新的消息内容,同时可结合监听消息编辑事件同步更新已发送内容,以下是具体实现:

方法一:添加固定延迟获取最新消息

利用JavaScript的setTimeout函数延迟执行发送逻辑,给消息编辑留足时间。需要通过消息ID重新获取最新的消息数据,再发送到备用服务器:

import Selfcore from "selfcore";

const client = new Selfcore()
const gateway = new Selfcore.Gateway("token");

gateway.on("message", async m => { 
    if(m.channel_id === "939824755664629813") {
        // 设置延迟时间(示例为3秒,可根据实际情况调整)
        setTimeout(async () => {
            // 重新获取最新的消息数据
            const latestMessage = await client.getMessage(m.channel_id, m.id);
            // 构造发送内容:优先取文本,无文本则取嵌入消息
            let content = latestMessage.content 
                ? latestMessage.content 
                : { embeds: latestMessage.embeds.length ? [latestMessage.embeds[0]] : [] };
            // 发送到备用服务器的Webhook
            await client.sendWebhook(
                "https://discord.com/api/webhooks/1062393339422457866/token", 
                content
            );
        }, 3000); // 延迟3000毫秒(3秒)
    }
});

注意事项:

  • 延迟时间可根据实际编辑频率调整,建议2-5秒区间,避免过短仍获取初始版本,过长影响同步效率。
  • 必须使用await client.getMessage获取最新消息,不能直接使用事件触发时的旧数据。

方法二:监听消息编辑事件同步更新(更精准)

如果希望实时同步编辑后的内容,可同时监听messageUpdate事件,当原消息被编辑时,更新已发送到备用服务器的消息:

import Selfcore from "selfcore";

const client = new Selfcore()
const gateway = new Selfcore.Gateway("token");
// 存储原消息ID与Webhook发送后的消息ID映射
const messageMap = new Map();

gateway.on("message", async m => { 
    if(m.channel_id === "939824755664629813") {
        setTimeout(async () => {
            const latestMessage = await client.getMessage(m.channel_id, m.id);
            let content = latestMessage.content 
                ? latestMessage.content 
                : { embeds: latestMessage.embeds.length ? [latestMessage.embeds[0]] : [] };
            // 发送后保存消息ID映射
            const sentMessage = await client.sendWebhook(
                "https://discord.com/api/webhooks/1062393339422457866/token", 
                content
            );
            messageMap.set(m.id, sentMessage.id);
        }, 3000);
    }
});

// 监听消息编辑事件
gateway.on("messageUpdate", async (oldMsg, newMsg) => {
    if(oldMsg.channel_id === "939824755664629813") {
        const sentMsgId = messageMap.get(newMsg.id);
        if(sentMsgId) {
            // 构造更新后的内容
            let content = newMsg.content 
                ? newMsg.content 
                : { embeds: newMsg.embeds.length ? [newMsg.embeds[0]] : [] };
            // 更新备用服务器的消息
            await client.editWebhookMessage(
                "https://discord.com/api/webhooks/1062393339422457866/token",
                sentMsgId,
                content
            );
        }
    }
});

优势:

  • 既解决了初始发送时的编辑延迟问题,又能在后续消息被编辑时实时同步,保证内容完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:00:49