質問: ### 前提・実現したいこと GASとDiscord.jsを使い、GoogleスプレッドシートをDBとした Discordの検索Botを作成したいと思っています。 Discordの任意のチャンネルへ、検索ワードを入力して送信した際に、 スプレッドシート内を検索ワードで検索し、抽出された該当のデータをJSONで取得し 結果をBotに表示させたいです。 Webhookにて、GASからDiscordへの投稿の方法はわかるのですが、 botのメッセージの送信をトリガとしてGASへリクエストする方法が わかりません。 API等の具体的な使用法はあるのでしょうか。 何卒ご教授お願い致します。
回答: 送信をトリガーにするということは、BotがMessageを送信してから処理をするということでしょうか。 まず、リクエスト用のパッケージを用意します。 ``` const fetch = require("node-fetch"); ``` (事前に`node-fetch`をインストールしてください) そのあと、おそらくですがこのようなことをしたいのだと思われます。 とりあえずデータが(サンプルデータ) | 単語 | 答え | | --- | --- | | 富士山の高さ | 3776m | | ウンパス君の性別 | わかりません | みたいに入っているとしたら、 `コード.gs` ``` function doGet(e) { const p = e.parameter; let sheet = SpreadsheetApp.openByUrl("スプレッドシートのURL"); sheet = sheet.getActiveSheet().getRange("A1:A10"/*10は単語の数に置き換える*/).getValues()0].find(x => x == p.word); let res; if (!sheet) { res = JSON.stringify({ code: 404, message: "Not found" }) } else { res = JSON.stringify({ code: 200, message: sheet }) } const response = ContentService.createTextOutput(); response.setMimeType(ContentService.MimeType.JSON); response.setContent(res); return response; } ``` としてください(2箇所置き換える箇所があります) そのあとに、ウェブアプリとしてデプロイしてください (新しいデプロイ→左の歯車っぽいとこ→ウェブアプリ) ![イメージ説明 (アクセスできるユーザー→全員) としてデプロイし、URLを取得した後に `index.js` ``` const prefix = "!"; client.on('message', async message => { if (!message.content.startsWith(prefix)) return; const args = message.content .slice(prefix.length) .trim() .split(/ +/g); const command = args.shift().toLowerCase(); if (command === "search") { const searchword = args.join(" "); const response = await fetch("さっき取得したURL?word=" + searchword); const json = await response.json(); if (json.code === 404) return message.reply("取得できませんでした"); message.channel.send(json.message) } }); ``` これでどうでしょうか。