oicq是基於 Node.js 實現 QQ (安卓) 協議,提供了 QQ 內常用的功能操作
yuan-bot是基於oicq並使用 TS 編寫以及使用 MongoDB 作為數據庫的 QQ 機器人。目前項目剛創建,只針對了 Q 群的精華消息,後續內容會慢慢豐富。
Github 地址:yuan-bot
這篇文章是該項目的非正經開發日誌的歷程記錄。
背景#
我的 QQ 裡面有著一個群,這是我高中以及大學時間玩劍三時候的遊戲群。
裡面的人個個會玩說話又好聽。為了銘記每個小夥伴的一言一語,我們活用了 QQ 的精華消息功能,將每一句 騷話 經典名言裱在了這個精華消息列表上。
此時精華消息的內容不再是精華, 我們心照不宣地稱其為糟粕
因為自己一時的年少輕狂而給裝裱在列表上的小夥伴都叫苦連天(當然也有人以此為樂,是誰我不說,大家懂得都懂),紛紛控訴管理員這裡面有著管理員的黑幕!應群友得而誅之!
但道高一尺魔高一丈,卑鄙的群管理不僅無視群友控訴,甚至在前一陣群成立八周年之日推出糟粕周邊(有幸本人也拿到了一個),同時為糟粕數量最多的群友頒發了獎盃,大力推行糟粕文化,加上群友民心涣散,群裡反對的聲音逐漸消失,人人都成樂子人。
至此,糟粕文化達到了群成立以來的一個高潮。
在糟粕文化逐漸流行的同時,糟粕的數量也不斷拔高,群管理發現了一些問題
- 糟粕數量最多達到 1000,必須刪掉部分糟粕消息才可以繼續添加,這樣會損失一些群歷史的糟粕
- 在這麼龐大的數量下,QQ 群的精華消息並沒有統計或者以時間查看等功能,每次統計都由人工統計,耗費人力
- ……
Yuan-Bot 就是為了 糟粕以及樂子 解決上述的問題而生。
啟動#
git clone https://github.com/Magren0321/yuan-bot.git
pnpm install
pnpm run serve
過程#
作為一個前端,所以技術的選用下意識地就選擇了 Node.js,找到了 oicq 這個庫,它是基於 Node.js 實現的 Android QQ,同時是我感覺功能較為全面的庫,具體的使用聽我說不如參考其 Api reference
精華數據#
oicq 其本身封裝的群對象裡面並沒有封裝群精華數據(不如說好像還沒有開源的庫做到了這個,或許是受眾太小了使用的頻率也不高,所以都沒有考慮),所以我得自己動手,豐衣足食。
用 Fiddler 抓包了 PC 端的 QQ,抓到了精華數據的接口,然後通過 oicq 提供的登錄接口獲取到 Cookie,將其丟進請求頭來獲取精華消息的數據。
順便給 oicq 提了個 PR(又水了一個 PR
然後又又又碰上了一個問題就是,當群裡有新增精華消息的時候我並無法通過 oicq 監聽到群裡的 tips,發現這個已經有人在去年 8 月就提了 issues,但是至今沒有解決的樣子。
原本的計劃是打算監聽到添加精華消息後,服務器的數據庫實時存儲新的精華消息,但是現在只能換一種方案,改成了間隔定時器,每隔一定時間對數據進行請求,記錄好最新消息的時間戳,以此篩選掉舊的內容。
這個辦法雖然我覺得很笨,但是現狀我暫時沒想到別的辦法來實現這個功能。
命令#
這個比較容易解決,只需要監聽指定群的消息,封裝一個類,以字符串作為類中的 key,對應的方法作為 value,在收到消息後將消息作為 key 傳入,如果 class 中存在則執行對應的方法就好。
大概實現就是這樣,可以說是平平無奇,毫無亮點🤡
最後(或許也還不是最後?#
yuan-bot 的功能後續還會繼續豐富還有迭代 (不過現在上班了,估摸進度會推進的比較緩慢)
🙏感謝 oicq 提供的接口以及文檔
🛸Power by Magren and made with love
To Be Continued.