如何在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
相关产品推荐
相关产品推荐

