見出し画像

【GAS・Discord・コピペOK】時報bot作成手順

どうも、音猫。です
今回はウェブフックを利用したDiscord上で時間を知らせてくれる時報botを作っていきます!
コピペで作れます

必要なもの

  1. Googleアカウント

  2. Discordアカウント

作り方

まずはGASでコードを書いていきましょう!

まずは仕組みを理解しよう

(飛ばしてもいいですが、読むと理解が深まると思います)

上の前回の記事でも扱いましたが、GASにはトリガーという便利機能があり、それを利用することで定期的にスクリプトを実行できるんですよね。
しかし、トリガーでは「毎**分に実行」のようなものがないんですよね。
上の理想を半分に分けたように、「特定の日時」「**ベースのタイマー」があるのですが、これでは時報botを作成するのは厳しい…

そこで、私が考えてたどり着いた結論は、
「コードの中に『毎時**分に実行』を組み込んじゃおう!」
ですw

GASには現在の時刻を取得する関数が存在します

new Date()
こんな感じで時刻が表示されます

このままでは使いにくいので整形します
整形するときは下のコードでできます

var date = new Date();
//yyyyが年、MMが月、ddが日付、HHが時間、mmが分、ssが秒
date = Utilities.formatDate(date, "Asia/Tokyo", "yyyy/MM/dd HH:mm:ss");


整形していい感じに

そして、この現在時刻取得と「**ベースのタイマー」を組み合わせることで、「毎**分に実行」が実現できます
[簡単な説明]
「現在時刻取得→整形して分だけ取得→if文で『もし**分だったら処理を返す』というようなコードを書く」
このようにすることで擬似的に再現できますね!

御託はここまで。実際に書きましょう!

手順

GASを開いて「新しいプロジェクト」をクリック
名前は適当に決めちゃってください
「コード.gs」に下のコードを貼り付けましょう!

var date = new Date();
date = Utilities.formatDate(date, "Asia/Tokyo", "yyyy/MM/dd HH:mm:ss");
var issend = new Date();
issend = Utilities.formatDate(issend, "Asia/Tokyo", "mm");
console.log(date)
console.log(issend)
var str = `**${date}**をお知らせします!` // Discordに送信する時報メッセージ
function time() {
   const discordWebHookURL = "この中にwebhookURL";

  // 投稿するチャット内容と設定
  const message = {
    "content": str, // チャット本文
    "tts": false  // ロボットによる読み上げ機能を無効化
  }

  const param = {
    "method": "POST",
    "headers": { 'Content-type': "application/json" },
    "payload": JSON.stringify(message)
  }
// もし**分だったら処理を実行する
if (issend == "00")UrlFetchApp.fetch(discordWebHookURL, param);
if (issend == "15")UrlFetchApp.fetch(discordWebHookURL, param);
if (issend == "30")UrlFetchApp.fetch(discordWebHookURL, param);
if (issend == "45")UrlFetchApp.fetch(discordWebHookURL, param);
console.log("OK")
}

貼り付けたら下の記事を参考にwebhookURLを取得してきて、
const discordWebHookURL = "この中にwebhookURL";
の指定範囲内に貼り付けてください
貼り付けたら保存して実行、そしていつもの承認をすませばこれでほぼ準備完了です

あとはトリガーです
「分ベースのタイマー」→「1分おき」
でOKです

これで毎時15分に時報メッセージを送信してくれるスクリプトが完成しました!
時間を追加したいときは下のコードを追加すればいいと思います
(ただし、*時1分など、一桁のときは"01"と表記する必要がある)

// 分単位で"時間"の中に入力
if (issend == "時間")UrlFetchApp.fetch(discordWebHookURL, param);

実行結果

15分毎に送信されてます

実際に使っている自鯖はコチラ↓
https://discord.gg/y8YZmq5PYy

この記事が気に入ったらサポートをしてみませんか?