【FF14】GASとDISCORDの連携によるロット権BOT【DISCORD】
もはやみんな使っているといっても過言ではないコミュニケーションツールDISCORD
経験のない方でも簡単にBOTを作成することができるので、カスタマイズも容易です!
と、いうことなので、今回はGoogleのスプレッドシートとDISCORDをGoogle Apps Scriptで連携し、毎週決まった時間に強化素材のロット権所持者を教えてくれるBOTを作成しましょう!
完成イメージ図
事前準備
以下のアプリケーションおよびアカウントは必須です。
- DISCORD
- DISCORD内のサーバ(管理者権限があること)
- Google スプレッドシート(Googleアカウントがあれば誰でも使える)
- Google Apps Script(同上)
スプレッドシート編
スプレッドシートの準備
まず、強化素材のロットを管理するスプレッドシートを作成します。
といっても1から作るのは面倒なので、
を使ってください。
下部のシート名「【4.2~】シグマ」を右クリックし、「別のワークブックにコピー」
もしくはすべてのセルを選択し、おのおので作ってもらった新規スプレッドシートにコピー&ペーストで貼り付けても多分大丈夫です。
スプレッドシートの使い方
使い方というほどのものはありませんが、B7~B14には固定メンバーのお名前を入力して、獲得したアイテム数を入れるだけ。べつに名前は入れなくてもいいです誰が誰かわかれば。
各強化素材において、固定内で最も所持数が少ない人(ロット権のあるひと)が背景黄色になります。複数の場合は複数人がなります。
毎週の活動後、獲得したアイテム数を更新するだけ。
Q6:Z14、C15:G15、E18:I28あたりは触らないでください。
DISCORD編
DISCORDの準備
おそらくアカウントとサーバは既にお持ちと思うので割愛。
管理者でBOTを追加したいサーバを
右クリック⇒サーバ設定⇒Webhooks
Webhookを作成をクリックし、名前と投稿先チャンネルを選択
WebhookURLをコピーし、ブラウザに入力
token="xxxxxxxxxx"のx部分をメモなりコピー
WebhookのURL自体もあとで使うので、メモなりコピー
保存すれば、ひとまずBOTの作成は完了
Google Apps Script(GAS)編
スプレッドシートと連携したプロジェクトの作成
スプレッドシートのメニューから
ツール⇒スクリプトエディタを選択
新規のプロジェクトが開かれるので、プロジェクト名を適当につける。
コード記入欄に以下のコードを入力します。
太字部分はみなさんで入力する必要があるので注意!
おそらくそれ以外はそのままでいけるはず。
わかるひとは必要に応じてカスタマイズしてください。
function zeroshiki(){ var ss = SpreadsheetApp.openByUrl('スプレッドシートのURL'); var sheet = ss.getSheets()[1]; var attendance1 = sheet.getSheetValues(21,5,8,1); const message1= ("2層 トームストーンのロット権所持者は " + attendance1 + " です。"); discord(message1); var attendance2 = sheet.getSheetValues(21,6,8,1); const message2= ("2層 硬化薬のロット権所持者は " + attendance2 + " です。"); discord(message2); var attendance3 = sheet.getSheetValues(21,7,8,1); const message3= ("3層 強化薬のロット権所持者は " + attendance3 + " です。"); discord(message3); var attendance4 = sheet.getSheetValues(21,8,8,1); const message4= ("3層 強化繊維のロット権所持者は " + attendance4 + " です。"); discord(message4); var attendance5 = sheet.getSheetValues(21,9,8,1); const message5= ("4層 武器箱のロット権所持者は " + attendance5 + " です。"); discord(message5); } function zeroshiki2(){ var ss = SpreadsheetApp.openByUrl('スプレッドシートのURL'); var sheet = ss.getSheets()[1]; var attendance1 = sheet.getSheetValues(1,1,1,1); const message1= ("獲得アイテム表はこちらをご参照ください " + attendance1 ); discord(message1); } function discord(message) { // 各所必要な項目をセットします const url = 'WEBHOOKSのURLを貼り付け';//discordのwebhooksのurl const token = 'WEBHOOKSのtokenを貼り付け';//discordのwebhooksのトークン const channel = '#送信したいチャンネル';//送信したいチャンネル const text = message; const username = '送信させたいユーザ名';//送信させたいユーザー名 const parse = 'full'; const method = 'post'; const payload = { 'token' : token, 'channel' : channel, "content" : text, 'username' : username, 'parse' : parse, }; const params = { 'method' : method, 'payload' : payload, 'muteHttpExceptions': true }; response = UrlFetchApp.fetch(url, params); } //Logger.log(response.getContentText());
以上で必要な操作は多分終了
動作テスト編
実際にうまく動くかをテストします。
メニューの実行から、
関数を実行⇒zeroshiki,zeroshiki2の両方でテスト
無事ディスコードの指定したチャンネルに発言されれば成功
成功しなかった場合はどこかがまちがっているかこの記事が間違っているのでコメントください。
毎週自動投稿させる
毎週決まった時間に投稿させるには、GAS側での設定が必要です。
メニューより時計マークをクリック
立ち上がったウィンドウ内で、トリガーを追加し、以下のような設定にする
違う曜日・時間がいい!って人は適当に変えてください。
以上、おそらくこれでうまくいくと思います。
よき固定ライフをお過ごしください。