はじめに
本記事はCTF Advent Calendarの16日目の記事です。 昨日はkanonさんの「初心者がCTF始めるためにはどうすればいいのか(個人的偏見)」でした。 初めの解けない問題が多いうちはなかなか辛いですが、私もとにかく問題を解きまくっているときが一番成長を実感しますね。
今回は、Wani HackaseのSlackにある便利スラッシュコマンド(n=2)の紹介です。1 Wani Hackaseが設立したときに私は居なかったのですが、当時からSlackを使っていたようで今でもSlackを使っています。
チャンネル立てるのめんどくさい
Wani Hackaseでは毎週のミーティングで、(だいたい週末にある)参加するCTFを適当に選んでいます。 私が参加登録をする係をしていて2、イベントごとに1つのSlackのチャンネル立てるのですが、これが結構めんどくさいです。 そこで、チャンネルを立てる作業を半自動化できるSlackのスラッシュコマンドを作って少し楽をしています。 次に実際のコマンドの動作の流れを紹介します。
スラッシュコマンド
CTFtimeからイベントを取得する /event
と、それ以外のイベント用の /custom_event
があります。
/event
CTFtimeからイベントを取得して、選んだイベントをもとにチャンネルを作ってくれます。
/event
コマンドで起動します。- CTFtimeの直近10件くらいのUpcomingなイベントが表示されるので1つ選びます。
- チャンネル名に使うイベント名の略称と、ログイン時に使用するID/PWを入力します。 PWはランダムな文字列を自動生成して最初から入力されているので、登録時にここからコピペもできます。(勿論ダミーです)
- submitすると
#events
チャンネルに、選択したイベントのチャンネルへのリンクが貼られます。 #2022_12_intent
のように生成されたイベントチャンネルへのリンクを押すと、イベントの日時やリンク、ログイン情報などが投稿されたチャンネルへ飛びます。 日時は日本時間に合わせてあります。
/custom_event
CTFtimeには掲載されていないイベント用のコマンドで、手動で入力したイベント情報をもとにチャンネルを作ってくれます。 Slackには時刻を入力できるフォームがあるのでやや便利です。 基本的に主催チームのタイムゾーン基準で開催時刻が記載されていて日本標準時への変換が面倒なことが多いので、タイムゾーンを指定することでそのまま日時を打てるようにしてあります。
/custom_event
コマンドは全部手動で入力します。
CTFtime API
/event
でCTFtimeのイベントを取得していますが、これにはCTFtimeのAPIを利用しています。
このページはリンクが見つけにくいので3そもそも存在に気づきにくいです。
丁寧なドキュメントがあるわけではないのでAPIが返すイベント情報によくわからないフィールドもありますが、適当にパースして雰囲気で使っています。
Discord版スラッシュコマンド
Slackがフリープランの90日以前のメッセージ閲覧に制限をかけ始めたのでDiscordへの移行を見越してDiscord版のスラッシュコマンドも作っていました。 最近(?)のDiscordはモーダルウィンドウとかも出せるようになっているらしく、似たような物を作れると思っていたのですが、ドキュメントを読み解くのにかなり苦戦して途中で投げています……
やる気が再燃したら多分完成させると思います。
おわりに
そんなに複雑なことをしている訳ではないのですが、かなり作業が楽になりました。
いっそ参加登録も自動化できたらいいなーとか考えていましたが、規格でもない限り無理なので諦めました…… 4
明日はArkさんが2022年のおもしろWeb問を紹介されるようです!