傻妞机器人
SillyGirl 是一个基于 Go 语言 开发的高性能开源机器人框架,其设计核心围绕强大的 JavaScript 插件系统 展开。框架内置了完整的 ECMAScript 5.1 运行时(基于 Goja 引擎),允许开发者使用熟悉的 JavaScript 语法编写插件,并通过热重载机制实现功能的动态扩展,无需重启服务。
框架提供了丰富的内置能力:持久化键值存储、Cron 定时任务调度、HTTP/WebSocket 服务、gRPC 跨语言 RPC、Web Admin 管理面板、多平台机器人适配器等。开发者可以通过简单的 JavaScript 脚本快速构建具有复杂交互逻辑的机器人应用,并同时接入多个平台(QQ、Web、Pagermaid 等)的多个机器人实例,实现统一的业务逻辑与跨平台消息互通。
request、crypto、os 等常用 Node API 的模拟实现Sender 和 Factory 接口接入核心引擎watch 机制,配置变更实时通知插件,实现热配置更新robfig/cron,支持秒级和分钟级表达式,多平台独立调度s.listen() 支持按规则捕获后续消息,实现对话式交互…数据流:
Sender 对象rule 规则Sender 接口回复从 Releases 下载对应系统的可执行文件:
# Linux / macOS
chmod +x sillyGirl
./sillyGirl -t
# Windows
sillyGirl.exe -t-t 参数开启终端机器人模式,启动后可直接在命令行与程序交互:
2023/06/01 08:26:40 [I] 默认使用 boltdb 进行数据存储。
2023/06/01 08:26:40 [I] Http 服务已运行(8080)。访问 http://localhost:8080/admin 打开 Admin 管理面板。
git clone https://github.com/cdle/sillyGirl.git
cd sillyGirl
go build -o sillyGirldocker build -t sillygirl .
docker run -d -p 8080:8080 -v $(pwd)/data:/data sillygirl创建 hello.js:
/**
* @title HelloWorld
* @rule raw ^你好$
*/
s.reply("Hello World!");在终端输入 你好,即可看到回复 Hello World!。
进阶示例 — 猜拳游戏:
/**
* @title 猜拳游戏
* @rule 猜拳
*/
s.reply("你先出,请在10秒内出拳!");
const result = s.listen({
rules: ["[出拳:剪刀,石头,布]"],
timeout: 10000,
handle: (s) => {
const choose = s.param("出拳");
const win = { "石头": "布", "剪刀": "石头", "布": "剪刀" };
s.reply(`我出${win[choose]},我赢了!`);
},
});
if (!result) {
s.reply("你没出拳,算我赢了!");
}更多开发文档见 docs/。
…| 层次 | 技术 | 说明 |
|---|---|---|
| 语言 | Go 1.18+ | 核心框架开发语言 |
| JS 运行时 | Goja | ECMAScript 5.1,纯 Go 实现 |
| Web 框架 | Gin | HTTP 服务与 REST API |
| 前端 | React / Ant Design Pro | Admin 管理面板 |
| 存储 | BoltDB / Redis / MongoDB | 键值对持久化 |
| 定时任务 | robfig/cron/v3 | Cron 表达式调度 |
| RPC | gRPC | 跨语言服务接口 |
| 消息协议 | CQHTTP / 自定义 | QQ 等平台的通信协议 |
| 文档 | 说明 |
|---|---|
| docs/quickstart.md | 详细安装与配置指南 |
| docs/plugin-dev.md | 插件开发完整指南与 API 详解 |
| docs/architecture.md | 架构设计与核心模块分析 |
| docs/api-reference.md | REST、gRPC 与 JavaScript API 参考 |
| docs/deployment.md | 二进制、Docker 与反向代理部署 |
本项目经历了两个主要阶段:
本项目不再活跃维护,但代码和文档保持开源状态,供社区参考和使用。
暂无开放 Issues,或尚未同步最近议题。