見出し画像

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());
  }
}

念のためここでもう一度、コードを実行して通知が来ることを確認しておきます。

どのようなユースケースを想定しているか

ここまでくれば、あとはスプレッドシートの値を取得したりと割と何でもできると思います。
スプレッドシートに予定表を記入し、毎日定刻にメンバーへ連絡したりできそうです。
ちょっと作ってみたいと思います。

ということで作ってみました。
以下の記事で紹介しています。


いいなと思ったら応援しよう!