通过WebSocket与Webhook获取Discord Bot消息时遇@deleted-role问题
解决Discord Webhook转发Bot消息时出现@deleted-role的问题
问题原因
原消息中包含已删除角色的提及(API返回格式为<@&角色ID>),当目标服务器不存在该角色ID时,Discord会将其渲染为@deleted-role。直接转发原始content字段不会自动处理这类无效提及。
解决方案
转发前处理消息内容,将无效的角色提及替换为自定义文本(比如[已删除角色]),或直接移除。以下是修改后的代码:
// 处理消息内容中的已删除角色提及 function processContent(content) { if (!content) return content; // 匹配<@&数字ID>格式的角色提及,替换为[已删除角色] return content.replace(/<@&(\d+)>/g, '[已删除角色]'); } if (d.author != null) { if (d.channel_id === testchannel) { const client = new WebhookClient({ url: "https://ptb.discord.com/api/webhooks/MY WEBHOOK" }); let content; if (d.content) { // 处理content中的无效角色提及 content = processContent(d.content); } else if (d.embeds.length > 0) { content = { embeds: d.embeds }; } if (content) { client.send(content); } // 批量发送附件链接,减少API调用次数 if (d.attachments && d.attachments.length > 0) { const attachmentUrls = d.attachments.map(att => att.url).join('\n'); client.send(attachmentUrls); } } }
额外优化点
- 复用同一个
WebhookClient实例,避免重复创建 - 批量处理附件链接,减少Webhook调用次数
- 增加
embeds数组长度判断,避免空数组引发的异常
内容的提问来源于stack exchange,提问作者LordTakahiro
相关产品推荐
相关产品推荐

