Discordのウェブフックでスプレッドシートを利用したbotを作ろう
最近気づいたこととして、Discordのbotがとても簡単に作成できるようになりました。
ゲーム内の簡単なスケジュール管理とかは調整さんとかよりも、これでいいんじゃないかなぁ
Discord側の設定
チャンネルの設定を開く

連携サービスからウェブフックを作成

Botの名前とウェブフックURLをコピー
ウェブフックURLは投稿権限を持っていますので他人に教えないようにしましょう。

Discord側は終了です。
スプレッドシートの設定
BotのウェブフックURLをA1セルに入力しておく。
あくまで確認用の措置です、最終的にはスクリプト内に保存します。

拡張機能からApps Scriptを選択

コード.gsの内容をすべて削除して以下のコードを貼り付け
function sendDiscordMessage() {
// 1. アクティブなスプレッドシートから情報を取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const spreadsheetUrl = ss.getUrl();
const WEBHOOK_URL = sheet.getRange(1, 1).getValue();
console.log(WEBHOOK_URL);
message = spreadsheetUrl
// 2. Discordに送信するデータ(JSON形式)の作成
const payload = {
"content": message
};
// 3. HTTPリクエストのオプション設定
const options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload),
"muteHttpExceptions": true
};
// 4. Discordへデータを送信
try {
const response = UrlFetchApp.fetch(WEBHOOK_URL, options);
const responseCode = response.getResponseCode();
if (responseCode === 200 || responseCode === 204) {
console.log("送信成功:\n" + message);
} else {
console.error("送信失敗。ステータスコード: " + responseCode + " レスポンス: " + response.getContentText());
}
} catch (e) {
console.error("エラーが発生しました: " + e.toString());
}
}保存を忘れずに。

保存すると実行が選択可能。

初回実行時は権限の承認関係が出てきますので、承認してあげてください。

左下の詳細を選択。

展開され「無題のプロジェクト(安全ではないページ)に移動」を選択。

実行結果が表示され、Discordに通知が入っているはずです。


無事にDiscordに入力されました。
A1セルのURLを削除して、コード内に移します。
以下のコードをコピーして1行目の” ”内にウェブフックURLを貼り付けます。
const WEBHOOK_URL="ウェブフックURLをコピー"
function sendDiscordMessage() {
// 1. アクティブなスプレッドシートから情報を取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const spreadsheetUrl = ss.getUrl();
//const WEBHOOK_URL = sheet.getRange(1, 1).getValue();
console.log(WEBHOOK_URL);
message = spreadsheetUrl
// 2. Discordに送信するデータ(JSON形式)の作成
const payload = {
"content": message
};
// 3. HTTPリクエストのオプション設定
const options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload),
"muteHttpExceptions": true
};
// 4. Discordへデータを送信
try {
const response = UrlFetchApp.fetch(WEBHOOK_URL, options);
const responseCode = response.getResponseCode();
if (responseCode === 200 || responseCode === 204) {
console.log("送信成功:\n" + message);
} else {
console.error("送信失敗。ステータスコード: " + responseCode + " レスポンス: " + response.getContentText());
}
} catch (e) {
console.error("エラーが発生しました: " + e.toString());
}
}
念のためここでもう一度、コードを実行して通知が来ることを確認しておきます。
どのようなユースケースを想定しているか
ここまでくれば、あとはスプレッドシートの値を取得したりと割と何でもできると思います。
スプレッドシートに予定表を記入し、毎日定刻にメンバーへ連絡したりできそうです。
ちょっと作ってみたいと思います。
ということで作ってみました。
以下の記事で紹介しています。
