EleCho.GoCqHttpSdk
1.0.0-alpha1
Prefix Reserved
See the version list below for details.
dotnet add package EleCho.GoCqHttpSdk --version 1.0.0-alpha1
NuGet\Install-Package EleCho.GoCqHttpSdk -Version 1.0.0-alpha1
<PackageReference Include="EleCho.GoCqHttpSdk" Version="1.0.0-alpha1" />
paket add EleCho.GoCqHttpSdk --version 1.0.0-alpha1
#r "nuget: EleCho.GoCqHttpSdk, 1.0.0-alpha1"
// Install EleCho.GoCqHttpSdk as a Cake Addin #addin nuget:?package=EleCho.GoCqHttpSdk&version=1.0.0-alpha1&prerelease // Install EleCho.GoCqHttpSdk as a Cake Tool #tool nuget:?package=EleCho.GoCqHttpSdk&version=1.0.0-alpha1&prerelease
GoCqHttpSdk
欸嘿, 是一个 go-cqhttp 的 .NET SDK ~ (但是目前仍在开发中qwq)
支持:
正向 WebSocket, 正向 HTTP.
同时支持 array 格式和 string 格式上报数据.
使用:
连接
要与 go-cqhttp 建立一个 WebSocket 连接, 需要使用位于 NullLib.GoCqHttpSdk
命名空间下的 CqWsSession
来创建一个会话
// 初始化一个 CqWsSession 用来与 go-cqhttp
CqWsSession session = new CqWsSession(new CqWsSessionOptions()
{
BaseUri = new Uri("ws://127.0.0.1:6700"), // WebSocket 地址
UseApiEndPoint = true, // 使用 api 终结点
UseEventEndPoint = true, // 使用事件终结点
});
指定 UseApiEndPoint 和 UseEventEndPoint 将使用独立的 api 和 event 套接字来单独处理功能调用以及事件处理 参考文档: Onebot11:正向WebSocket
上报
上报数据也就是所谓的 "事件", 所有继承了 NullLib.GoCqHttpSdk.ICqPostSession
接口的类都将处理上报数据, 该接口规定必须要有一个名为 PostPipeline 的 CqPostPipeline
成员
CqPostPipeline
是用户处理上报的途径, 它符合中间件设计模型, 你可以直接使用使用它添加中间件.
CqWsSession session; // 要处理上报数据的会话
session.PostPipeline.Use(async (context, next) =>
{
// context 为上报数据的上下文, 其中包含了具体的信息
// 在这里添加你的逻辑代码 //
// next 是中间件管道中的下一个中间件,
// 如果你希望当中间件执行时, 不继续执行下一个中间件
// 可以选择不执行 next
await next();
});
上述订阅方法将会处理所有的上报, 我们更推荐使用 NullLib.GoCqHttpSdk.CqActionContextExtensions
类所提供的拓展方法, 通过它你可以非常便捷的处理任何具体类型的事件
CqWsSession session; // 要处理上报数据的会话
session.PostPipeline.UseGroupMsg(async (context, next) =>
{
// context 为 CqGroupMessagePostContext, 其中包含了群聊消息的具体信息
// 在这里添加你的逻辑代码 //
// 简单实现一个复读机:
if (context.RawMessage.StartsWith("echo "))
{
string msg = context.RawMessage.SubString(5); // 获取 "echo " 后的字符
context.SendGroupMsgAsync(context.GroupId, new CqTextMsg(msg)); // 发送它 (关于消息发送后面会详细讲解)
}
await next();
});
消息发送
所有继承了 NullLib.GoCqHttpSdk.ICqActionSession
接口的类都将具备使用 "Action" 的能力, 消息发送属于 "Action", 该接口规定必须有一个名为 ActionSender 的 CqActionSender
成员
CqActionSender
是程序向 go-cqhttp 发送 "Action" 的途径, 其中需要实现 CqAction
的发送逻辑以及响应逻辑, 你可以直接使用它来调用任何 CqAction
CqWsSession session; // 要使用 Action 的会话
session.ActionSender.SendActionAsync(new CqSendGroupMsgAction(群聊ID, new CqMsg[] { new CqTextMsg("一个文本消息") }));
可以看到, 使用 session.ActionSender 直接发送 Action
的步骤比较繁琐, 所以同样的, 推荐使用拓展方法, 它们由 NullLib.GoCqHttpSdk.CqActionSessionExtensions
提供.
CqWsSession session; // 要使用 Action 的会话
context.SendGroupMsgAsync(群聊ID, new CqTextMsg("一个文本消息")); // 发送它 (关于消息发送后面会详细讲解)
NullLib.GoCqHttpSdk.CqActionSessionExtensions
类不直接为CqActionSender
类提供拓展, 你只能在实现了ICqActionSession
接口的类上调用这些拓展方法
项目
关于数据结构
因为 go-cqhttp 给的数据, json 都是小驼峰, 并且为了用户操作上的便捷, 所以 JSON 解析上使用了以下方法:
- 分为用户的操作类和具体调用时使用的 Model 类
- 在调用接口, 或者解析上报的时候, 两种类会相互转换
- 一些原始 Model 类中的
data
字段, 或者params
字段, 他们在用户的操作类中直接作为类型成员存在, 而不独立分出一个data
或params
成员存放.
同时, 为了用户操作的便捷, 用户所操作的类与实际传输使用的类, 字段格式是不一样的, 例如在 Music 消息中 sub_type 表示该 Music 消息的音乐类型, 于是在用户的操作类中, 它使用 MusicType 命名.
消息
首先是 go-cqhttp
中的基础消息类型, 也就是 CQ 码(CQ Code):
它的 JSON 格式是这样的:
{
"type": "消息类型",
"data": {
// 消息的数据
}
}
如果让用户操作 data, 肯定有些繁琐, 所以在用户操作的类中, 是这样的:
public class CqXxxMsg : CqMsg
{
public override string Type => "消息类型"; // Type 是不允许用户修改的, 一个类型对应一个 Type
// 直接将消息数据作为消息的成员
}
上报
上报的原始数据 JSON 格式中, 并没有专门为数据抽出一个 data 字段, 所以不做特殊处理.
Action
Action 在 go-cqhttp 中的 JSON 格式与消息类似, 它为参数抽出了一个 params 字段, 然后将所有参数放在这个字段中. 所以在这方面, 做了与消息类型近似的处理, 也就是直接将参数独立出来, 而不是放在 params 字段中.
同样, ActionResult(Action 调用的返回结果) 也将数据放在了 data 字段中, 所以同样做了特殊处理.
贡献
关于任何对项目上的不满, 例如命名, 设计模式, 或者其他任何方面的问题, 直接提交一个 discussion 就可以啦, 然后咱们就可以讨论讨论具体要采取什么措施啦. ψ(`∇´)ψ
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 3.1
- System.Text.Json (>= 6.0.4)
-
.NETFramework 4.6.1
- System.Net.Http (>= 4.3.4)
- System.Text.Json (>= 6.0.4)
-
.NETStandard 2.0
- System.Text.Json (>= 6.0.4)
-
net5.0
- System.Text.Json (>= 6.0.4)
-
net6.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on EleCho.GoCqHttpSdk:
Package | Downloads |
---|---|
EleCho.GoCqHttpSdk.MessageMatching
EleCho.GoCqHttpSdk 的消息匹配拓展 |
|
EleCho.GoCqHttpSdk.CommandExecuting
EleCho.GoCqHttpSdk 的指令执行拓展 |
GitHub repositories (3)
Showing the top 3 popular GitHub repositories that depend on EleCho.GoCqHttpSdk:
Repository | Stars |
---|---|
yiyungent/KnifeHub
🧰 简单易用的效率工具平台
|
|
GardenHamster/Theresa3rd-Bot
一个QQ群聊机器人,基于Mirai和GoCQHttp,包括 Pixiv搜索、Pixiv推送、Pixiv日榜、词云、定时提醒、复读机等功能
|
|
Alex1911-Jiang/GreenOnions
一个Mirai的QQ机器人, 实现了搜图, RSS订阅转发, 根据PixivID下载原图, 翻译, setu等功能
|
Version | Downloads | Last updated |
---|---|---|
1.3.0 | 176 | 8/21/2024 |
1.2.6 | 173 | 8/18/2024 |
1.2.5 | 372 | 12/27/2023 |
1.2.4 | 426 | 9/20/2023 |
1.2.3 | 160 | 9/15/2023 |
1.2.2 | 307 | 7/17/2023 |
1.2.1 | 239 | 7/15/2023 |
1.2.0 | 225 | 7/13/2023 |
1.1.2 | 352 | 6/8/2023 |
1.1.1 | 191 | 6/8/2023 |
1.1.0 | 181 | 6/5/2023 |
1.0.14 | 294 | 5/19/2023 |
1.0.13 | 261 | 5/12/2023 |
1.0.12 | 266 | 4/11/2023 |
1.0.11 | 297 | 3/23/2023 |
1.0.10 | 285 | 3/19/2023 |
1.0.9 | 590 | 3/19/2023 |
1.0.8 | 376 | 3/12/2023 |
1.0.7 | 305 | 3/11/2023 |
1.0.6 | 304 | 3/8/2023 |
1.0.5 | 315 | 2/27/2023 |
1.0.4 | 288 | 2/26/2023 |
1.0.3 | 290 | 2/26/2023 |
1.0.2 | 270 | 2/23/2023 |
1.0.1 | 412 | 2/13/2023 |
1.0.0 | 880 | 2/12/2023 |
1.0.0-alpha6 | 237 | 2/4/2023 |
1.0.0-alpha5 | 147 | 2/4/2023 |
1.0.0-alpha4 | 189 | 1/16/2023 |
1.0.0-alpha3 | 170 | 1/15/2023 |
1.0.0-alpha2 | 143 | 1/13/2023 |
1.0.0-alpha1 | 197 | 5/17/2022 |