如何优化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单消息字符限制的内容
使用说明
- 替换
webhookUrl为你的Discord Webhook地址 - 若无表头,将循环起始
i = 1改为i = 0 - 可调整
join(" | ")的分隔符或行数据格式化逻辑
内容的提问来源于stack exchange,提问作者Xiael
相关产品推荐
相关产品推荐

