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

如何优化Google Scripts发送Discord消息的效率并解决异常输出?

Google Scripts 批量发送Sheet数据到Discord Webhook优化方案

问题根源

  • 单条数据单独发送:频繁触发Discord请求限流
  • 直接输出数组对象:未将数组转为可读字符串,导致显示[Ljava.lang.Object;@xxxxxx

优化后的完整代码

function sendToDiscord() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();
  const webhookUrl = "你的Discord Webhook地址"; // 替换为实际地址

  // 跳过表头(如果有),从第二行开始收集数据
  const contentLines = [];
  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    // 将数组转为格式化字符串,用竖线分隔字段
    const rowStr = row.join(" | ");
    contentLines.push(`第${i+1}行数据:${rowStr}`);
  }

  // 处理超长内容,拆分符合Discord单消息2000字符限制
  const maxMessageLength = 2000;
  let currentMessage = "";
  const messages = [];

  for (const line of contentLines) {
    if (currentMessage.length + line.length + 1 > maxMessageLength) {
      messages.push(currentMessage.trim());
      currentMessage = line + "\n";
    } else {
      currentMessage += line + "\n";
    }
  }
  if (currentMessage) {
    messages.push(currentMessage.trim());
  }

  // 间隔发送消息,规避Discord限流
  messages.forEach((msg, index) => {
    const payload = {
      content: msg
    };

    const options = {
      method: "post",
      contentType: "application/json",
      payload: JSON.stringify(payload)
    };

    Utilities.sleep(index * 1000);
    UrlFetchApp.fetch(webhookUrl, options);
  });
}

关键优化点

  • 批量收集数据:遍历Sheet时先将每行转为可读字符串,再合并为大消息(超长内容自动拆分)
  • 数组转字符串:用join(" | ")将数组元素转为清晰的分隔字符串,避免输出对象地址
  • 限流规避:合并多条数据为单请求减少次数,多消息发送时添加1秒间隔
  • 内容适配:自动拆分超过Discord单消息字符限制的内容

使用说明

  1. 替换webhookUrl为你的Discord Webhook地址
  2. 若无表头,将循环起始i = 1改为i = 0
  3. 可调整join(" | ")的分隔符或行数据格式化逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:15:37