Skip to content

基于 OneBot-11标准 的、适配于 Lagrange.Onebot 的、C# .NET Standard 2.1 的异步机器人开发框架。

License

Notifications You must be signed in to change notification settings

XeronOwO/Makabaka

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

logo

Makabaka

一个基于 OneBot-11标准 的、适配于 Lagrange.Onebot 的、C# .NET Standard 2.1 的异步机器人开发框架。

说明

Warning

目前正在重构 Makabaka 2.0,绝大部分代码都使用 DI 进行了重构,因此调用逻辑与 1.x 差异较大。如果你从 1.x 迁移到 2.0 ,可能需要改动较多代码。

本项目将持续跟进 Lagrange.Core 项目进度。由于 Lagrange.Core 项目仍在开发当中,可能有部分功能暂未支持。
如果对该项目有任何问题,欢迎在 Issues 中提出。

安装

Makabaka 已发布到 NuGet ,可以通过NuGet包管理器搜索并安装到工程。
或者,可以直接去 Releases 中下载 .nupkg 文件。

已适配内容

消息类型
消息类型 是否支持
Text 🟢
Face 🟢
Image 🟢
Record 🟢
Video 🟢
At 🟢
Rps 🟢
Dice 🟢
Shake 🟢
Poke 🟢
Anonymous 🟢
Share 🟢
Contact 🟢
Location 🟢
Music 🟢
Reply 🟢
Forward 🟢
Node 🟢
Xml 🟢
Json 🟢
API
API 是否支持
/send_private_msg 🟢
/send_group_msg 🟢
/send_msg 🟢
/delete_msg 🟢
/get_msg 🟢
/get_forward_msg 🟢
/send_like 🟢
/set_group_kick 🟢
/set_group_ban 🟢
/set_group_anonymous_ban 🟢
/set_group_whole_ban 🟢
/set_group_admin 🟢
/set_group_anonymous 🟢
/set_group_card 🟢
/set_group_name 🟢
/set_group_leave 🟢
/set_group_special_title 🟢
/set_friend_add_request 🟢
/set_group_add_request 🟢
/get_login_info 🟢
/get_stranger_info 🟢
/get_friend_list 🟢
/get_group_info 🟢
/get_group_list 🟢
/get_group_member_info 🟢
/get_group_member_list 🟢
/get_group_honor_info 🟢
/get_cookies 🟢
/get_csrf_token 🟢
/get_credentials 🟢
/get_record 🟢
/get_image 🟢
/can_send_image 🟢
/can_send_record 🟢
/get_status 🟢
/get_version_info 🟢
/set_restart 🟢
/clean_cache 🔴
事件
推送类型 事件名称 是否支持
Message Private Message 🟢
Message Group Message 🟢
Notice Group File Upload 🟢
Notice Group Admin Change 🟢
Notice Group Member Decrease 🟢
Notice Group Member Increase 🟢
Notice Group Mute 🟢
Notice Friend Add 🟢
Notice Group Recall Message 🟢
Notice Friend Recall Message 🟢
Notice Group Poke 🟢
Notice Group red envelope luck king 🟢
Notice Group Member Honor Changed 🟢
Request Add Friend Request 🟢
Request Group Request/Invitations 🟢
Meta LifeCycle 🟢
Meta Heartbeat 🟢
适配器
适配器类型 是否支持
Http 🔴
Http-Post 🔴
ForwardWebSocket 🟢
ReverseWebSocket 🟢
拓展功能
功能 是否支持
获取收藏表情 🟢
获取好友历史消息记录 🟢
获取群组历史消息记录 🟢
构造合并转发消息 🟢
上传群文件 🟢
私聊发送文件 🟢
获取群根目录文件列表 🟢
获取群子目录文件列表 🟢
获取群文件资源链接 🟢
好友戳一戳 🟢
群组戳一戳 🟢

快速上手

配置文件

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "@Default": "日志等级,如果需要看到详细的收发数据包内容(例如提出 issue),请改成 Trace ,一般情况下用 Information 就行"
    }
  },
  "Bot": {
    "ForwardWebSocket": {
      "@ForwardWebSocket": "正向 WebSocket",
      "Enabled": true,
      "@Enabled": "是否启用。注意:一般情况下 ForwardWebSocket 与 ReverseWebSocket 同一时间只能存在一个",
      "Url": "ws://127.0.0.1:8081",
      "@Url": "远程 Lagrange.Onebot 的 ws 服务器地址",
      "AccessToken": "",
      "@AccessToken": "鉴权密钥",
      "ReconnectInterval": 1000,
      "ConnectionTimeout": 5000,
      "ApiTimeout": 10000
    },
    "ReverseWebSocket": {
      "@ReverseWebSocket": "反向 WebSocket",
      "Enabled": false,
      "@Enabled": "是否启用",
      "Url": "http://127.0.0.1:8082/onebot/v11/ws/",
      "@Url": "本地开启的 ws 服务器地址,请严格按照 http(s):// 开头、/ 结尾的格式,否则可能报错",
      "AccessToken": "",
      "@AccessToken": "鉴权密钥",
      "RestartInterval": 1000
    }
  }
}

无注释版本见 appsettings.json

代码

using Makabaka;
using Makabaka.Events;
using Makabaka.Messages;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace MyApp
{
    internal class Program
    {
        private static ILogger<Program> _logger = null!;

        static void Main(string[] args)
        {
            var builder = new MakabakaAppBuilder(args);
            var app = builder.Build();

            _logger = app.Services.GetRequiredService<ILogger<Program>>();
            app.BotContext.OnPrivateMessage += OnPrivateMessage;
            app.BotContext.OnGroupMessage += OnGroupMessage;

            app.Run();
        }

        private static Task OnPrivateMessage(object sender, PrivateMessageEventArgs e)
        {
            return OnMessage(e.Message, e);
        }

        private static Task OnGroupMessage(object sender, GroupMessageEventArgs e)
        {
            return OnMessage(e.Message, e);
        }

        private static async Task OnMessage(Message message, IMessageHandler reply)
        {
            if (message.ToString() == "文本测试")
            {
                await reply.ReplyAsync([new TextSegment("Hello, world!")]);
            }
        }
    }
}

详细的API见 Program.cs

开源协议

GPL-3.0 license

特别声明

  • 本项目完全免费,仅供学习、娱乐使用,请勿运用于商业、非法用途。
  • 因使用者使用不当而造成的法律责任,由使用者本人承担。