GoogleFormで送信してもらった情報をDiscordに送るようにしたよ
きっかけ
youtubeで配信をすることになり、質問コーナーをやるためにマシュマロみたいな感じのものをdiscordで手軽に見れるようにしたかったのです。
その配信はこちらです(人生初配信なのでお見苦しいかと思います)
作ったフォームはこちらです
VRChatter,割と技術系に強い人が多いので、こういうのを書いてみても良いと思い書いてみました。自分自身のためにもなると思いますし。
しくみについて
まず、Googleフォームの内容を記入していただき、送信ボタンを押します。
するとスプレッドシートにも内容が移記されます。その際に「フォームが送信されること」をトリガーとしてその送信されたフォームの内容をdiscordに転送される今回作ったプログラムが動いています。
フォーム→スプレッドシート(についているGAS)→discord
みたいな感じかと思われます。私もよく分かっていないです。
function onFormSubmit2(e) {
var URL = '略'
var text = ('')
text += ("\r ──────────────────── \r")
text += ('●タイムスタンプ \r ')
text += (e.values[0])
text += ('\r ●ペンネーム \r')
text += (e.values[1])
text += ('\r ●本文↓ \r')
text += (e.values[2])
text += ("\r ──────────────────── \r")
const message = {
username: ("Google-formより"),
content: (text),
}
const param = {
"method": "POST",
"headers": { 'Content-type': "application/json" },
"payload": JSON.stringify(message)
}
UrlFetchApp.fetch(URL, param);
}
↑ ソースコードです。
URL = '略' の略にはwebhook用URLが入っています。
プログラミング初心者なので良くないところが色々あるかと思いますがご容赦くださいますようお願いいたします。。。
いくつか自分がつまずいたポイントがあるので書き残しておきます。
重要:[デバッグ][実行]ボタンを押してもエラーになるだけのときがあります
私は全然知識が無かったのでただ単純に実行ボタンを押してもエラーになってしまってつまずいていました。
原因は単純です。このプログラムは送信されたフォームの内容がeに入っていて、その値をe.values[数字]の形で読み出しているため、フォームが送信されていないのに実行ボタンだけ押しても、フォームは別に送信されていないので存在しない物を読み出すわけです。(あまりよくわかっていないのでこの説明で間違っていたら教えてください。修正します。)
対策は簡単です。何度もテストメッセージを送信フォームへ送りつけて結果を「実行数」の所から見れば良いのです。私は少なくとも36回テストメッセージを送りました。
e.values[数字]について
e.values[数字]は、エディター画面を「スプレッドシート側から」出したときに使うことができます。google form側からエディター画面を出した場合はエラーになってしまい使うことができません。google form側からの場合はe.response.getItemResponses()を使うみたいです。
出典:https://zenn.dev/gas/articles/8cb18b31507dcf 最終確認 2024-02-03
e.values[0]がスプレッドシートで言うところのA列にあたります。google formからスプレッドシートに入る場合はタイムスタンプになります。
discordにウェブフック(webhook)で送る場合の改行コード
\\n でやろうとしたら失敗しました。\rを使うみたいです。
さいごに
ヘケチェカワイイ
この記事が気に入ったらサポートをしてみませんか?