THN Discord Bot
Üniversitede ve hatta şimdi, ben ve neredeyse tüm arkadaşlarım Discord’u ana sosyal mesajlaşma platformlarımızdan biri olarak kullanıyoruz. O zamanlar ve hatta şimdi, siber güvenlik haberleri hakkında güncel kalmak istiyordum. Bu yüzden, eğlenceli bir proje olarak, ben ve arkadaşımın The Hacker News’tan siber güvenlik haberlerini bir Discord sunucusuna yeniden paylaşacak bir Discord botu yapmayı düşündüm. Fikri arkadaşım ile paylaştım ve o da fikri çok beğendi, bu yüzden geliştirmeye başladık.
The Hacker News (THN) bir siber güvenlik haber sitesidir. Şimdi, THN Hacker News değildir. “The Hacker News” isminin “Hacker News” ile çok benzer olması hakkında bazı tartışmalar olmuştur; bu, teknoloji girişimciliğine odaklanan çok popüler ve efsanevi bir sosyal haber web sitesidir. Ancak, The Hacker News’u sürekli kullanan biri olarak, The Hacker News’un siber güvenlik haberleri almak için iyi bir kaynak olduğuna inanıyorum.
Bu projeyi geliştirirken karşılaştığım bir zorluk, THN’den haberleri çıkarmanın bir yolunu bulmaktı. Tek mevcut seçenek, ya Twitter API’sini kullanmak ya da THN’yi web tarayıcı ile kazımaktı. Twitter API’sini çalıştırmaya çalışmak için bir süre harcadım ama Twitter, API’lerini kurmayı ve kullanmayı gerçekten zor hale getirdiği için pes ettim. Bu yüzden THN’yi web tarayıcı ile kazımaya karar verdim. Kod tabanı Python’da yazılacağı için, web kazıma işlemi için requests ve beautifulsoup4 kullandım.
Kazıyıcı çalıştığında, üstesinden geldiğimiz bir sonraki şey Discord botuydu. Bir Discord botu oluşturmak ve dağıtmak çok basittir. Bu yüzden botu bir günden daha kısa bir sürede çalışır hale getirdik. Bu süre zarfında Discord sunucusunu da kurduk.
Eklediğimiz bir özellik “filtreler” özelliğiydi. Bu özellik, THN makalelerini “apple-news”, “google-news”, “linux-news” ve/veya “microsoft-news” olarak sıralardı. Bu tür haberleri kendi kanallarına ayırırdı. Tüm makaleleri içeren bir “tüm” kanalı da vardı ama bu özelliğin hoş olduğunu düşündük çünkü türleri bir şekilde sıralıyordu ve yapmak da çok zor değildi.
Bütün bunları göz önünde bulundurarak, Discord botunun nasıl çalıştığına dair genel bir fikir:
- Her 1 saatte bir, THN’yi kazıyacak ve bir makale hakkında ana bilgileri çıkaracaktı. Bu bilgiler arasında: başlık, detaylar, tarih ve makalenin URL’si bulunuyordu.
- Bot, sunucudaki mesaj geçmişini kontrol ederek hangi makalelerin yeni olduğunu görecekti. Bu, botun zaten paylaştığı makaleleri yeniden paylaşmamasını sağlıyordu.
- Yeni makaleleri yukarıda açıklandığı gibi belirli konulara göre filtreleyecekti.
- Tüm makaleler toplandıktan ve filtrelendikten sonra, bot her makalenin URL’sini Discord sunucusuna ve ilgili kanallara gönderecekti.
- Tüm bunlardan sonra, bot bir saat daha bekleyerek aynı adımları tekrar edecekti.
Sonuç olarak, Discord botu tamamen Python’da yazıldı ve aşağıdaki 3. parti paketleri kullandı: beautifulsoup4, requests, discord.py ve python-dotenv. Ayrıca, Discord botu 32 bit Raspberry Pi OS Lite çalıştıran Raspberry Pi 3 B+ cihazımda barındırıldı. Botu şu şekilde çalıştırıyorduk:
# botu arka planda çalıştır
python3 bot.py &
Botu ve sunucuyu kurduktan sonra, projemizi tüm arkadaşlarımız ve sınıf arkadaşlarımızla paylaştık. Bir hafta içinde sunucuya yaklaşık 25 kişi katıldı.
Ama birkaç ay sonra, insanların sunucuyu gerçekten kullanmadığını ve çoğunun ya sunucudan ayrıldığını ya da sunucudaki tüm kanalları sessize aldığını fark ettik. Bunun ana nedeni, çoğu kullanıcının daha kişisel ve özel filtre seçenekleri istemesi ve çoğunun siber güvenlik ile bu kadar ilgilenmemesiydi.
Bu nedenle, Discord sunucusunu kapatmaya karar verdik. Bu proje Şubat 2022’den Mayıs 2022’ye kadar sürdü ve resmi olarak 25 Mayıs 2022’de kapandı. Bu günde, botu durdurduk, Discord sunucusunu sildik, bu proje için oluşturduğumuz Discord botu hesabını sildik ve kodu tamamen açık kaynak yaptık. Kodu burada kontrol edebilirsiniz: https://github.com/MehmetMHY/thn-discord-bot
Sonuç olarak, bu eğlenceli bir projeydi ve çok şey öğrendik. Ayrıca, o zaman bunu bilmiyorduk ama bu proje, en büyük projemiz olan: Notify-Cyber için ilk başlangıç/sürüm oldu.