ربات دیسکورد THN

مخزن گیت‌هاب پروژه

پروفایل

در دوران دانشگاه، و حتی الان، من و تقریباً همه‌ی دوستانم از دیسکورد به‌عنوان یکی از پلتفرم‌های اصلی پیام‌رسانی اجتماعی خود استفاده می‌کردیم. در آن زمان، و حتی الان، می‌خواستم از اخبار امنیت سایبری به‌روز باشم. بنابراین به این فکر کردم که به‌عنوان یک پروژه‌ی سرگرم‌کننده، من و دوستم یک ربات دیسکورد بسازیم که اخبار امنیت سایبری را از The Hacker News در یک سرور دیسکورد بازنشر کند. ایده را به دوستم مطرح کردم و او هم عاشقش شد، بنابراین شروع به توسعه‌اش کردیم.

The Hacker News (THN) یک سایت خبری امنیت سایبری است. حالا، THN اصلاً Hacker News نیست. کمی بحث‌برانگیزی درباره‌ی این موضوع وجود داشته که نام «The Hacker News» بسیار شبیه «Hacker News» است؛ وب‌سایت خبری اجتماعی بسیار محبوب و افسانه‌ای که بر کارآفرینی فناوری تمرکز دارد. اما به‌عنوان کسی که همیشه از The Hacker News استفاده می‌کند، باور دارم The Hacker News منبع خوبی برای گرفتن اخبار امنیت سایبری است.

خب، هنگام کار روی این پروژه، یکی از چالش‌هایی که با آن روبه‌رو شدم پیدا کردن راهی برای استخراج اخبار از THN بود. تنها گزینه‌های موجود این بود که یا از Twitter API استفاده کنم یا THN را وب‌اسکرپ کنم. مدتی را صرف کردم تا Twitter API را به کار بیندازم اما چون توییتر راه‌اندازی و استفاده از API خود را واقعاً دشوار کرده بود، بی‌خیال شدم. بنابراین در عوض به سراغ وب‌اسکرپ‌کردن THN رفتم. از آن‌جا که قرار بود کدبیس با پایتون نوشته شود، برای انجام وب‌اسکرپینگ از requests و beautifulsoup4 استفاده کردم.

با کارکردن اسکرپر، قدم بعدی که به آن پرداختیم ربات دیسکورد بود. ساختن و استقرار یک ربات دیسکورد بسیار ساده است. بنابراین خیلی سریع توانستیم ربات را در کمتر از یک روز راه‌اندازی کنیم. همچنین در همان بازه‌ی زمانی سرور دیسکورد را هم تنظیم کردیم.

یکی از ویژگی‌هایی که اضافه کردیم یک ویژگی «فیلترها» بود. این ویژگی مقاله‌های THN را بر اساس اینکه «apple-news»، «google-news»، «linux-news» و/یا «microsoft-news» بودند، دسته‌بندی می‌کرد. این نوع خبرها را به کانال‌های مخصوص خودشان مرتب می‌کرد. هنوز یک کانال «all» وجود داشت که شامل همه‌ی مقاله‌ها می‌شد، اما فکر کردیم این ویژگی خوب است چون انواع مختلف را تا حدی مرتب می‌کرد و ساختنش هم چندان چالش‌برانگیز نبود.

با دانستن همه‌ی این‌ها، این یک ایده‌ی کلی از نحوه‌ی کار ربات دیسکورد است:

  1. هر 1 ساعت، THN را اسکرپ می‌کرد و اطلاعات کلیدی درباره‌ی یک مقاله را استخراج می‌کرد. این اطلاعات شامل موارد زیر بود: عنوان، جزئیات، تاریخ، و آدرس اینترنتی مقاله.
  2. سپس ربات تاریخچه‌ی پیام‌های خودش را در سرور بررسی می‌کرد تا ببیند کدام مقاله‌هایی که اسکرپ کرده جدید هستند. این کار مطمئن می‌کرد که ربات مقاله‌هایی را که قبلاً پست کرده بود دوباره بازنشر نمی‌کند.
  3. مقاله‌های جدید را بر اساس موضوعات مشخصی، همان‌طور که بالاتر توضیح داده شد، فیلتر می‌کرد.
  4. با جمع‌آوری و فیلتر شدن همه‌ی مقاله‌ها، ربات سپس آدرس اینترنتی هر مقاله را در سرور دیسکورد خودش و همچنین در کانال‌های مربوط به آن پست می‌کرد.
  5. پس از همه‌ی این‌ها، ربات یک ساعت دیگر صبر می‌کرد تا دوباره همان مراحل را ادامه دهد.

در مجموع، ربات دیسکورد کاملاً با پایتون نوشته شده بود و از بسته‌های شخص ثالث زیر استفاده می‌کرد: beautifulsoup4، requests، discord.py، و python-dotenv. همچنین، ربات دیسکورد روی Raspberry Pi 3 B+ من میزبانی می‌شد که Raspberry Pi OS Lite نسخه‌ی 32 بیتی را اجرا می‌کرد. ربات را این‌گونه اجرا می‌کردیم:

# run the bot in the background
python3 bot.py &

بعد از اینکه ربات و سرور را کاملاً راه‌اندازی کردیم، پروژه‌مان را با همه‌ی دوستان و همکلاسی‌هایمان به اشتراک گذاشتیم. در عرض یک هفته توانستیم حدود 25 نفر را جذب کنیم تا به سرور بپیوندند.

اما بعد از چند ماه، متوجه شدیم که مردم واقعاً از سرور استفاده نمی‌کردند و بیشترشان یا سرور را ترک کرده بودند یا همه‌ی کانال‌های سرور را بی‌صدا کرده بودند. دلیل اصلی این کارشان این بود که بیشتر کاربران گزینه‌های فیلتر شخصی‌تر و سفارشی‌تری می‌خواستند و بیشترشان هم چندان به امنیت سایبری اهمیت نمی‌دادند.

به همین دلیل، تصمیم گرفتیم سرور دیسکورد را تعطیل کنیم. این پروژه از فوریه‌ی 2022 تا مه 2022 اجرا شد و در 25 مه 2022 به‌طور رسمی بسته شد. در این روز، ربات را متوقف کردیم، سرور دیسکورد را حذف کردیم، حساب ربات دیسکوردی را که برای این پروژه ساخته بودیم پاک کردیم، و کد را به‌طور کامل متن‌باز در این مخزن گیت‌هاب قرار دادیم.

در مجموع. این یک پروژه‌ی سرگرم‌کننده بود و چیزهای زیادی یاد گرفتیم. همچنین، در آن زمان این را نمی‌دانستیم، اما این پروژه آغاز اولیه/نسخه‌ی بزرگ‌ترین پروژه‌ی ما تا این لحظه بود… Notify-Cyber!