のあの

のあの日常ブログ

ブキチbotの拡張

Splatoon2の話題です

大会に出ることになり、Discordを使って通話をしながら練習をしています。

ちょっと寂しかったのでbotを作成しました。
毎朝その日のリーグマッチのガチエリアのスケジュールを通知してくれるbotです。

f:id:nor24:20180821010437p:plain

その名も ブキチモーニングコールbot

見ての通り前後の文が定型になっているのでもう少しバリエーションを増やしたいと思います。

GASとdiscordのwebhookを使っています。

discordのメッセージを受信して処理する方法が不明なので、
GASから定期的にメッセージを送る処理しかできていません。

spla2.yuu26.com

エリアの情報は@m_on_yuさんのAPIを利用させて頂きました。

  var v, send_message;
  for(var i = 0; i < text.length; i++) {
    v = text[i];
    Logger.log(v.rule + " : " + v.maps[0] + v.maps[1]);
  } 
  discord("今日のガチエリアの情報でし");
  for(var i = 0; i < text.length; i++) {
    v = text[i];
    if(v.rule == "ガチエリア") {
      send_message = v.start.substr(11, 2) + ":00~" + v.end.substr(11, 2) + ":00 : " +v.maps[0] +", "+ v.maps[1]
      Logger.log(send_message);
      discord(send_message);
    }
  }
  discord("頑張って練習するでし");

discord関数を呼ぶと引数の文字列が通知されます。
このように最初と最後に定型文をつけて、ガチエリア情報を通知しています。

  const message = ["あいうえお",
               "かきくけこ",
               "さしすせそ"];
  discord(message [Math.floor(Math.random() * message .length)]);

これで配列の中の要素を一つランダムで取り出すことができます

文字だけだと寂しかったので絵文字も送るようにしました。 :bukichi_a::bukichi_b という絵文字を追加してますが、ただ単に送るだけではうまく表示されません。

f:id:nor24:20180821005448p:plain

nichiafi.blogspot.com

どうやら絵文字にIDがある様子。

GASを使わずにID確認用に手元で以下のプログラムを動かして確認

import discord 
client = discord.Client() 

@client.event
async def on_ready():
    print('ログインしました')

@client.event
async def on_message(message):
    print("メッセージ:", message.content)

client.run(:TOKEN:)
メッセージ: <:bukichi_a: "ID">
メッセージ: <:bukichi_b: "ID">

これで絵文字のIDがわかりました
(公開していい情報かわからなかったので一応伏せてあります。)

これで準備が整ったので、好きな文章を入力!
まとめると以下のようになりました

  var v, send_message;
  for(var i = 0; i < text.length; i++) {
    v = text[i];
    Logger.log(v.rule + " : " + v.maps[0] + v.maps[1]);
  }
  const first_message = ["今日のガチエリアの情報でし",
                       "ブキチのモーニングコールでし<:bukichi_a:"ID">",
                       "まだ寝てるでしか??起きるでし!!",
                       "夜更かしはだめでしよ",
                       "大会まで2週間をきったでし<:bukichi_b:"ID">"];
  discord(first_message[Math.floor(Math.random() * first_message.length)]);
  
  for(var i = 0; i < text.length; i++) {
    v = text[i];
    if(v.rule == "ガチエリア") {
      send_message = v.start.substr(11, 2) + ":00~" + v.end.substr(11, 2) + ":00 : " +v.maps[0] +", "+ v.maps[1]
      Logger.log(send_message);
      discord(send_message);
    }
  }
  const end_message = ["頑張って練習するでし",
                       "今日も一日がんばるぞい!",
                       "でしでしでしでしでしでしでしでし",
                       "<:bukichi_a:"ID">ブ<:bukichi_a:"ID">キ<:bukichi_a:"ID">チ<:bukichi_a:"ID">:heartbeat:",
                       "体調管理にも気を付けるでし<:bukichi_b:"ID">"];
  discord(end_message[Math.floor(Math.random() * end_message.length)]);

:heartbeat: はそのままで表示できました。

完成!!!

f:id:nor24:20180821010317p:plain