📤

Google Formに送られた内容をDiscordに自動送信する

2023/11/21に公開

匿名のフォームを作りたくなって(作る必要が出てきて)Google FormとDiscord Webhookを組み合わせて匿名フォームを作ったのでそれの備忘録です

コード

const webhookUrl = "https://discord.com/api/webhooks/****"

function myFunction() {
  const form = FormApp.openById("****")
  const formResponses = form.getResponses()
  const latest_response = formResponses[formResponse.length-1].getItemResponses()
  const kanji = latest_response[0].getResponse()
  const yomikata = latest_response[1].getResponse()
  const description = latest_response[2].getResponse()

  const message = {
    "content": ...
  }
  UrlFetchApp.fetch(webhookUrl, {
    "method": "POST",
    "headers": {
      "Content-Type": "application/json",
    },
    "payload": JSON.stringify(message),
  })
}

何をしているのか

const webhookUrl = "https://discord.com/api/webhooks/****"

WebHookのURLの定義です。(WebhookのURLの取得方法)

(以下myFunction内がフォームに回答が送信された時に行われる関数)

const form = FormApp.openById("****")
const formResponses = form.getResponses()

formが回答を取得したい先のフォームです。"****"にはフォームのIDが入りますが、これはフォーム編集画面のURLであるhttps://docs.google.com/forms/d/****/edit****の部分に当たります。
そして、formResponsesにはフォームに集まった回答全てが格納されます

const latest_response = formResponses[formResponse.length-1].getItemResponses()

ここではフォームで最後に送信された回答を取得し、その回答で集まった内容を取得しています。

const kanji = latest_response[0].getResponse()
const yomikata = latest_response[1].getResponse()
const description = latest_response[2].getResponse()

それぞれフォームの設問に対する回答を取得しています。回答は設問の上からの順番で配列に格納されています

const message = {
  "content": ...
}

Discordに送るメッセージですEmbed Generatorを使うと楽に作れます

UrlFetchApp.fetch(webhookUrl, {
  "method": "POST",
  "headers": {
    "Content-Type": "application/json",
  },
  "payload": JSON.stringify(message),
})

webhookを発火させるコードです。Google Apps Scriptではfetch APIをそのまま使えないっぽいのでUrlFetchAppを使用する必要があります。

Discussion