# 快速开始

如果你只是一个刚入门C#的小白,建议直接阅读下一节的HelloWorld

# 安装Mliybs.OneBot.V11

你可以通过NuGet (opens new window)下载安装Mliybs.OneBot.V11,或通过下述的几个方法来下载安装

# VisualStudio

在VS中,可以通过工具菜单的NuGet包管理器中搜索Mliybs.OneBot.V11并下载安装

# .NET CLI

在具有.NET CLI的环境中(如安装了.NET SDK后),可以在项目目录中在终端输入dotnet add package Mliybs.OneBot.V11进行下载安装

# 实例化OneBot对象

//Websocket,创建后自动连接
var bot = OneBot.Websocket(/*URL*/);

//HTTP,创建后自动监听
var bot = OneBot.Http(/*URL*/, /*监听地址*/);

//反向Websocket,创建后自动监听
var bot = OneBot.WebsocketReverse(/*监听地址*/);

# 处理收到消息

Mliybs.OneBot.V11使用了Rx.NET来通知消息事件以及其他事件

对于消息事件,你可以通过订阅MessageReceived来进行处理

bot.MessageReceived.Subscribe(x =>
{
    // 其他逻辑
});

消息事件的参数为抽象类MessageReceiver,消息内容存储在Message属性中,它的类型为消息链MessageChain,由多种不同的消息段(如@、回复、图片等)组成

你可以使用AllText属性将所有的纯文本消息拼接在一起作为字符串返回并与其他字符串比较,也可以直接将MessageChain与字符串用比较运算符==进行比较,这个方法将在消息链只包含一条纯文本消息且与字符串相等的情况下返回true,其余都为false

x.AllText == "111";
// 或
x == "111";

如果你只想在消息链为纯文字时处理请使用Text属性,该属性将在消息链只包含一条纯文字消息时返回该文字,除此以外返回null

MessageReceiver有两个派生类分别为GroupMessageReceiverPrivateMessageReceiver,分别表示收到群聊消息和私聊消息,消息事件的参数只会为这两个派生类的其中一个

可以使用is关键字判断参数类型,如:

if (x is GroupMessageReceiver receiver)
{
    // 其他逻辑
}

或使用拓展方法AtGroupAtPrivate如:

bot.MessageReceived
    .AtGroup()
    .Subscribe(x =>
    {
        // 其他逻辑
    });

你也可以使用Rx.NET提供的OfType操作符

Mliybs.OneBot.V11同时还提供了一个工具类来快速对收到的消息进行回复,通过With方法获取工具对象,省去了判断消息类型的麻烦

// 在收到消息时自动向对方(或群内)发送消息
bot.MessageReceived
    .Subscribe(x => x.With(bot).Send("114514"));

# 主动发送消息

OneBot类封装了一系列API进行操作,其中发送消息的为SendMessage方法,你也可以使用只针对群聊或私聊的SendGroupMessageSendPrivateMessage

发送的消息内容用消息链MessageChain表示,如果你的消息是纯文本,可以直接使用字符串代替,如果不是则可以使用MessageChainBuilder,快速构建一个消息链

var message = new MessageChainBuilder()
    .At(/*QQ号*/)
    .Text(" 亻尔女子")
    .Build(); // 结尾的Build方法是必要的

所有的API都为异步方法,使用await关键字会验证操作是否成功并返回它们的操作结果,不成功则会抛出OperationFailedException异常,如果你不关心是否成功与返回结果,不要使用await关键字

await bot.SendGroupMessage(/*群号*/, "114514");

# 阻塞主线程

为了使程序持续运行,必须阻塞主线程,防止程序结束

一个简单的例子是你可以使用Console.Read方法,它会在你在控制台键入下一个字符前阻塞运行

除此以外还可以使用TaskCompletionSourceAutoResetEventManualResetEvent等,这里不再赘述