Discord-бот THN
Во время учёбы в колледже, и даже сейчас, я и почти все мои друзья используем 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 час он сканировал THN и извлекал ключевую информацию об статье. Эта информация включала: заголовок, детали, дату и URL статьи.
- Затем бот проверял свою историю сообщений на сервере, чтобы определить, какие из извлечённых статей являются новыми. Это гарантировало, что бот не будет повторно публиковать уже опубликованные статьи.
- Он фильтровал новые статьи по определённым темам, как описано выше.
- Собрав и отфильтровав все статьи, бот публиковал URL каждой статьи в своём Discord-сервере, а также в соответствующих каналах.
- После всего этого бот ждал ещё один час, чтобы повторить те же шаги снова.
В целом, 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!