Discord Bot

Discord Bot

 スプレッドシートの変更内容をDiscordへ通知するBotを制作しました。

目次


Ⅰ 動作

Ⅱ 制作過程

Ⅲ 実際のコード

Ⅰ 動作


 スプレッドシートのセルの値を変更してEnterを押と、行った変更がDiscordに通知されます。

Ⅱ 制作過程


制作過程をブログにまとめていたので紹介します。

Ⅲ 実際のコード


function sendFanction(e) {
  // アクティブなスプレッドシートを取得
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName('1月');


  // アクティブなシートが "1月" でない場合は処理を中止
  if (spreadsheet.getActiveSheet().getName() !== sheet.getName()) {
    console.log('このシートでは動作しません。');
    return;
  }

  // 定義
  const range = e.range;
  const editedValue = range.getValue();
  const editedRow = range.getRow();
  const editedColumn = range.getColumn();
  const rangeDate = sheet.getRange(1, editedColumn);
  const rangeName = sheet.getRange(editedRow, 1);
  const dateValue = rangeDate.getValue();
  const nameValue = rangeName.getValue();
  const formattedDate = Utilities.formatDate(new Date(dateValue), "JST", "MM/dd");

  // Discord Webhook URL
  const discordWebhookUrl = 'Your_Discord_Webhook'; // Discord WebhookのURLを入力

  // Discordに送信するメッセージの構築
  let messages;
  var headerRowValues = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  var columnIndex = headerRowValues.indexOf("コメント") + 1;

  if (editedRow <= 1) {
    return
  }
  
  //コメントを変更した場合
  if (editedColumn === columnIndex) { // M列の列番号は13
    messages = [
      { content: `${editedValue}` }
    ];
  }
  //出欠を変更したい場合
  else {
    const oldValue = e.oldValue || ""; // oldValue がない場合は空文字列として扱う
    messages = [
      { content: `${nameValue}です。` },
      { content: `${formattedDate} ${oldValue}→${editedValue}に変更` }
    ];
  }

  // Discordにメッセージを送信
  sendToDiscord(discordWebhookUrl, messages);
}

function sendToDiscord(webhookUrl, messages) {
  for (const message of messages) {
    const payload = {
      content: message.content
    };

    const params = {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify(payload)
    };

    UrlFetchApp.fetch(webhookUrl, params);
  }
}

4行目の

const sheet = spreadsheet.getSheetByName('1月');

の「1月」には、使用するシート名を入力してください。

また、25行目の

const discordWebhookUrl = 'Your_Discord_Webhook'; // Discord WebhookのURLを入力

の「Your_Discord_Webhook」には、使用するDiscordのWebhookを入力してください。Webhookの取得方法は、『Ⅱ 制作過程』のブログにまとめてあります。

加えて、46~47行目の

      { content: `${nameValue}です。` },
      { content: `${formattedDate} ${oldValue}→${editedValue}に変更` }

“で囲まれている部分を変更すると、通知内容が変更されます。

1 Comment

Comments are closed