起因
為了在學校的生活方便,大佬學長們創建了一個QQ機器人,畢竟95后的IM(Instant Message)世界還是以QQ為主,所以機器人就很方便的查詢到一些數據,群聊的時候也能帶來一些快樂(因為有自動回復功能),然后……直到2020年1月21日,學長在群里面說被后台封了,QQ和IP都被封了(你咋不封MAC呢)。怎么辦呢?換新的賬號的話,因為原來的用戶量已經很大了,現在換新的很麻煩,要一個個重新加好友加群,那么只能重新去在新的平台上開發了。然后趕緊百度一下有什么比較穩定的QQ機器人框架(吐槽一下為什么QQ不給出API),然后就看到有人推薦Coolq,那時候離開學還有5周(其實到現在已經8周了,趕緊開學啊),盡量能在開學之前寫好吧,就去官網下載了一個客戶端試一下,然后故事就開始了。
發展(廢話)
打開軟件的說明文檔一看,和原來一樣也是用插件的啊,插件那就不麻煩了,反正有原來的代碼,直接照着抄就行了,再一看,易語言開發……?怪不得學長當時見到我們就問有誰會易語言開發,不過好在看到了C++的SDK,還有Pascal?的SDK和Rust的SDK,反正后面兩個都不會,就頭鐵C++吧。
千辛萬苦從Github上面把SDK和模板clone下來(沒梯子真的慢),一邊下載一邊看文檔,需要MSVC 2019……!好容易擺脫了Visual Studio現在又要裝回來?得了,下載吧,反正Github也沒什么下載速度不會卡VS的,然后又把其他環境解決了,小半天過去了,熟悉的VS啟動界面
打開文件,嗯?竟然不是解決方案項目,那就打開文件夾試試吧,一個CMake界面duang。趕緊百度CMake文件怎么寫,找了幾篇看看,眼睛:我會了;腦子:不,你不會。打開CMakeLists.txt,好像每一行都覺得有理有據,但是要想添加進去一行那是絕對不能了,就更不要說還要把cpp文件按照功能分文件夾放,看着代碼,好像只要把所有文件放在src文件夾下就可以了,試一下hello, world吧,改了好一會兒,終於hello, world出現在了QQ的聊天界面上了,我會了,下面就是編寫代碼的問題了。
然后就是數據庫的問題了,因為原來的數據庫是MySQL嘛,就直接拿過來用就好了,繼續百度如何在C++中連接MySQL,無非是調用dll什么的,明明有connector為什么不用呢?然而親自使用的時候才發現循環bug,關於wchar*、char*、std::string的error報了幾百個。一怒之下直接想rm -rf,不對,是drop database,還是忍住了。Bye MySQL,找了一會兒在C++下操作比較友好的數據庫,然后就在Coolq論壇上看到有人用sqlite開發,趕緊去看了一眼,極好,源碼直接一個c文件兩個頭文件,簡直就是福音。Hi sqlite,輕量級嘛十分好用的,又不需要權限管理,只要我防注入做的好,就不會出大問題了,反正可以注入的情況也不多,經常備份,出現問題直接恢復就好了,還有sqlitestudio等軟件可以可視化,業務需求就已經夠了。后來事實證明,重新創一個數據庫是很正確的,因為原來的數據庫里面有因為沒有設置主鍵保證唯一性等問題造成了很多bug數據,比如說一個QQ號綁定了很多用戶之類的,開后門也不能這樣吧。
完事具備,開始寫代碼了,寫了幾百行,吃掉了兩包薯片十幾袋餅干,真的無聊啊,就是創建sql語句,准備,綁定數據,然后查詢,一套下來沒個一兩百行頂不住,那時候我還沒發現snippet神器,全是手擼,而且sqlite因為是c代碼,string與const char*的轉換還好,格式化字符串,用stringstream操作實在是太麻煩了,難道未來的生活竟然是這樣?也許是最近心浮氣躁沉不住氣了,Bye C++,我不愛你了,以后除非單片機或者Linux,再也不想動你了。
因此以上都是廢話(# ̄m ̄)
轉折
但是事情總是要做完呀,怎么辦呢?忽然間看到了RC大佬(就是上面的C++SDK的主要開發者)用Python寫的另一個工具nonebot,反正用Python開發的時間成本就小了很多,不妨去看看
就決定是你了!
因為偶然間發現sqlite竟然是集成在Python中的,而nonebot是一個PyPi上的Package,pip一下就好了,開發環境迅速(也不是很快,因為要Python 32位的,還要重新安裝一下)搭建完成。這個時候操作起來就方便多了,sqlite也不用一個個綁定變量了,實在是輕松。
之前學長也寫了Python版本的代碼,但是拿到手才發現挺難改的,因為很多接口都是上一個平台的,當然這不能怪學長,畢竟誰也想不到會有這種平台封禁的措施呢。現在吸取教訓了,一定要把核心代碼與平台分開寫,然后留接口就好,這樣即使找下家也方便快速修改和適配。接着就是Codding......
代碼已經寫完並開始測試了,才發現,QQ里面的小表情、emoji等奇奇怪怪的東西要怎么處理呢?因為是要做跨軟件平台的項目,因此這個最好要做一個自己的標准,然后通過映射來適應不同的平台,但是代碼已經寫好了怎么辦呢?一邊罵自己太蠢,一邊想辦法,但是也只能想到一個湊合的辦法,自己創建一個標准然后映射太麻煩了,不如直接用Coolq的作為標准然后去映射,這樣將來如果要換平台了,只要搞到一個與Coolq對應的映射表然后寫個腳本在數據庫里面全部換掉就好了
尾聲
寫完了,代碼也拿去測試了,還是有很多bug,但是開發的經歷挺好玩的,當然了,這僅僅是一個簡單的機器人而已,還可以加上很多東西,例如像NLP之類的,雖然一點不會但是可以學呀,學長那邊似乎還有很多前端的活,看看能不能去學習學習