DENDIN

- dendin -

【FF14】GASとDISCORDの連携によるロット権BOT【DISCORD】

はやみんな使っているといっても過言ではないコミュニケーションツールDISCORD
経験のない方でも簡単にBOTを作成することができるので、カスタマイズも容易です!

と、いうことなので、今回はGoogleスプレッドシートとDISCORDをGoogle Apps Scriptで連携し、毎週決まった時間に強化素材のロット権所持者を教えてくれるBOTを作成しましょう!

 

f:id:imoprev:20180528223501j:plain完成イメージ図

 

 

事前準備

以下のアプリケーションおよびアカウントは必須です。

 

スプレッドシート

スプレッドシートの準備

まず、強化素材のロットを管理するスプレッドシートを作成します。
といっても1から作るのは面倒なので、

配布用 - Google スプレッドシート

を使ってください。
下部のシート名「【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)編

スプレッドシートと連携したプロジェクトの作成

スプレッドシートのメニューから
ツール⇒スクリプトエディタを選択

f:id:imoprev:20180528225512p:plain

新規のプロジェクトが開かれるので、プロジェクト名を適当につける。
コード記入欄に以下のコードを入力します。

太字部分はみなさんで入力する必要があるので注意!
おそらくそれ以外はそのままでいけるはず。
わかるひとは必要に応じてカスタマイズしてください。

 

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());

 

 

 以上で必要な操作は多分終了

 

動作テスト編

実際にうまく動くかをテストします。

f:id:imoprev:20180528232340p:plain

メニューの実行から、
関数を実行⇒zeroshiki,zeroshiki2の両方でテスト

無事ディスコードの指定したチャンネルに発言されれば成功
成功しなかった場合はどこかがまちがっているかこの記事が間違っているのでコメントください。

 

毎週自動投稿させる

毎週決まった時間に投稿させるには、GAS側での設定が必要です。
メニューより時計マークをクリック

f:id:imoprev:20180528232628p:plain

 

立ち上がったウィンドウ内で、トリガーを追加し、以下のような設定にする

f:id:imoprev:20180528232721p:plain

違う曜日・時間がいい!って人は適当に変えてください。

 

 

以上、おそらくこれでうまくいくと思います。
よき固定ライフをお過ごしください。

 

 

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。
Copyright (C) 2010 - 2017 SQUARE ENIX CO., LTD. All Rights Reserved.