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

通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:02:19