THN Discord Bot
Під час навчання в університеті, і навіть зараз, я та майже всі мої друзі використовуємо 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-бот:
- Кожну годину він сканував THN і витягував ключову інформацію про статтю. Ця інформація включала: заголовок, деталі, дату та URL статті.
- Потім бот перевіряв свою історію повідомлень на сервері, щоб дізнатися, які статті він сканував, є новими. Це гарантує, що бот не повторно публікує статті, які вже опублікував.
- Він фільтрує нові статті за певними темами, як було пояснено вище.
- Зібравши та відфільтрувавши всі статті, бот публікує URL кожної статті на своєму Discord-сервері, а також у відповідних каналах постів.
- Після всього цього бот чекає ще годину, щоб продовжити ті ж самі кроки знову.
В цілому, 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.