2018-03-09(金) [長年日記]
■ Google SpreadsheetとGASでSlackボットを作った
今日からモバマスでフェスなんだけど、フェスにかぎらず開催時刻が決まってるイベントはついつい忘れる(という話が複数のわさますメンバから出る。老いは万人に等しくやってくる)。ここ数回は手動でSlackにリマインダを設定していたんだけど*1、さすがに面倒なのでbotを作ることにした。指定した時刻に適当なメッセージを投稿してくれる簡素なヤツで良い。
こういう、以前ならサーバを建ててcronを回して……みたいな用途のプログラムは、いまならGoogle SpreadsheetとGoogle Apps Script (GAS)で充分になってて、いい時代に生きてるなぁって思うね。
というわけで、こんなシートを作成して*2:
| 2018/03/08 22:00 | 【これはテストです】アイプロ終了まで残り1時間です! |
| 2018/03/09 15:00 | ffdy |
| 2018/03/09 20:00 | ffdy |
スクリプトはこう:
function triggerEvent() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var now = new Date();
for (var i = 0; i <data.length; i++) {
var task = data[i];
var trigger = new Date(task[0]);
if (task[2] != 'done' && now >= trigger) {
notifySlack(task[1], '#general', 'Chihiro', ':chihiro:');
sheet.getRange(i+1, 2+1).setValue('done');
}
};
}
function notifySlack(message, channel, username, icon_emoji) {
var webhookUrl = 'https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX';
var payload = {
'text': message,
'channel': channel,
'username': username,
'icon_emoji': icon_emoji
};
var opts = {
"method": "post",
"contentType": "application/json",
"payload" : JSON.stringify(payload)
};
var res = UrlFetchApp.fetch(webhookUrl, opts);
return JSON.stringify(res);
}
なおカスタム絵文字で「:chihiro:」は定義済み。で、1分間隔*3で回すようにtriggerEvent関数を実行するようにトリガーを設定する。と、時間がきたらちひろ様からありがたいメッセージが投下される:

処理済みのエントリは3カラム目に「done」が記入される。めでたしめでたし。
スクリプトがバージョン管理できないのが厳しいなぁと思ったが、Chrome拡張でGitHubと同期してくれる「Google Apps Script Github アシスタント」というのがあるようだ。あとで使ってみよう。
2018-03-08(木) [長年日記]
■ デレステイベントLIVE Groove Vocal burst 「ツインテールの風」

それほど熱心にやったわけではないのだけど、今回から後半戦モードが追加になってスタミナ2倍消費できるようになったので、どうせスタドリは売るほどあるから全部投入したれ……という感じでプレイしてたらこんなに高いポジションに(笑)。ランキングのレンジは同じなのでもらえるものはいつもと同じだけど。上位報酬争ってる人たちにはたまらんと思うが、このクラスでうろちょろしてるおれみたいなプレイヤーにはいい改変であった。
「ツインテールの風」は、突出して難しいわけではないけど、頻繁にトラップがある感じで、おれのレベルだと一生フルコンできないタイプの曲だと思った。左右で違う動きが細かく入るのは苦手だなぁ。
THE IDOLM@STER CINDERELLA GIRLS MASTER SEASONS WINTER
日本コロムビア
¥1,472
2018-03-07(水) [長年日記]
■ 【ACL】川崎 2-2 メルボルン@等々力陸上競技場
リーグ優勝の翌シーズンは人気が出てチケットが取りづらくなることが予想されるため、今年はちゃんとシーズンチケットを買ったのだ。ホーム開幕戦は一般チケット売り切れで、この判断が正しかったことが証明されたわけだが、今年のシーチケにはACLの予選リーグも含まれている。で、このくっそ寒い平日の夜に行ってきたわけ。1万人も来てないのでは……と思ったが1.1万人も入っていた。けっこうすごい。さすがにメルボルンのサポーターは数えるほどしかいなかったのでほぼ川崎サポである。
さすがにACLに出てくるだけあってメルボルンは上手い感じで、適度な間隔をあけたコンパクトな陣形で大きなスペースがなく、こないだの湘南とはえらい違い。でもこういうチームが相手だとうちはパスを通しやすいので、けっこう攻めてる時間も多かった。小林が先制して、追いつかれて、登里がまた引き離して、これで決まりだと思っていたらなんと後半アディショナルタイムにPKを食らってしまった。とほほ。よくわからんPKだったけどそれほど荒れてなかったし、選手は納得してるんだろう。
それにしてもACLはここまでで0勝2敗1分。もうあとがない。残り海外2試合を含む3試合を全部勝たないと上がれないんじゃないか。厳しいなぁ。
試合中から気温がどんどん下がってきて、昨シーズンも含めて一番冷え込んだ(試合結果も)感じ。帰宅しながら、二言目には「寒い」って言ってた気がする。もちろん翌日は仕事である(しかも一日雨の予報)。