這個SDK 4.1範例大全是由社區用戶提出的需求整合而成,當中包括許多SDK 4附帶的特性;比如正則事件。
從3版本至4.1(Current)版本的變化相當的大,如果你是正在使用 SDK 3 甚至 SDK 2 的用戶可能會比較迷惘和困惑,希望以下的變化概要能對你有幫助。
-
SDK 4.0 項目重新命名了(
Native.Csharp>Native.Core),(Native.Csharp.Sdk>Native.Sdk),(Native.Csharp.Tool>Native.Tool):ok_hand: -
SDK 4.0
Native.Csharp.Sdk\App\.*下的文件暴露到主層級了,也就是說現在CQMain.cs,Export\.*是直接在SDK項目的最上層。:muscle: -
SDK 4.0
AppInfo.cs怎麼消失了??原來是改到SDK項目下了(具體是在Native.Sdk\Cqp\Model\AppInfo.cs❤️ -
SDK 4.0
Native.Csharp.Sdk\Lib\.*移動到上層主目録成為公共件了喔!:ok_hand: -
SDK 4.0
Repair兼容組件終於完成使命了,很快CoolQ Pro就會透過多個獨立進程執行單一應用了(StandaloneProcess),是一個酷Q副進程跑一個應用喔:star: -
SDK 4.0 現在
Native.Csharp\{appId}.json終於不用因應項目名稱改動而修改了,直接是對應的app.json了:star: -
SDK 4.0 好友/群添加請求的識別flag再修改! 從
e.ResponseFlag更名至e.Request了:star: -
SDK 4.0
Native.ToolIniConfig 新増序列化和反序列化特性 -
SDK 4.2
Native.ToolIniConfig 更完善處理入參及內部微調 -
SDK 4.2
CQApi精簡及優化並新增多個功能,抽象結構 -
SDK 4.2 增加只讀好友/群列表信息合集
-
SDK 1SDK 2SDK 3 與舊版本不相容,若在酷Q下運行甚至放置(即不啟用)一些舊版本與SDK 4,酷Q會沒有回應並在
20秒後跳出錯誤提示。必須把所有應用之SDK版本升級才可解決。(這個問題正在向酷Q爭取優化中!):neutral_face: -
SDK 2SDK 3SDK 4.0
Interface都放到Native.Sdk項目裏了,而Native.Sdk 可以在Nuget安裝了!:cupid: -
SDK 1SDK 2SDK 3SDK 4.0
Native.Core.CQMain是酷Q應用主入口類,所有事件必須繼承事件介面Native.Sdk/Cqp/Interface/I*並以應用json(Native.Core/app.json)文件中的相應事件屬性name命名註冊。註冊命名配對主要作用是針對多個相同類別事件的區分,比如事件具不一優先性或是正則特性處理各自反響之用。:star: -
SDK 3
Native.Csharp\App\Event\Event_AppMain更改至Native.Csharp\App\CQMain實現方法還是一樣喔。(具體可參照範例實現):grey_exclamation: -
SDK 3
Common常用類不存在了,若要從外部呼叫CQApi,除了可以傳遞屬性外還可以如SDK 3一樣,自行建立一個新的Static Class在酷Q启动事件儲存相應e.CQApi及e.CQLog。而IsRunning則是在應用啟用/停用事件下修改其狀態。(具體可參照範例實現):no_mouth: -
SDK 3 T4 Template 從3個文件
LibExport.tt,MenuExport.tt,StatusExport.tt合併至一個了在Native.Csharp\App\Export\CQExport.tt還提供運行日誌App\Export\CQExport.log!:+1: -
SDK 3
CqMsg消息解析類在事件屬性e.Message.CQCodes幫你解析好了,可以直接調用 👌 -
SDK 3
CqCode轉換是在CQApi下的static類別,需要直接調用而不是用e.CQApi下.還有最後記得.ToString()或.ToSendString()才會是String類別的喔 !:grimacing: -
SDK 3 許多Interface合併了,以
e.SubType區分:muscle:IReceiveOnlineStatusMessage,IReceiveDiscussPrivateMessage,IReceiveGroupPrivateMessage,IReceiveFriendMessage合併進IPrivateMessageIReceiveGroupMemberLeave,IReceiveGroupMemberRemove合併進IGroupMemberDecreaseIReceiveGroupMemberPass,IReceiveGroupMemberBeInvitee合併進IGroupMemberIncrease
-
SDK 3 個人事件實現可以與
Native.Csharp項目分離了,只需要在個人項目下引用SDK,Native.Csharp引用個人項目即可(具體可參照範例實現):clap: -
SDK 2 所有Event 都改由你實現了!
Event_AppStatus,Event_DiscussMessage,Event_FriendMessage,Event_GroupMessage,Event_OtherMessage,Event_UserExpand被移除了啦:fearful: -
SDK 2 《Interface 的分離與合併,變更大事典》
Native.Csharp\App\Interface\*都移動到Native.Csharp.Sdk\Cqp\Interface\*更進一步分離關係:heart:- 在线状态消息
Native.Csharp\App\Interface\IEvent_OtherMessage更名並移動至Native.Csharp.Sdk\Cqp\Interface\IPrivateMessage - 酷Q菜單
Native.Csharp\App\Interface\IEvent_UserExpand更名並移動至Native.Csharp.Sdk\Cqp\Interface\IMenuCall - 群事件
Native.Csharp\App\Interface\IEvent_GroupMessage被分類至多個接口而部份接口又合併了多個事件(?IGroupAddRequest,IGroupBanSpeak,IGroupManageChange,IGroupMemberDecrease,IGroupMemberIncrease,IGroupMessage,IGroupUpload(注意!接口內還有e.SubType區分):dizzy:
-
SDK 2
Native.Csharp\App\Core\UserExport沒有了,從SDK 3MenuExport.tt到SDK 4 統一Native.Csharp\App\Export\CQExport.tt在生成事件 👀 -
SDK 2
Native.Csharp\App\Mode\*都移動到Native.Csharp.Sdk\Cqp\EventArgs\*更進一步分離關係:heart: -
SDK 2
Native.Csharp項目多了一個組件優化工具,解決在酷Q內還行多個C#應用分離衝突用的。:sparkles: -
SDK 2 訊息事件中的攔截事件傳遞參數由
e.Handled更名至e.Handler了喔:sweat_drops: -
SDK 2 好友/群添加請求的識別flag 從
e.Tag更名至e.ResponseFlag更名至e.Request了:heart: -
SDK 2 寫酷Q日誌
Common.CqApi.AddLoger在各接收訊息事件的傳遞參數e.CQLog下了:sunglasses: -
SDK 1 .NET4.0 不支持了,架構也改變太多,酷Q提供了更多接口,建議重新建設方案:sob:
-
SDK 2 提取群列表永遠為
null😂 -
SDK 2 取群列表時,如出現未知性別會引致發生錯誤 😱
-
SDK 2 非簡體中文下取得的事件内文是亂碼 😱
-
SDK 2 回覆非GBK 字符集文字時是亂碼 😱
-
SDK 2 回覆時由於
Pointer問題可能引致酷Q閃退 ❗ -
SDK 2SDK 3 異常處理沒正確引導至酷Q錯誤事件傳遞 😱
-
SDK 2 舊版本VS(特指2012)會在建置時發生錯誤 😔
-
SDK 2 自帶的UI項目會在多次打開菜單時爆炸 💥
-
SDK 2 在酷Q實現多個應用時,會因為自帶的UI項目而爆炸 💥
-
SDK 2
Tool.IniObject會引致酷Q閃退(StackOverThrow) 😣 -
SDK 2
Tool.HttpWebClient之 Cookies 處理會引致酷Q閃退 -
SDK 2 正確注冊但沒觸發事件 😲
-
SDK 2SDK 3 附加至處理序會引致酷Q爆炸 💥
-
SDK 2SDK 3懸浮窗的參數傳遞出錯會引致酷Q爆炸 💥
-
SDK 2SDK 3許可功能命名拼寫錯誤:scream_cat:
-
SDK 2SDK 3 無法接收語音:confounded:
-
SDK 2SDK 3 部份版本因
Pointer問題引致記憶體流失:persevere: -
SDK 3 CqApi.AddFatalError 會引致酷Q爆炸 💥
-
SDK 3 組件優化工具無法處理
unmanaged&WPF組件而引致酷Q爆炸 💥 -
SDK 3群私聊消息事件和好友消息事件必須同時注冊:astonished:
-
SDK 3
CqApi.GetFile文件名是亂碼:confused: -
SDK 4 運算符重載導致
Stackoverthrow😰 -
SDK 4 群成員減少事件因QQ參數判斷而引致酷Q爆炸 💥
-
SDK 4 提取群列表會因QQ參數判斷而引致酷Q爆炸 💥
-
SDK 4 正則事件不能有效取出KV:persevere:
-
SDK 4 群文件上傳事件無法取出相應群號:persevere:
-
SDK 4 GroupMemberInfo 接口群成員過期時間有誤:persevere:
-
SDK 4.1 QQMessage 類判斷可能有誤
-
SDK 4.1 GroupMemberInfo 類, ToString 時發生錯誤 💥
-
Native.Csharp項目的原型,核心事件處理是在Code項目CQMain.cs事件注冊入口Domain應用主要資源AppData.cs酷Q Api 及 酷Q Log 靜態接口實作,若核心與入口分離需自行再實現,詳細可參照Code項目
Export事件注冊出口{...}
CQExport.tt生成DllExport綁定與Unity注入的腳本CQEventExport.cs各項事件類注入CQMenuExport.cs菜單注入CQStatusExport.cs懸浮窗注入
../Lib擴展資源{...}
Newtonsoft.Json.dll- 供CQExport.tt用作應用native.csharp.demo.json文件解析
ModuleInitializer.cs文件及資源釋放,對目錄進行連結確保程式庫能正確找到(4.1版本己拔除)app.json核心文件 - 應用的公開資料及事件分配,提交予酷Q讀取能確保應用能有效被存取
-
應用核心,所有事件觸發產生的任務都在這個項目實現
Action執行類{...}
ReceiveImage.cs接收圖片,呼叫酷Q應用接口去下載訊息中的圖片存檔至CoolQ\data\image文件夾ReceiveRecord.cs接收語音,同理;存檔在CoolQ\data\record文件夾RemoveMessage.cs撤回訊息,需具備管理員身份才能對一般會員發出的訊息撤回而且需要酷QPro版本
Helper輔助類{...}
ProcessExtensions.cs酷Q是以子程序讀取和加載應用以確保更穏定運行及提供更快速的重載應用功能,但有時候我們希望找到父程序的實體TCPHelper.cs我們不能確保TCP端口是空閒可用狀態,需要透過尋找表方式找出可用端User32.cs實現發送指令到酷Q父程序或是對視窗進行監測
Model模型類{...}
CQMenu.cs對酷Q父程序的菜單實例化,範例提供了執行重載應用之功能調用Friend.cs好友列表模型Notice.cs群公告模型Vip.csQQ會員模型
Module模組類{...}
CoolQModule.csWCF服務調用到的模組,實現API公開調用HomeModule.csWCF服務調用到的模組,實現靜態網站建立
Request請求類(針對QQ API)FriendRequest.cs好友列表的擴展,提供更多資料包括分組及QQ会員等級GroupRequest.cs提供群公告讀取Icon.cs用戶頭像及群頭像下載VipInfo.cs提供用戶QQ會員資料讀取
Require需求類(針對外部 API)Hitokoto.cs一言 一言指的就是一句話語,可以是動漫中的台詞,也可以是網絡上的各種小段子。TraceMoe.csTraceMoe 使用動畫番劇中的截圖找到更具體的番劇資料包括AniList及MyAnimeList的資料
Service服務類CoolQDataBase.cs讀取酷Q內部存取的SQLite數據庫以取得歷史訊息進行處理分析CoolQWebSocket.cs提供正向WebSocket服務供其他應用透過WebSocket通信CoolQZeroMq.cs提供PubSub模式的ZeroMQ推送Startup.csWCF服務啟動項
Common.cs公用類,實現具體API,Log及服務的定義Event_App.cs酷Q啟用/停用及初始化與結束Event_Friend.cs好友事件Event_Group.cs群組事件Event_Menu.cs應用菜單點擊事件Event_Message.cs接收QQ訊息事件Event_Message_Kawaii.cs接收QQ訊息事件(使用酷Q提供的正則分配)Event_Message_MenuCall.cs使用酷Q提供的正則對接收的QQ訊息進行指令分配Event_Status.cs懸浮窗事件,當在酷Q啟用該懸浮窗時,會每秒執行一次
-
酷Q內部存取的SQLite數據庫模型
Model模型類{...}
Cache.cs緩存模型Event.cs事件模型Log.cs日誌模型
SQLite.cspraeclarum/sqlite-net 能直接取用酷Q本身原有的SQLite組件CoolQ\bin\sqlite3.dllSQLiteAsync.cs
-
AppSetting.cs實現界面數劇的存取MainForm.*WinForm界面實現MainWindow.*WPF界面實現,提供基本訊息顯示收發功能Data數據MainData.cs主要數據
Model模型{...}
DesignViewModel.cs設計模式下的實作模型Group.cs群組數據模型Message.cs訊息數據模型ViewModel.cs生產模式下的實作模型
-
ApiExtention.cs實作對事件接口的優化
調用QQ API
- 好友列表
- 會員信息
- 頭像
- 取群公告
- 群文件下載[gu]
調用外部API
- 一言
- TraceMoe
調用酷QAPI
- 自動同意加好友
- 保存消息中的圖片到本地
- 正則事件
調用WINAPI
- 指令重載應用
建立API服務,實現其他程序調用
- Wcf訪問
- CoolQ HTTP API
- WebSocket
Wpf介面數據綁定與調用酷QAPI
- 群信息綁定
- 調用酷QAPI讀取群列表
菜單調用
- 調用WPF視窗
- 調用WinForm
群管理
- 加入群提示
自定懸浮窗
- 加好友數顯示
- 使用其定時觸發實現定時事件
SQLite 酷Q日誌存取,數據存取
- 讀取酷Q事件日誌中的訊息ID撤回信息
Tool.IniObject
- UI設置讀寫
A: 需要酷QPro版本以及圖片必須在酷Q的圖片文件夾下 CoolQ\data\image (支持下層文件夾)
假設你有將圖片放在 CoolQ\data\image\com.jie2gg.mylove 下,例如命名為 Jie2GG.jpg
public void GroupMessage(object sender, CQGroupMessageEventArgs e)
{
if(e.CQApi.IsAllowSendImage) //判斷可否發送圖片(需要酷Q Pro版本)
{
e.CQApi.SendGroupMessage(e.FromGroup,CQApi.CQCode_Image("com.jie2gg.mylove\Jie2GG.jpg"),"(秘)");
}
}