我是如何让 Google 表单自动将提交内容发布到我们的 Discord 服务器的
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
动机
一位朋友邀请我和他一起开发一款游戏,我当然欣然接受。项目初期,我们就决定需要招募测试玩家,并设计一个申请成为测试玩家的途径。我立刻想到了谷歌表单,于是便着手编写代码,让表单自动将答案发布到我们的 Discord 服务器中。
第一部分:那么……我该如何开始呢?
我知道我需要两样东西:一个 Discord webhook,以及一个能在每次表单提交时都向其发送请求的工具。我很快发现了Apps Script,它能让我与许多 Google 应用(包括表单)进行交互,我可以利用它将我的想法变为现实。
第二部分:好了,让我们开始吧。
首先,我想弄清楚我的表单插件是否可以发送 HTTP 请求,然后找到了UrlFetchApp.fetch。
function onSubmit(e) {
UrlFetchApp('somecoolurlidk')
}
第三部分:但我可以使用 Discord Webhook 吗?
是的。Discord Webhook 的文档非常棒,我几分钟之内就设置好了。
function onSubmit(e) {
var discordPayload = {
content: 'Form submitted'
}
UrlFetchApp('discordwebhookurl', {
method: 'post',
payload: JSON.stringify(discordPayload),
contentType: 'application/json'
})
}
第四部分:好了,是时候把它连接到表单了。
通过访问Edit > Current project's triggers,我可以设置表单,以便onSubmit在表单提交时触发该函数。

第五部分:整合所有内容
我没什么好说的。我漫无目的地浏览了大约一个小时的 Apps Script 文档,但最终还是写出了这段代码:
function onSubmit(e) {
var discordPayload = {
content: 'Form submitted',
embeds: [{
type: 'rich',
title: 'Form submission',
color: 7506394,
fields: []
}]
}
e.response.getItemResponses().forEach(function(i) {
var v = i.getResponse() || 'None'
discordPayload.embeds[0].fields.push({ name: i.getItem().getTitle(), value: v })
})
UrlFetchApp.fetch('youknowwhatgoeshereanywaysandimnotinthemoodtoleakstuff', {
method: 'post',
payload: JSON.stringify(discordPayload),
contentType: 'application/json'
})
}
