THN Discord ボットの背景

プロジェクトの GitHub リポジトリ

プロフィール

大学時代、そして今でも、私とほとんどの友人は Discord を主要なソーシャルメッセージングプラットフォームの一つとして使用しています。その当時も今も、サイバーセキュリティニュースに常に目を通したいと思っていました。そこで、楽しいプロジェクトとして、私と友人は The Hacker News のサイバーセキュリティニュースを Discord サーバーに再投稿する Discord ボットを作ろうと考えました。そのアイデアを友人に提案すると、彼はとても気に入り、開発を開始しました。

The Hacker News (THN) はサイバーセキュリティニュースサイトです。THN は Hacker News (https://news.ycombinator.com/) ではありません。「The Hacker News」という名前が非常に似ていることから、テック起業家向けの人気かつ伝説的なソーシャルニュースサイト Hacker News との間でいくつかの論争がありました。しかし、常に The Hacker News を利用している者として、The Hacker News はサイバーセキュリティニュースを得るのに良い情報源だと考えています。

このプロジェクトに取り組む中で、私が直面した課題の一つは THN からニュースを抽出する方法を見つけることでした。利用できる唯一の選択肢は Twitter API を使用するか、THN をウェブスクレイピングするかのどちらかでした。Twitter API を動かそうと試みましたが、Twitter が API の設定と使用を非常に困難にしたため、諦めました。そこで代わりに THN をウェブスクレイピングすることにしました。コードベースは Python で書く予定だったので、requestsbeautifulsoup4 を使ってウェブスクレイピングを行いました。

スクレイパーが動作したら、次に取り組んだのは Discord ボットでした。Discord ボットの作成とデプロイはとても簡単です。そのため、私たちはボットを 1 日未満で動かすことができました。また、その期間中に Discord サーバーの設定も行いました。

「フィルタ」機能を追加しました。この機能は THN 記事を「apple-news」「google-news」「linux-news」「microsoft-news」のいずれかで分類し、各カテゴリごとに専用チャンネルに投稿します。「all」チャンネルも残しており、すべての記事がそこに集まりますが、この機能は記事をある程度分類でき、実装もそれほど難しくありませんでした。

以上を踏まえて、Discord ボットの大まかな動作は次の通りです:

  1. 1 時間ごとに THN をスクレイプし、記事のタイトル、詳細、日付、URL などの重要情報を抽出します。
  2. ボットはサーバー内のメッセージ履歴をチェックし、新規 にスクレイプされた記事かどうかを判断します。これにより、既に投稿済みの記事を再投稿しないようにします。
  3. 新規記事を上記のトピックでフィルタリングします。
  4. 収集・フィルタリングされたすべての記事の URL を、対応する Discord チャンネルに投稿します。
  5. 以上が完了したら、再び 1 時間 待機し、同じ手順を繰り返します。

全体として、Discord ボットは完全に Python で書かれ、以下のサードパーティーパッケージを使用しています:beautifulsoup4requestsdiscord.pypython-dotenv。また、Discord ボットは Raspberry Pi 3 B+(32 ビット Raspberry Pi OS Lite)上でホストされました。ボットの起動方法は次の通りです:

# ボットをバックグラウンドで実行
python3 bot.py &

ボットとサーバーの設定が完了した後、私たちはプロジェクトをすべての友人やクラスメートに共有しました。1 週間で約 25 人がサーバーに参加しました。

しかし数か月後、サーバーの利用がほとんどなく、ほとんどのユーザーがサーバーを離れるか、すべてのチャンネルをミュートしていることに気付きました。主な理由は、ユーザーの多くがより個人的でカスタマイズ可能なフィルタオプションを求めており、サイバーセキュリティ自体にそれほど関心がなかったためです。

このため、Discord サーバーを シャットダウン することに決めました。このプロジェクトは 2022 年 2 月から 2022 年 5 月まで実施され、2022 年 5 月 25 日に正式に終了しました。その日にボットを停止し、Discord サーバーとこのプロジェクト用に作成した Discord ボットアカウントを削除し、コードを完全にオープンソース化しました。コードは以下で確認できます: https://github.com/MehmetMHY/thn-discord-bot

総じて、楽しいプロジェクトであり、多くを学びました。また、当時は気付いていませんでしたが、このプロジェクトは私たちの最大のプロジェクトである Notify-Cyber の最初の開始/バージョンでもありました。