บอต Discord ของ THN

คลัง GitHub ของโครงการ

โปรไฟล์

ในช่วงที่เรียนมหาวิทยาลัย และแม้กระทั่งตอนนี้ ผมและเพื่อนเกือบทั้งหมดใช้ Discord เป็นหนึ่งในแพลตฟอร์มส่งข้อความทางสังคมหลักของเรา ในตอนนั้น และแม้กระทั่งตอนนี้ ผมต้องการติดตามข่าวสารด้านความปลอดภัยทางไซเบอร์ให้ทันสมัยอยู่เสมอ ดังนั้นผมจึงคิดว่า เพื่อความสนุก ผมและเพื่อนของผมน่าจะสร้างบอต Discord ที่นำข่าวสารด้านความปลอดภัยทางไซเบอร์จาก The Hacker News มาโพสต์ซ้ำในเซิร์ฟเวอร์ Discord ผมนำเสนอแนวคิดนี้ให้เพื่อนฟัง และเขาก็ชอบแนวคิดนี้มาก ดังนั้นเราจึงเริ่มพัฒนามัน

เดอะ แฮกเกอร์ นิวส์ (THN) เป็นเว็บไซต์ข่าวด้านความปลอดภัยทางไซเบอร์ แต่ THN ไม่ใช่ แฮกเกอร์ นิวส์ มี ข้อถกเถียง เกี่ยวกับการที่ชื่อ “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 ตามว่าเป็น “ข่าวแอปเปิล”, “ข่าวกูเกิล”, “ข่าวลินุกซ์” และ/หรือ “ข่าวไมโครซอฟท์” หรือไม่ โดยจะแยกข่าวแต่ละประเภทไปไว้ในช่องของตัวเอง ยังคงมีช่อง “ทั้งหมด” ที่รวมบทความทั้งหมดไว้ แต่เราคิดว่าฟีเจอร์นี้มีประโยชน์ เพราะช่วยจัดแยกประเภทข่าวได้ในระดับหนึ่ง และไม่ได้สร้างยากเกินไป

เมื่อรู้ทั้งหมดนี้แล้ว นี่คือแนวคิดโดยทั่วไปเกี่ยวกับการทำงานของบอต Discord:

1. ทุก ๆ 1 ชั่วโมง บอตจะทำเว็บสแครป THN และดึงข้อมูลสำคัญเกี่ยวกับบทความออกมา ข้อมูลนี้ประกอบด้วย: ชื่อเรื่อง รายละเอียด วันที่ และ URL ของบทความ 2. จากนั้นบอตจะตรวจสอบประวัติข้อความในเซิร์ฟเวอร์เพื่อดูว่าบทความใดที่สแครปมาเป็นบทความใหม่ วิธีนี้ช่วยให้แน่ใจว่าบอตจะไม่โพสต์บทความซ้ำที่เคยโพสต์ไปแล้ว 3. บอตจะกรองบทความใหม่ตามหัวข้อบางอย่าง ดังที่อธิบายไว้ข้างต้น 4. เมื่อรวบรวมและกรองบทความทั้งหมดแล้ว บอตจะโพสต์ URL ของแต่ละบทความลงในเซิร์ฟเวอร์ Discord รวมถึงช่องที่เกี่ยวข้องกับโพสต์นั้นด้วย 5. หลังจากทั้งหมดนี้ บอตจะรออีกหนึ่งชั่วโมงเพื่อทำขั้นตอนเดิมต่อไป

โดยรวมแล้ว บอต Discord เขียนด้วย Python ทั้งหมด และใช้แพ็กเกจจากผู้พัฒนาภายนอก 3 รายการต่อไปนี้: beautifulsoup4, requests, discord.py และ python-dotenv นอกจากนี้ บอต Discord ยังโฮสต์อยู่บน Raspberry Pi 3 B+ ของผม ซึ่งใช้งาน Raspberry Pi OS Lite แบบ 32 บิต เราจะเรียกใช้บอตดังนี้:

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

หลังจากตั้งค่าบอตและเซิร์ฟเวอร์เสร็จเรียบร้อยแล้ว เราก็แชร์โครงการของเรากับเพื่อนและเพื่อนร่วมชั้นทั้งหมด ภายในหนึ่งสัปดาห์ มีคนประมาณ 25 คนเข้าร่วมเซิร์ฟเวอร์

แต่หลังจากผ่านไปไม่กี่เดือน เราสังเกตเห็นว่าผู้คนไม่ได้ใช้เซิร์ฟเวอร์จริง ๆ และส่วนใหญ่ก็ออกจากเซิร์ฟเวอร์ไปแล้ว หรือไม่ก็มิวต์ทุกช่องในเซิร์ฟเวอร์ เหตุผลหลักที่พวกเขาทำเช่นนั้นคือ ผู้ใช้ส่วนใหญ่ต้องการตัวเลือกตัวกรองที่เป็นส่วนตัวและปรับแต่งได้มากกว่านี้ และส่วนใหญ่ก็ไม่ได้สนใจเรื่องความปลอดภัยทางไซเบอร์มากนัก

ด้วยเหตุนี้ เราจึงตัดสินใจปิดเซิร์ฟเวอร์ Discord โครงการนี้ดำเนินการตั้งแต่เดือนกุมภาพันธ์ 2022 ถึงเดือนพฤษภาคม 2022 และปิดตัวลงอย่างเป็นทางการในวันที่ 25 พฤษภาคม 2022 ในวันนั้น เราหยุดบอต ลบเซิร์ฟเวอร์ Discord ลบบัญชีบอต Discord ที่เราสร้างขึ้นสำหรับโครงการนี้ และเผยแพร่โค้ดเป็นโอเพนซอร์สอย่างสมบูรณ์ในคลัง GitHub นี้

โดยรวมแล้ว นี่เป็นโครงการที่สนุกและเราได้เรียนรู้มากมาย นอกจากนี้ ในตอนนั้นเราไม่รู้เรื่องนี้ แต่โครงการนี้เป็นจุดเริ่มต้น/เวอร์ชันเริ่มต้นของโครงการที่ใหญ่ที่สุดของเราจนถึงตอนนี้… Notify-Cyber!