開發筆記 (1) ─ Discord Bot
開個新系列(?)
因為想要下禮拜在 Codeforces 辦比賽,因為那場比賽是給一個 Discord 群組的,想說有個即時播報戰況的 Discord Bot 應該不錯,就跟上次 R2S CTF 的那個差不多概念。
構思
這個專案分成兩部分:從 Codeforces 上抓資料下來,以及在 Discord 的 UI。
Codeforces 有提供 API 抓 Submission、使用者資料等等,不過因為 mashup 是私人的,然後我那時候以為 Codeforces API 只能拿公開的東西,爬了一些資料以後想到兩個解法:
- 用 Selenium 之類的東西登我的帳密以後把資料爬下來
- 用我登入的 cookie 塞到 BeautifulSoup 裡面爬蟲
原本想試 1 畢竟比較機動性,不過實際試了以後發現會被 Codeforces 的 robots.txt 擋下來(我也不想 bypass 他),只好改成吃 cookie 的解法。後來才看到 Codeforces 有提供私人資訊的 API,不過多學一個東西也不錯啦 :P
把那個網站的 HTML file 拿下來以後,發現他所有的 submission 都藏在 .datatable
的 class 裡面,之後就很好拆解啦。
UI 的部分就沒什麼特別的,主要就是預設每分鐘會去爬一次 Codeforces 的 Status,拿到誰 AC 了哪題以後,確認該使用者沒有 AC 過那題就塞訊息到頻道。原本想做類似 UNIX 指令的格式,還沒在新的框架成功。
實作成果
學到的東西
- 更了解 cookie 與 session 的意義
- 了解 Python requests 與 BeautifulSoup 模組的基本用法
- 了解基本 Discord Bot 使用方法與 Command 框架用法
- Python 中 static variable、async 與 operator overloading 用法