Discordで、Googleスプレッドシートを利用した「通知Bot」を作るkunai_S.N.
今日話すこと
まえがき
『世界史べーた(仮)』では、毎週の動画やブログ投稿のタスクが各メンバーに割り振られています。それぞれのタスクの締め切りや予定のアナウンスを「Discord」サーバー上で自動的に送信したい。
ということで、その仕組みを作ったので大まかな方向性を記したいと思います。今回は、Googleドライブ上のスプレッドシートでタスクを管理している人に有用な情報だと思います。
ダイスボットを作るわけでもなく、ただ一定のアルゴリズムに従ってメッセージを送信するだけなので、Webサーバーを設置する必要はありませんでした。
必要なもの
・GoogleアカウントとGoogleスプレッドシートで管理された「タスク管理表」
・DiscordアカウントとDiscordサーバー(ウェブフックを作成できる権限が必要)
・やる気
「Discord」にメッセージを送る
Discord上での作業
まず、Discord上でウェブフックを生成します。
「ウェブフックを作成」を押した後の画面で、「ウェブフックURLをコピー」をクリックして、どこかにメモしておきましょう。
Googleスプレッドシートでの作業
タスクを管理しているスプレッドシートを開き、メニューから拡張機能の「Apps Script」を開きましょう。
すると、この画面が出ると思います。
ここに、こんな感じで文字を書きます。
const WEBHOOK_URL = ‘[生成したウェブフックのURL]’;
const payload = {
username: ‘[botの名前]’,
content: ‘[送るメッセージ]’,
}
UrlFetchApp.fetch(WEBHOOK_URL, {
method: ‘post’,
contentType: ‘application/json’,
payload: JSON.stringify(payload),
});
[(文字)] と書いてあるところは、それぞれの好きなものだったり、入れるべきものと書き換えます。
( [ ] も消して書きます。)
[生成したウェブフックのURL] では、前に作った「ウェブフックURLをコピー」でコピーしたものをそのまま書きます。
[botの名前]は、botの名前を書いておきます。
[送るメッセージ]は、送りたいメッセージを書きます。
あと、よくわからないのですが、多分コピペするとシングルクォーテーションが変になるかもしれないので、その時は打ち直しておいてください。
これを、「保存」して「実行」すると、Discordにメッセージが送信されます。
ただ最初だけ、実行の時に権限の確認がされるので、
・「権限を確認」をクリック
・自分のアカウントを選択
・左下の「詳細」をクリック
・左下の「[プロジェクト名](安全ではないページ)に移動」をクリック
・「許可」をクリック
の順に進んでいけば、実行できます。
ここまで来れば、仕組みの領域からプログラミングの範囲になってきます。
この「Apps Script」では、「JavaScript」を使ってプログラミングができます。
具体的には、前に書いた[送るメッセージ]を、事前にまとめた変数に設定して、そのまとめる作業を先ほど書いた文字の上にずらずら書くだけです。
JavaScriptの話
今回のことで初めて「JavaScript」を触ったのですが、意外と難しくなく書くことができました。
(人によりますけど、SQLの方が難しいと思いました。)
ここで「JavaScript」の書き方をずらずら書き連ねることは、やめようと思います。(他サイトに有用な解説サイトが山ほどあるので……)今回は、私が書いていて躓いた話を書いていきます。
二次元配列
普通に二次元配列作ろうと、「let[][] arrays = new let[3][3]」のように書いたら、「だめです」って怒られるんですよね。そもそも、書き方が違うっていうのもそうなのですが、「JavaScript」って二次元配列をさっくり初期化できないみたいです。二次元配列からデータを取り出すときは「arrays[0][1]」って書くのにです。
日付
「new Date()」
これで、 ( ) の中に何も入れなければ、実行した時の年月日が取得されると思います。(ちなみに、データを生成しているだけなので、何かしらの変数か定数に入れてあげてください。)
ただ、少しめんどくさい点として、年と日にちは問題ないのに、月だけ1少ないのです。例えば、2022年8月15日であれば、「2022」年「7」月「15」日という数値になります。つまり、1月であれば、「0」となります。
メンション付きメッセージ
ディスコードでメッセージを送るとき、メンションをつけたいときがあると思います。この時、ディスコード上の「@ooo#xxxx」という文字列で送信しても、メンションがつきません。
ウェブフックを通してメッセージを送るときは、「Discord」上で
・ユーザー設定(多分、左下の歯車のマーク)
・アプリ設定の詳細設定をクリック
・開発者モードをオン
という作業をします。
そして、メンションしたい人を右クリックすると一番下に「IDをコピー」が表示されるのでクリックすると、IDがコピーされます。
この数字を「<@」と「>」で挟んであげると、メンションをつけることができます。
(ex. <@0123456789> )
あとがき
この記事を見て、私がパソコンに強い人だと勘違いした人がいるかもしれませんが、この記事を書いた人はプログラムとかで飯を食っているわけではないので、この記事だけではなく他の記事の類も参考にすると良いでしょう。
この記事をシェアする
コメント