THN Discord Bot

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 зробив це дійсно складним для налаштування та використання. Тож я вирішив зайнятися веб-скрапінгом THN. Оскільки кодова база мала бути написана на Python, я використав бібліотеки requests та beautifulsoup4 для веб-скрапінгу.

Коли скрапер запрацював, наступним завданням, яке ми вирішили, був Discord-бот. Створення та розгортання Discord-бота дуже просте. Тож ми швидко налаштували бота менш ніж за день. Ми також налаштували Discord-сервер протягом цього часу.

Однією з функцій, яку ми додали, була функція “фільтри”. Ця функція сортувала статті THN за тим, чи були вони “apple-news”, “google-news”, “linux-news” та/або “microsoft-news”. Вона сортувала ці типи новин у їхні власні канали. Все ще існував канал “всі”, який містив усі статті, але ми вважали, що ця функція є приємною, оскільки вона дещо сортувала типи і не була такою вже складною у створенні.

Знаючи все це, ось загальна ідея того, як працював Discord-бот:

  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. Ми запускали бота ось так:

# запустити бота у фоновому режимі
python3 bot.py &

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

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

Через це ми вирішили закрити Discord-сервер. Цей проєкт тривав з лютого 2022 року до травня 2022 року, офіційно закривши його 25 травня 2022 року. У цей день ми зупинили бота, видалили Discord-сервер, видалили обліковий запис Discord-бота, який ми створили для цього проєкту, і зробили код повністю відкритим. Ви можете переглянути код тут: https://github.com/MehmetMHY/thn-discord-bot

В цілому. Це був цікавий проєкт, і ми багато чого навчилися. Також, на той момент ми цього не знали, але цей проєкт став початковим стартом/версією для нашого найбільшого проєкту на сьогодні: Notify-Cyber.