feature image

2022年8月31日 | ブログ記事

草を生やす

この記事は夏のブログリレー22日目の記事です。
こんにちは。mehm8128です。SysAd班に入ってます。アルゴリズム班にも入ってます。多分CTF班にも入ってます。
今回は草を生やした話をします。

草を生やす

皆さんは普段どのくらい草を生やしていますか?
僕はこのくらいです。
-
Githubではdefault branchへのcommitやpull request・issueの作成などで数に応じて毎日草が生えたり生えなかったりします。
僕はこの夏休みはできるだけ毎日草を生やすようにしています。
すごい先輩だと夏休み以外もほぼ毎日草が生えてたりしますね。

さて今回、この草を部内SNSであるtraQでも生やしたいと考えました。
そこで、毎日の投稿数に応じて草を生やしてくれる機能を自分のbotに追加しました。

grass_bot-3
botにメンションを飛ばしてスペース区切りで「草」と入れると数秒後に自分の草を生やしてくれます。
また、オプションとしてuser:{ユーザー名},since:yyyy-MM-dd,until:yyyy-MM-ddを指定できます(sinceとuntilはどちらか一方のみ)。
色の濃さと投稿数の対応は
灰色→0
緑は一番薄いやつから順に1~4、5~14、15~29、30~
となっています。

作り方

botのアクセストークンを利用してtraQのAPIを叩きました。
メッセージ検索APIにfrom:,after:,before:が実装されていたのでこれを使って28回APIを叩くことで4週間分のデータを取ってこれました。メッセージの内容自体は必要ないので、検索クエリにヒットした全メッセージ数を返してくれているtotalHitsという部分だけを使いました(レスポンス速度を遅くしないために1回につき100個までしかメッセージが返ってきませんが、totalHitsで全メッセージ数は返してくれるようになっています)。

また、from:で指定するのはシステム上でのuuidであって、普段使っている@mehm8128とかではないので、全ユーザーを取ってこれるAPIの「名前が一致するアカウントのみを取得する」というクエリパラメータを使ってそのレスポンスからuuidを取ってくるという少しめんどくさいことをしました(もっと簡単な方法があるかも)。
あとはやるだけです。
traQでは普段から色々なスタンプが飛び交っているのですが、スタンプと同じ記法で色を16進数で指定することでその色の正方形を表示できます。草の表示はそれを使っていい感じにしました。

作成後は色々な人が使ってくれて、5時間で180回くらい使われました。
色々とバグだったり脆弱性っぽいのだったりも発見されて、修正を繰り返したりしていい感じになったので定期的に使ってもらえたら嬉しいです。

草集

他の人が使ってくれていた中で面白かった草をいくつか紹介します。

きなの

きなのとは、traQで人気のあるbotです。
参考記事
きなのと会話している人がたくさんいるので、草が濃かったです。
kinano_grass

BOT_mehm8128

今回の機能を導入したbotです。
普段からブログリレーのリマインドだったりABCのリマインドだったりをしてくれているのですが、草を導入した日は色んな人から呼ばれたのでその日だけ草が濃かったです。
bot_grass

〇〇〇〇

これは@BOT_mehm8128 草でユーザー名を指定せずに草を生やそうとした結果です。
今は修正済みで、指定しなかったら自分の草を生やしてくれるようになったのですが、修正前です。
grass_trasta
これは一体誰の草なのでしょうか。
さっき説明したユーザーidをuuidに変える作業をするときに、ユーザー名が指定されなかったときには「名前が一致するアカウントのみを取得する」というクエリパラメータを指定せずにメッセージ検索をしてしまうようになっていました。そして、APIを叩いたときに返ってくるレスポンスが長さ1の配列だという前提でdata[0].idみたいなことをしてuuidを取得してしまっていました。
つまり、レスポンスが全ユーザー分返ってきてしまい、data[0].idで取れるuuidは全ユーザーの中で一番先頭で返ってくるユーザーになってしまっていたのです。
レスポンスはどうやらuuidの昇順になっていたようで、traQの全ユーザーの中でuuidが一番若かったのは偶然にもtraPの代表でした。よって、この草はtraPの代表のものでした。

他にも別のbotを連動させて使おうとしていたり月指定で小数を使って怪しげなことをしていた人もいて面白かったです。

最後に

ちなみに僕のbotはJavaScriptで作ってます。この前運営として参加した「中高生のためのプログラミング教室」ではJavaScriptで中高生にインベーダーゲームを作ってもらったのですが、この記事を見つけてbotも作れるんだーって思ってもらえたらいいですね。

今後はtraQよりGithubでたくさん草を生やせるように頑張って進捗を生みます。

明日の担当はかしわbotの制作者である かしわで さんです、お楽しみに!

mehm8128 icon
この記事を書いた人
mehm8128

21B工学院。アルゴリズム班とSysAd班に入ってます。

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2021年5月19日
CPCTF2021を実現させたスコアサーバー
xxpoxx icon xxpoxx
2022年9月26日
競プロしかシラン人間が web アプリ QK Judge を作った話
tqk icon tqk
2022年9月16日
5日でゲームを作った #tararira
Komichi icon Komichi
2022年8月29日
ケモナー向け VRChatの始め方、歩き方。VR無くてもできる!
pikachu icon pikachu
2018年4月17日
春休みにゲームを作りました
uynet icon uynet
記事一覧 タグ一覧 Google アナリティクスについて