hartmannのゲームあれこれ

適当にやってるゲームのあれこれを偶に書きます

WoT CWE管理シート自動化の旅々 14.『Discordbotによる戦闘予定通知(仮)』

ts-hartmann.hatenablog.com

これの続き

お約束1

 第2クールが始まってからのお楽しみ

やりたいこと

 第3話にてマッチング情報を取得したのだから、それを画像のような感じでDiscordbotによって通知したい。 f:id:TS_hartmann:20210203114330p:plain

botを使った戦闘予定の通知

手順1. Discordbotの準備

 戦闘告知に関してはglitchを経由して構築します。  下のリンクを参考にしてbotを構築してください。

note.com

 glitchが更新されてちょっと手順は異なりますが、大体上の手順に何とかなるはずです。

手順2. GAS側の記述
function PostDatatoGlitch() {
  
  var spreadSheet = generalid;  
  var sheetName = "POSTDATA(Discordbot)";
  
  //A列プロヴィンス名・B列開始時間・C列敵クラン名・D列開始陣地・E列マップ名・F列戦線名・G列指揮官名・J列GMリンク・K列タクティクスリンク
  var cell = spreadSheet.getSheetByName(sheetName).getRange("A2:L100").getValues();
  var result = cell.filter(function(value){return (value[1] !== '')}); //空白要素の配列を削除
  var count = result.length; //resultの配列数を調べる
  var today = Utilities.formatDate(new Date(), 'Asia/Kuwait', 'M/dd');//今日の日付を取得※GMの区切りが06:00の為、-6時間の時差があるクウェートの日付を取っています。
  
  
  //botに送る文章の設定※Discordでの文字装飾もここで設定しています。
  var ary = [];
  for (var i = 0; i < count; i++) {
  var link1 = "> GM link  :  <" + result[i][9] + ">"; //GM Link
  var link2 = "> Tactics link  :  <" + result[i][10] + ">"; //Tactics Link
  var data1 = "```Markdown" + String.fromCharCode(10) + "#  " + today + "  " + result[i][1] +"(UTC+9) battle start  ```"; //Battle start time
  var start = "                                         :point_down: "; //空白半角40文字分
  var data2 = "> _**Province name  :  __" + result[i][0] +"__**_"; //Province name
  var data3 = "> **Map name  :  __" + result[i][4] + "__**"; //Map name
  var data4 = "__*#" + result[i][3] + "*__"; //Start side name
  var data5 = "*vs **" + result[i][2] + "***"; //Enemy clan name
  var data6 = "__" + result[i][6] + "指揮__"; //Commander name
  var data7 = "# " + result[i][5]; //Front name
  var end = " --------------------";
  var test = "> **Province name**"
  var data8 = "> _**Team   :  __" + result[i][11] + "__**_team"; //Province name
  
  
  
  ary.push([data1 + start + String.fromCharCode(10) + data2 + "    " + data7 + "     " + data8 + String.fromCharCode(10) + link1 + String.fromCharCode(10) + data3 + "    " + data4 + "    " + data5 + "    " + data6 + "    " +  String.fromCharCode(10) + link2 +  String.fromCharCode(10) + end]);
  }

  
  var GLITCH_URL = glitchurl;
  
  //result.unshift(today+'の戦闘予定')
  

    
    var json = {
      'type':'announce',
      'debug':'false',
      'content': JSON.stringify(ary)
    };
   
    sendGlitch(GLITCH_URL, json);
  
  
  Logger.log(cell);
}
手順3. スプレッドシート側の記述

 POSTDATA(Discordbot)のシートを作成します。  そしてそれぞれのセルに以下のように記述してください。

1.A2セル=QUERY('スクレイピング4(戦)'!$A$2:$N$100,"select A,D,H,I,K,L where H != '404 not found' and N = '○'")

2.G2セル=IFERROR(VLOOKUP(A2,'Battle Plans(version of CWE)'!$H$6:$J$104,3,FALSE))

3.H2セル=IFERROR(VLOOKUP(E2,'Province参照'!$K:$L,2,FALSE))

4.I2セル=IFERROR(VLOOKUP(A2,'戦闘予定(CWE用)'!$H$11:$J$111,3,FALSE))

5.J2セル=IFERROR(VLOOKUP(A2,'戦闘予定(CWE用)'!$H$11:$J$111,3,FALSE))

6.K2セル=IFERROR(VLOOKUP(IF(F2="基本",CONCATENATE(VLOOKUP(A2,'プロヴィンス参照'!$E$107:$F$631,2,FALSE),"(10vs10)"),CONCATENATE(VLOOKUP(A2,'プロヴィンス参照'!$E$107:$F$631,2,FALSE),"(15vs15)")),'タクティクスのリンク'!$C$6:$X$84,HLOOKUP(I2,'タクティクスのリンク'!$C$4:$X$5,2,FALSE),FALSE))

7.L2セル=IFERROR(VLOOKUP(A2,'Battle Plans(version of CWE)'!$H$6:$K$104,4,FALSE))

お約束2

最後に

 戦闘告知botに関しては一番面倒くさい部分になりますので正直導入するには多大な苦労を必要とします。  ただ一度導入すればあとは楽になるので導入して損はないと思います。

 これでこのシリーズはようやく完結を迎えました。先日スプレッドシート自体を公開しましたので、このシリーズで書かれていることはほとんどがすっ飛ばせると思います。今までお付き合いいただきありがとうございました!!