# GASによるDiscord匿名投稿のチュートリアル 匿名発言周り毎回書き直してるから、一回ちゃんと忘備録として残す 質問は@tyau_nen_まで ## 0.要件 * Google Formから匿名発言ができる * (任意) 投稿先チャンネルをいくつかの中から指定できる * (任意) アイコンURLを指定できる * (任意) 投稿者名を指定できる ## 1. Webhook URLを取得する Discord上の好きなサーバーに匿名投稿したいチャンネルを作成して、webhookURLを取得する 取得の仕方がよくわかんなかったらググる ## 2. Google Formから、投稿フォームを作成する ↓のURLから、空白のフォームを新規作成 https://docs.google.com/forms/u/0/ ![](https://i.imgur.com/0jYYKTf.jpg) こんな感じにする **フォームの順番を間違えないように注意すること!** ![](https://i.imgur.com/ydwLPVB.jpg) ## 3. プログラムを書く 右上のメニューから、スクリプトエディタを開く ![](https://i.imgur.com/QlxkSRO.jpg) エディタが出てくるので、以下を貼り付ける **ただし、オプション部分は自分向きに書き換えること** webhookURLはいくつでも設定できるが、かならずフォームの選択肢一覧と名前・数を揃える事 ```javascript /*------------------------------------------------------------------------------ * オプション *------------------------------------------------------------------------------*/ // フォームの選択肢とURLの読み替え情報 // "Form上の投稿先の選択肢名":"webhookURL" const WEBHOOK_DIC = { "チャンネル1":"ここにwebhookURL(1)", "チャンネル2":"ここにwebhookURL(2)", "チャンネル3":"ここにwebhookURL(3)" } // 投稿者名を省略した時の投稿者名 const DEFAULT_SENDER_NAME = '匿名発言くん'; // デフォルトアイコンURL // URLの代わりにnullをセットすると、Discordのデフォルトアイコンを使用する const DEFAULT_ICON = null; // is_embed // trueならembedで投稿、falseならcontents(普通のテキスト)で投稿 const IS_EMBED = false; /*------------------------------------------------------------------------------ * 処理 *------------------------------------------------------------------------------*/ // formの送信ボタンを押した時にこの関数を起動する function onSubmit(e) { // formから投稿された各種情報の取得 var itemResponses = e.response.getItemResponses(); var send_to = itemResponses[0].getResponse(); var sender_name = itemResponses[1].getResponse(); var sender_name = bvl(sender_name, DEFAULT_SENDER_NAME); var sender_icon_url = itemResponses[2].getResponse(); var sender_icon_url = bvl(sender_icon_url, DEFAULT_ICON); var send_message = itemResponses[3].getResponse(); // テキスト情報の組立 // 公式ドキュメントはここ↓ // https://discord.com/developers/docs/resources/webhook var message = {}; message['tts'] = false; message['username'] = sender_name; if(sender_icon_url !== null){ message['avatar_url'] = sender_icon_url; } if(IS_EMBED){ message['embeds'] = [{ "description": send_message, "color": 11971414 }]; }else{ message['content'] = send_message; } // discordに渡す情報の組立 var options = { "method": "post", "headers": { "Content-Type": "application/json", }, "payload": JSON.stringify(message) }; // ■用意した情報を、Discord webhookに渡す(POSTする) UrlFetchApp.fetch(WEBHOOK_DIC[send_to], options); }; // bvl // nvlの空白文字版 val1が空文字の場合、val2を返す function bvl(val1, val2){ return (val1 == '')?val2:val1; } ``` 貼り付けたらこんな感じになるので、ctrl+sで保存する ![](https://i.imgur.com/KrYKU0K.jpg) ## 4. トリガーの設定 今保存したのが、「フォームの最後の回答をDiscordに投稿するプログラム」 次に、このプログラムがいつ起動するかを指定する 左のメニューの時計のボタンを押してトリガー一覧ページを開いたあと、 右下の「トリガーの追加」からトリガーを追加する ![](https://i.imgur.com/2mtMJaH.jpg) **『イベントの種類を選択』を「フォーム送信時」にすること** ![](https://i.imgur.com/eQl3Ud9.jpg) ## 5. 試してみる これでセットアップは完了 フォームから投稿して、discordに投稿されるかテストしてみる だめなら@tyau_nen_を呼びつけて叱る ![](https://i.imgur.com/gdBZAE9.png)