Discord-бот THN

Репозиторий проекта на GitHub

профиль

Во время учёбы в колледже, и даже сейчас, я и почти все мои друзья используем Discord как одну из основных платформ для общения. В то время, и даже сейчас, я хотел быть в курсе новостей по кибербезопасности. Поэтому я подумал, что для развлечения мы с другом могли бы создать Discord-бота, который будет перепостить новости по кибербезопасности с The Hacker News в Discord-сервер. Я представил идею другу, и ему она очень понравилась, так что мы начали её разрабатывать.

The Hacker News (THN) — это сайт новостей по кибербезопасности. Теперь, THN — это НЕ Hacker News. Возникла некоторая полемика о том, что название «The Hacker News» очень похоже на «Hacker News» — очень популярный и легендарный сайт социальных новостей, ориентированный на технологическое предпринимательство. Но, как человек, который постоянно пользуется The Hacker News, я считаю, что The Hacker News — хороший источник новостей по кибербезопасности.

Работая над этим проектом, одна из проблем, с которой я столкнулся, была в поиске способа извлечь новости с THN. Единственными доступными вариантами были либо использование Twitter API, либо веб-скрапинг THN. Я некоторое время пытался заставить Twitter API работать, но в итоге сдался, потому что Twitter сильно усложнил настройку и использование своего API. Поэтому я прибег к веб-скрапингу THN. Поскольку кодовая база должна была быть написана на Python, я использовал requests и beautifulsoup4 для веб-скрапинга.

После того как скрапер заработал, следующим этапом был Discord-бот. Создание и развертывание Discord-бота очень просты. Поэтому мы быстро запустили бота менее чем за день. За это же время мы настроили и Discord-сервер.

Одной из функций, которую мы добавили, была функция «фильтров». Эта функция сортировала статьи THN по тому, относятся ли они к «apple-news», «google-news», «linux-news» и/или «microsoft-news». Такие типы новостей размещались в своих собственных каналах. При этом оставался канал «all», который содержал все статьи, но нам показалось, что эта функция удобна, потому что она в какой-то мере сортировала типы новостей и не была слишком сложной в реализации.

Учитывая всё это, общая идея работы Discord-бота была следующей:

  1. Каждые 1 час он сканировал THN и извлекал ключевую информацию об статье. Эта информация включала: заголовок, детали, дату и URL статьи.
  2. Затем бот проверял свою историю сообщений на сервере, чтобы определить, какие из извлечённых статей являются новыми. Это гарантировало, что бот не будет повторно публиковать уже опубликованные статьи.
  3. Он фильтровал новые статьи по определённым темам, как описано выше.
  4. Собрав и отфильтровав все статьи, бот публиковал URL каждой статьи в своём Discord-сервере, а также в соответствующих каналах.
  5. После всего этого бот ждал ещё один час, чтобы повторить те же шаги снова.

В целом, discord-бот был полностью написан на Python и использовал следующие сторонние пакеты: beautifulsoup4, requests, discord.py и python-dotenv. Также Discord-бот был размещён на моём Raspberry Pi 3 B+ с 32‑битной Raspberry Pi OS Lite. Мы запускали бота так:

# run the bot in the background
python3 bot.py &

После того как мы настроили бота и сервер, мы поделились проектом со всеми нашими друзьями и однокурсниками. За неделю к серверу присоединилось около 25 человек.

Но через несколько месяцев мы заметили, что люди на сервере практически не общаются, и большинство либо покинули сервер, либо заглушили все каналы. Основная причина была в том, что большинству пользователей хотелось более персонализированных и настраиваемых фильтров, а многим вообще не интересна была кибербезопасность.

Из‑за этого мы решили закрыть Discord-сервер. Проект длился с февраля 2022 по май 2022 года, официально закрывшись 25 мая 2022 года. В этот день мы остановили бота, удалили Discord-сервер, удалили учётную запись Discord-бота, созданную для этого проекта, и полностью открыли код в этом репозитории на GitHub.

В целом, это был интересный проект, и мы многому научились. Также, к тому времени мы ещё не знали этого, но этот проект стал начальной версией нашего крупнейшего проекта на сегодняшний день… Notify-Cyber!