スプレッドシートの変更内容を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}に変更` }
“で囲まれている部分を変更すると、通知内容が変更されます。
Pingback: 卒業制作 – Idea Markets