Discord-бот The Hacker News

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. Кожну годину він скрейпив 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‑бота, створений для цього проєкту, і зробили код повністю відкритим. Ви можете переглянути код тут: https://github.com/MehmetMHY/thn-discord-bot

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