はじめに

本記事は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からイベントを取得して、選んだイベントをもとにチャンネルを作ってくれます。

  1. /event コマンドで起動します。
  2. CTFtimeの直近10件くらいのUpcomingなイベントが表示されるので1つ選びます。 event
  3. チャンネル名に使うイベント名の略称と、ログイン時に使用するID/PWを入力します。 PWはランダムな文字列を自動生成して最初から入力されているので、登録時にここからコピペもできます。(勿論ダミーです) create-event
  4. submitすると #events チャンネルに、選択したイベントのチャンネルへのリンクが貼られます。 event
  5. #2022_12_intent のように生成されたイベントチャンネルへのリンクを押すと、イベントの日時やリンク、ログイン情報などが投稿されたチャンネルへ飛びます。 日時は日本時間に合わせてあります。 new-event

/custom_event

CTFtimeには掲載されていないイベント用のコマンドで、手動で入力したイベント情報をもとにチャンネルを作ってくれます。 Slackには時刻を入力できるフォームがあるのでやや便利です。 基本的に主催チームのタイムゾーン基準で開催時刻が記載されていて日本標準時への変換が面倒なことが多いので、タイムゾーンを指定することでそのまま日時を打てるようにしてあります。

/custom_event コマンドは全部手動で入力します。 custom_event

CTFtime API

/eventでCTFtimeのイベントを取得していますが、これにはCTFtimeのAPIを利用しています。 このページはリンクが見つけにくいので3そもそも存在に気づきにくいです。 丁寧なドキュメントがあるわけではないのでAPIが返すイベント情報によくわからないフィールドもありますが、適当にパースして雰囲気で使っています。

Discord版スラッシュコマンド

Slackがフリープランの90日以前のメッセージ閲覧に制限をかけ始めたのでDiscordへの移行を見越してDiscord版のスラッシュコマンドも作っていました。 最近(?)のDiscordはモーダルウィンドウとかも出せるようになっているらしく、似たような物を作れると思っていたのですが、ドキュメントを読み解くのにかなり苦戦して途中で投げています…… discord

やる気が再燃したら多分完成させると思います。

おわりに

そんなに複雑なことをしている訳ではないのですが、かなり作業が楽になりました。
いっそ参加登録も自動化できたらいいなーとか考えていましたが、規格でもない限り無理なので諦めました…… 4

明日はArkさんが2022年のおもしろWeb問を紹介されるようです!


  1. 本当はExtended Hidden Number Problemの話を書きたかったのですが、師走は本当に忙しいので軽めの記事に落ち着きました ↩︎

  2. いつの間にか参加登録マンになっていた ↩︎

  3. そもそもメインのページからリンクが無いかもしれない? どうやって見つけたかも思い出せない🙃 ↩︎

  4. 規格といえば、配布ファイル解凍時に「ファイルが散らばる」or「ディレクトリが出てくる」を定める規格があってもいいのにな~と常々思っています。 ↩︎