Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Aug 2, 2020. It is now read-only.

Jie2GG/Native.Framework

 
 

Repository files navigation

範例目錄

範例說明

這個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.csExport\.*是直接在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.Tool IniConfig 新増序列化和反序列化特性

  • SDK 4.2 Native.Tool IniConfig 更完善處理入參及內部微調

  • 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.CQApie.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 合併進 IPrivateMessage
    • IReceiveGroupMemberLeave,IReceiveGroupMemberRemove 合併進 IGroupMemberDecrease
    • IReceiveGroupMemberPass,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.ttSDK 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 3CqApi.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 時發生錯誤 💥

項目結構

  1. Core
    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讀取能確保應用能有效被存取
  2. Code
    應用核心,所有事件觸發產生的任務都在這個項目實現
    • 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.cs QQ會員模型
    • Module 模組類
      {...}
      • CoolQModule.cs WCF服務調用到的模組,實現API公開調用
      • HomeModule.cs WCF服務調用到的模組,實現靜態網站建立
    • Request 請求類(針對QQ API)
      • FriendRequest.cs 好友列表的擴展,提供更多資料包括分組及QQ会員等級
      • GroupRequest.cs 提供群公告讀取
      • Icon.cs 用戶頭像及群頭像下載
      • VipInfo.cs 提供用戶QQ會員資料讀取
    • Require 需求類(針對外部 API)
      • Hitokoto.cs 一言 一言指的就是一句話語,可以是動漫中的台詞,也可以是網絡上的各種小段子。
      • TraceMoe.cs TraceMoe 使用動畫番劇中的截圖找到更具體的番劇資料包括AniListMyAnimeList的資料
    • Service 服務類
      • CoolQDataBase.cs 讀取酷Q內部存取的SQLite數據庫以取得歷史訊息進行處理分析
      • CoolQWebSocket.cs 提供正向WebSocket服務供其他應用透過WebSocket通信
      • CoolQZeroMq.cs 提供PubSub模式的ZeroMQ推送
      • Startup.cs WCF服務啟動項
    • 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啟用該懸浮窗時,會每秒執行一次
  3. DataBase
    酷Q內部存取的SQLite數據庫模型
    • Model 模型類
      {...}
      • Cache.cs 緩存模型
      • Event.cs 事件模型
      • Log.cs 日誌模型
    • SQLite.cs praeclarum/sqlite-net 能直接取用酷Q本身原有的SQLite組件CoolQ\bin\sqlite3.dll
    • SQLiteAsync.cs
  4. UI
    • AppSetting.cs 實現界面數劇的存取
    • MainForm.* WinForm界面實現
    • MainWindow.* WPF界面實現,提供基本訊息顯示收發功能
    • Data 數據
      • MainData.cs 主要數據
    • Model 模型
      {...}
      • DesignViewModel.cs 設計模式下的實作模型
      • Group.cs 群組數據模型
      • Message.cs 訊息數據模型
      • ViewModel.cs生產模式下的實作模型
  5. Native.Sdk.Extension
    • 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設置讀寫

一切從需求開始

New issue

Q:怎樣發送圖片?

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"),"(秘)");
   }
}

About

完全由 C# 语言编写的 QQ机器人插件 SDK

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors 3

  •  
  •  
  •