/Mirai-CSharp

使用C#调用mirai-api-http。

Primary LanguageC#GNU Affero General Public License v3.0AGPL-3.0

Mirai-CSharp

关于本项目

这是一个帮助C#开发者与 Mirai 交互的项目
它通过调用 mirai-api-http 提供的 http-api 与其交互

开始使用

安装

最简单的方式是从 nuget 上获取 Mirai-CSharp 包, 并且我们也推荐你在 nuget 包管理器中为项目安装它, 不过你也可以手动克隆项目, 编译, 并直接引用链接库.

在使用 nuget 安装包时, 如若要使用最新功能, 请勾选 "包括发行版"

注意, 最新版本已将包分离为 Mirai-CSharp 以及 Mirai-CSharp.HttpApi, 其中第一个中只包含程序接口之类的, 第二个中包含的是其实现, 并且在该预览版中, 与正式版发布的内容差异较大, 项目结构有巨大改变

示例

下面以一个最简单的控制台程序为示例, 对 QQ 内的任何 at 自己了的群聊消息响应 "Hello world" 文本消息

在目前已正式发布的最新版本中, Mirai-CSharp 的常用核心组件位于 Mirai_CSharp 以及 Mirai_CSharp.Models 命名空间中.

首先我们可以引用它, 下面是基础框架:

using System;
using System.Linq;
using Mirai.CSharp;
using Mirai.CSharp.Models;

namespace TestProj
{
    class Program
    {
        static void Main(string[] args)
        {
            
        }
    }
}

Mirai-CSharp 是要与 Mirai 的 mira-http-api 进行交互的, 所以我们接下来创建一个会话(Session), 并连接到在 Mirai 中已经登录的 QQ

// 下面是位于 Main 方法的代码
MiraiHttpSession session = new MiraiHttpSession();               // 创建会话
session.ConnectAsync(                                            // 连接并等待
    new MiraiHttpSessionOptions("localhost", 1234, "authKey"),   // 连接选项, 地址, 端口, 以及验证密钥, 这些均位于 mirai-http-api 配置文件中
    1234567890).Wait();                                          // Mirai 中已经登录的 QQ 机器人的 QQ 号码	

下面为 session 添加群聊成员消息时间的处理方法:

// 下面是位于 Main 方法的代码
session.GroupMessageEvt += async (sender, e) =>      
{
    await sender.SendGroupMessageAsync(e.Sender.Group.Id, new PlainMessage("Hello world"));   // 在消息发送者所在的群聊内发送 Hello world
    return false;
};
session.GroupMessageEvt += async (sender, e) =>      // Mirai-CSharp 的事件处理应该是纯异步的, 我们应该使用异步方法(返回Task<bool>)
{
    if (e.Chain.Where(v => v is AtMessage atMsg && atMsg.Target == session.QQNumber).Any())       // 判断是否 at 自己
        await sender.SendGroupMessageAsync(e.Sender.Group.Id, new PlainMessage("Hello world"));   // 发送 "Hello world"
    
    // PlainMessage 位于 Mirai_CSharp.Models 命名空间下, 基于 IMessage 

    return false;    // Task 的返回结果标识当前事件是否被阻断, 如果返回 true, 那么后面的事件订阅者将不会收到事件 (这里返回false表示不阻断)
};

改动

在当前的最新版本(预览版)中, 包已经分离开来, 由旧的只有一个 "Mirai-CSharp" 就包含所有功能, 变更为 "Mirai-CSharp" 提供基本接口, "Mirai-CSharp.HttpApi" 提供接口实现.

并且一些类型的命名空间也有所改动, 例如原来的 MiraiHttpSession 被移动到 Mirai.CSharp.HttpApi.Models 命名空间. 所以在使用最新预览版时应注意命名空间的更改.

注意事项

  • 本项目使用C# 9.0编写, 你需要至少.NET Core 2.0.NET Framework 4.6.1才能使用本项目, 其中所有的api均为异步方法

使用例子