gracybot 1.9.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gracybot-1.9.2/MANIFEST.in +25 -0
- gracybot-1.9.2/PKG-INFO +304 -0
- gracybot-1.9.2/README.md +262 -0
- gracybot-1.9.2/config.template.json +22 -0
- gracybot-1.9.2/core/__init__.py +117 -0
- gracybot-1.9.2/core/config.py +166 -0
- gracybot-1.9.2/core/config_manager.py +300 -0
- gracybot-1.9.2/core/decorators/__init__.py +31 -0
- gracybot-1.9.2/core/decorators/async_utils.py +95 -0
- gracybot-1.9.2/core/decorators/context.py +46 -0
- gracybot-1.9.2/core/decorators/handler.py +109 -0
- gracybot-1.9.2/core/decorators/registration.py +237 -0
- gracybot-1.9.2/core/decorators/security.py +140 -0
- gracybot-1.9.2/core/decorators/session.py +50 -0
- gracybot-1.9.2/core/event/__init__.py +95 -0
- gracybot-1.9.2/core/gracy_adapter/__init__.py +38 -0
- gracybot-1.9.2/core/gracy_adapter/adapter.py +77 -0
- gracybot-1.9.2/core/gracy_adapter/event.py +38 -0
- gracybot-1.9.2/core/gracy_adapter/gracy_bot.py +42 -0
- gracybot-1.9.2/core/gracy_adapter/message.py +66 -0
- gracybot-1.9.2/core/gracy_adapter/onebot/__init__.py +12 -0
- gracybot-1.9.2/core/gracy_adapter/onebot/adapter.py +122 -0
- gracybot-1.9.2/core/gracy_adapter/onebot/cq.py +126 -0
- gracybot-1.9.2/core/gracy_adapter/onebot/http.py +242 -0
- gracybot-1.9.2/core/gracy_adapter/onebot/onebot_config.template.json +6 -0
- gracybot-1.9.2/core/gracy_adapter/onebot/sanitize.py +33 -0
- gracybot-1.9.2/core/gracy_adapter/onebot/ws.py +502 -0
- gracybot-1.9.2/core/gracy_adapter/send.py +130 -0
- gracybot-1.9.2/core/gracy_session/__init__.py +49 -0
- gracybot-1.9.2/core/gracy_session/gracy_session.py +95 -0
- gracybot-1.9.2/core/gracy_session/gracy_session_handler.py +193 -0
- gracybot-1.9.2/core/gracy_session/gracy_session_manager.py +286 -0
- gracybot-1.9.2/core/handler.py +92 -0
- gracybot-1.9.2/core/logger_manager.py +372 -0
- gracybot-1.9.2/core/main.py +511 -0
- gracybot-1.9.2/core/monitor.py +248 -0
- gracybot-1.9.2/core/pipeline/__init__.py +107 -0
- gracybot-1.9.2/core/pipeline/stages.py +498 -0
- gracybot-1.9.2/core/plugin_manager.py +673 -0
- gracybot-1.9.2/core/security.py +246 -0
- gracybot-1.9.2/core/security_manager.py +506 -0
- gracybot-1.9.2/core/tools/__init__.py +15 -0
- gracybot-1.9.2/core/tools/cli/__init__.py +15 -0
- gracybot-1.9.2/core/tools/cli/__main__.py +4 -0
- gracybot-1.9.2/core/tools/cli/app.py +304 -0
- gracybot-1.9.2/core/tools/cli/main.py +2 -0
- gracybot-1.9.2/core/tools/cli/plugins.py +138 -0
- gracybot-1.9.2/core/tools/cli/system.py +284 -0
- gracybot-1.9.2/core/tools/cli/utils.py +128 -0
- gracybot-1.9.2/core/tools/validator.py +141 -0
- gracybot-1.9.2/core/utils.py +78 -0
- gracybot-1.9.2/docs/01-/345/277/253/351/200/237/345/205/245/351/227/250.md +136 -0
- gracybot-1.9.2/docs/02-/346/241/206/346/236/266/346/246/202/350/277/260.md +134 -0
- gracybot-1.9.2/docs/03-/345/256/211/350/243/205/344/270/216/345/220/257/345/212/250.md +220 -0
- gracybot-1.9.2/docs/04-/351/241/271/347/233/256/346/236/266/346/236/204.md +220 -0
- gracybot-1.9.2/docs/05-/346/217/222/344/273/266/345/274/200/345/217/221/346/214/207/345/215/227/357/274/210/346/226/260/351/243/216/346/240/274/357/274/211.md +251 -0
- gracybot-1.9.2/docs/06-/346/217/222/344/273/266/345/274/200/345/217/221/346/214/207/345/215/227/357/274/210/346/227/247/351/243/216/346/240/274/357/274/211.md +197 -0
- gracybot-1.9.2/docs/07-/346/226/260/346/227/247/351/243/216/346/240/274/345/257/271/346/257/224.md +242 -0
- gracybot-1.9.2/docs/08-metadata.toml/350/247/204/350/214/203.md +155 -0
- gracybot-1.9.2/docs/09-CLI/345/221/275/344/273/244/344/270/216/350/260/203/350/257/225.md +248 -0
- gracybot-1.9.2/docs/10-/346/266/210/346/201/257/346/256/265/344/270/216/351/200/202/351/205/215/345/231/250.md +184 -0
- gracybot-1.9.2/docs/11-/345/237/272/347/241/200API/345/217/202/350/200/203.md +204 -0
- gracybot-1.9.2/docs/12-/345/270/270/350/247/201/351/227/256/351/242/230/344/270/216/346/234/200/344/275/263/345/256/236/350/267/265.md +270 -0
- gracybot-1.9.2/gracybot.egg-info/PKG-INFO +304 -0
- gracybot-1.9.2/gracybot.egg-info/SOURCES.txt +138 -0
- gracybot-1.9.2/gracybot.egg-info/dependency_links.txt +1 -0
- gracybot-1.9.2/gracybot.egg-info/entry_points.txt +3 -0
- gracybot-1.9.2/gracybot.egg-info/requires.txt +24 -0
- gracybot-1.9.2/gracybot.egg-info/top_level.txt +3 -0
- gracybot-1.9.2/plugins/Easysearch/Easysearch.py +74 -0
- gracybot-1.9.2/plugins/Easysearch/__init__.py +4 -0
- gracybot-1.9.2/plugins/Easysearch/config.py +16 -0
- gracybot-1.9.2/plugins/Easysearch/core/draw.py +33 -0
- gracybot-1.9.2/plugins/Easysearch/main.py +143 -0
- gracybot-1.9.2/plugins/Easysearch/metadata.toml +23 -0
- gracybot-1.9.2/plugins/Easysearch/requirements.txt +2 -0
- gracybot-1.9.2/plugins/ExamplePlugin/ExamplePlugin.py +38 -0
- gracybot-1.9.2/plugins/ExamplePlugin/README.md +31 -0
- gracybot-1.9.2/plugins/ExamplePlugin/__init__.py +4 -0
- gracybot-1.9.2/plugins/ExamplePlugin/metadata.toml +19 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/GracyUI_plugin.py +151 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/__init__.py +7 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/backend/__init__.py +1 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/backend/app.py +34 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/backend/routes/__init__.py +8 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/backend/routes/auth.py +31 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/backend/routes/bot.py +33 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/backend/routes/dashboard.py +136 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/backend/routes/logs.py +139 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/frontend/QUICKSTART.md +179 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/frontend/README.md +214 -0
- gracybot-1.9.2/plugins/GracyUI_plugin/metadata.toml +19 -0
- gracybot-1.9.2/plugins/Help_plugin/Help_plugin.py +54 -0
- gracybot-1.9.2/plugins/Help_plugin/__init__.py +4 -0
- gracybot-1.9.2/plugins/Help_plugin/config.py +24 -0
- gracybot-1.9.2/plugins/Help_plugin/core/draw.py +538 -0
- gracybot-1.9.2/plugins/Help_plugin/metadata.toml +14 -0
- gracybot-1.9.2/plugins/Help_plugin/requirements.txt +1 -0
- gracybot-1.9.2/plugins/LLM_Chat/LLM_Chat.py +118 -0
- gracybot-1.9.2/plugins/LLM_Chat/README.md +78 -0
- gracybot-1.9.2/plugins/LLM_Chat/__init__.py +9 -0
- gracybot-1.9.2/plugins/LLM_Chat/config.json +14 -0
- gracybot-1.9.2/plugins/LLM_Chat/config.py +19 -0
- gracybot-1.9.2/plugins/LLM_Chat/config.template.json +14 -0
- gracybot-1.9.2/plugins/LLM_Chat/core/api_handler.py +114 -0
- gracybot-1.9.2/plugins/LLM_Chat/core/database.py +175 -0
- gracybot-1.9.2/plugins/LLM_Chat/core/event_handler.py +278 -0
- gracybot-1.9.2/plugins/LLM_Chat/core/poke_handler.py +98 -0
- gracybot-1.9.2/plugins/LLM_Chat/core/scheduler.py +165 -0
- gracybot-1.9.2/plugins/LLM_Chat/metadata.toml +14 -0
- gracybot-1.9.2/plugins/LLM_Chat/requirements.txt +2 -0
- gracybot-1.9.2/plugins/MonitorPlugin/MonitorPlugin.py +266 -0
- gracybot-1.9.2/plugins/MonitorPlugin/__init__.py +4 -0
- gracybot-1.9.2/plugins/MonitorPlugin/metadata.toml +14 -0
- gracybot-1.9.2/plugins/Screenshot/Screenshot.py +37 -0
- gracybot-1.9.2/plugins/Screenshot/__init__.py +4 -0
- gracybot-1.9.2/plugins/Screenshot/capture.py +17 -0
- gracybot-1.9.2/plugins/Screenshot/main.py +56 -0
- gracybot-1.9.2/plugins/Screenshot/metadata.toml +18 -0
- gracybot-1.9.2/plugins/SysInfo_plugin/README.md +31 -0
- gracybot-1.9.2/plugins/SysInfo_plugin/SysInfo_plugin.py +518 -0
- gracybot-1.9.2/plugins/SysInfo_plugin/__init__.py +2 -0
- gracybot-1.9.2/plugins/SysInfo_plugin/core/draw.py +577 -0
- gracybot-1.9.2/plugins/SysInfo_plugin/core/napcat_api.py +64 -0
- gracybot-1.9.2/plugins/SysInfo_plugin/metadata.toml +22 -0
- gracybot-1.9.2/plugins/Update_Plugin/README.md +61 -0
- gracybot-1.9.2/plugins/Update_Plugin/Update_Plugin.py +691 -0
- gracybot-1.9.2/plugins/Update_Plugin/__init__.py +4 -0
- gracybot-1.9.2/plugins/Update_Plugin/metadata.toml +14 -0
- gracybot-1.9.2/plugins/Xiaoyu_plugin/Xiaoyu_plugin.py +503 -0
- gracybot-1.9.2/plugins/Xiaoyu_plugin/__init__.py +4 -0
- gracybot-1.9.2/plugins/Xiaoyu_plugin/core/draw.py +299 -0
- gracybot-1.9.2/plugins/Xiaoyu_plugin/metadata.toml +25 -0
- gracybot-1.9.2/pyproject.toml +80 -0
- gracybot-1.9.2/setup.cfg +4 -0
- gracybot-1.9.2/style/gracybot_logo.py +475 -0
- gracybot-1.9.2/style/log_colors.py +97 -0
- gracybot-1.9.2/style/resource/DouyinSansBold.otf +0 -0
- gracybot-1.9.2/style/resource/gracybot_logo.png +0 -0
- gracybot-1.9.2/style/styling.py +240 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# 模板配置文件
|
|
2
|
+
include config.template.json
|
|
3
|
+
include core/gracy_adapter/onebot/onebot_config.template.json
|
|
4
|
+
|
|
5
|
+
# 插件元数据(仅 .py .toml .txt .md)
|
|
6
|
+
recursive-include plugins *.toml
|
|
7
|
+
recursive-include plugins *.txt
|
|
8
|
+
recursive-include plugins *.md
|
|
9
|
+
|
|
10
|
+
# 文档
|
|
11
|
+
include README.md
|
|
12
|
+
include docs/*.md
|
|
13
|
+
|
|
14
|
+
# 资源文件
|
|
15
|
+
recursive-include style *.py
|
|
16
|
+
recursive-include style *.png
|
|
17
|
+
recursive-include style *.otf
|
|
18
|
+
|
|
19
|
+
# ─── 排除大型无用目录 ───
|
|
20
|
+
prune plugins/GracyUI_plugin/frontend/node_modules
|
|
21
|
+
prune plugins/GracyUI_plugin/frontend/dist
|
|
22
|
+
prune plugins/Easysearch/data
|
|
23
|
+
prune plugins/Screenshot/data
|
|
24
|
+
prune plugins/Help_plugin/data
|
|
25
|
+
prune plugins/Xiaoyu_plugin/data
|
gracybot-1.9.2/PKG-INFO
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gracybot
|
|
3
|
+
Version: 1.9.2
|
|
4
|
+
Summary: GracyBot - 个性化定制化QQ机器人框架
|
|
5
|
+
Author-email: 小禹 <bc333333@163.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/MiniYv/GracyBot
|
|
8
|
+
Project-URL: Repository, https://github.com/MiniYv/GracyBot
|
|
9
|
+
Keywords: qq,bot,chatbot,napcat,onebot,qqbot
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Communications :: Chat
|
|
19
|
+
Classifier: Operating System :: OS Independent
|
|
20
|
+
Requires-Python: >=3.9
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
Requires-Dist: typer>=0.15.0
|
|
23
|
+
Requires-Dist: quart>=0.20.0
|
|
24
|
+
Requires-Dist: hypercorn>=0.17.0
|
|
25
|
+
Requires-Dist: requests>=2.31.0
|
|
26
|
+
Requires-Dist: websockets>=12.0
|
|
27
|
+
Requires-Dist: tomli>=2.0.0
|
|
28
|
+
Requires-Dist: openai>=1.0.0
|
|
29
|
+
Requires-Dist: Pillow>=10.0.0
|
|
30
|
+
Requires-Dist: numpy>=1.24.0
|
|
31
|
+
Requires-Dist: psutil>=5.9.0
|
|
32
|
+
Requires-Dist: py-cpuinfo>=9.0.0
|
|
33
|
+
Requires-Dist: mss>=9.0.0
|
|
34
|
+
Provides-Extra: llm
|
|
35
|
+
Requires-Dist: aiosqlite>=0.20.0; extra == "llm"
|
|
36
|
+
Provides-Extra: web
|
|
37
|
+
Requires-Dist: aiohttp>=3.9.0; extra == "web"
|
|
38
|
+
Provides-Extra: search
|
|
39
|
+
Requires-Dist: playwright>=1.40.0; extra == "search"
|
|
40
|
+
Provides-Extra: all
|
|
41
|
+
Requires-Dist: gracybot[llm,search,web]; extra == "all"
|
|
42
|
+
|
|
43
|
+
<p align="center">
|
|
44
|
+
<img src="plugins/GracyUI_plugin/frontend/public/gracy.png" alt="GracyBot" width="200" />
|
|
45
|
+
</p>
|
|
46
|
+
|
|
47
|
+
<h1 align="center">GracyBot</h1>
|
|
48
|
+
|
|
49
|
+
<p align="center">
|
|
50
|
+
<img src="https://img.shields.io/badge/Python-3.11+-blue?logo=python&logoColor=white" alt="Python" />
|
|
51
|
+
<img src="https://img.shields.io/badge/Platform-Windows%20|%20Linux%20|%20macOS-lightgrey" alt="Platform" />
|
|
52
|
+
<img src="https://img.shields.io/badge/Status-Active-brightgreen" alt="Status" />
|
|
53
|
+
<img src="https://img.shields.io/badge/License-MIT-green" alt="License" />
|
|
54
|
+
<img src="https://img.shields.io/badge/Version-v1.9.2-orange" alt="Version" />
|
|
55
|
+
</p>
|
|
56
|
+
|
|
57
|
+
<p align="center">
|
|
58
|
+
<strong>中文</strong> | <a href="README_EN.md">English</a>
|
|
59
|
+
</p>
|
|
60
|
+
|
|
61
|
+
> 想给自己的 QQ 搞个智能机器人?GracyBot 就是为此而生的。基于 **Python 3.11+** & **NapCat** 的个性化定制 QQ 机器人框架,主打安全稳定、插件化扩展与便捷更新。
|
|
62
|
+
|
|
63
|
+
**作者**:小禹 | 湖南汽车工程职业大学 · 计算机网络技术专业
|
|
64
|
+
**团队**:GracyBot 开发团队
|
|
65
|
+
📧 **邮箱**:bc333333@163.com | 🐧 **QQ**:192004908 | 📢 **内测群**:127531571
|
|
66
|
+
|
|
67
|
+
敲代码、做项目是真正让我感到充实和热爱的事。学历可以定义起点,但不能框住眼界和天花板——GracyBot 就是在这份坚持下从零搭建起来的,希望它能帮到更多想动手做 QQ 机器人的朋友。
|
|
68
|
+
|
|
69
|
+
如果你在使用过程中遇到困难,或者想参与开发、交流讨论,欢迎加入内测群,我们一起让 GracyBot 变得更好!
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 目录
|
|
74
|
+
|
|
75
|
+
- [更新变化](#更新变化)
|
|
76
|
+
- [核心特性](#核心特性)
|
|
77
|
+
- [项目结构](#项目结构)
|
|
78
|
+
- [环境要求](#环境要求)
|
|
79
|
+
- [内置指令](#内置指令)
|
|
80
|
+
- [插件列表](#插件列表)
|
|
81
|
+
- [插件开发](#插件开发)
|
|
82
|
+
- [安全防护](#安全防护)
|
|
83
|
+
- [连接模式](#连接模式)
|
|
84
|
+
- [技术栈](#技术栈)
|
|
85
|
+
- [开发计划(Roadmap)](#开发计划roadmap)
|
|
86
|
+
- [调试命令参考](#调试命令参考)
|
|
87
|
+
- [声明](#声明)
|
|
88
|
+
- [许可证](#许可证)
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 更新变化
|
|
93
|
+
|
|
94
|
+
### v1.9.2 (2026-05-31)
|
|
95
|
+
|
|
96
|
+
#### 🔧 Linux 跨平台兼容性修复
|
|
97
|
+
**问题描述**:在 Linux 系统(Debian/Ubuntu/CentOS 等)下运行 Bot 时,SysInfo 等插件在执行 `/运行状态` 命令时偶发 `NameError: name 'time' is not defined` 或 `NameError: name 'ThreadPoolExecutor' is not defined`,而 Windows 完全正常。
|
|
98
|
+
**根因分析**:Linux 默认使用 `fork` 机制创建子进程,该机制直接复制父进程内存,不会重新执行模块级 `import` 语句。在热重载(Werkzeug reloader)或多线程并发场景下,部分标准库(如 `time`、`concurrent.futures`)的命名空间在 fork 后的子进程中丢失或未被正确继承,导致运行时 `NameError`。Windows 默认使用 `spawn` 模式,每次重新初始化解释器,因此不会出现此问题。
|
|
99
|
+
**修复方案**:在 `core/main.py` 入口统一设置 `multiprocessing.set_start_method('spawn')`,强制 Linux 使用与 Windows 一致的进程启动方式,从根源上消除 fork 带来的命名空间不一致问题。启动耗时增加约 0.5s(仅一次),日常消息响应速度无影响。此修复为框架级底层修复,对插件开发者完全透明。
|
|
100
|
+
|
|
101
|
+
#### 📄 配置文件(config.json)逻辑统一维护
|
|
102
|
+
**变更说明**:`config.json` 原为仅针对 OneBot(NapCat)登录方案的单协议配置文件,v1.9.2 升级为 **全平台统一配置中心**。
|
|
103
|
+
**变更前**:包含 `napcat_http_url`、`ws_host`、`ws_port`、`access_token` 等 NapCat 协议专用字段,功能局限于 HTTP 回调与 WS 连接配置,维护分散。
|
|
104
|
+
**变更后**:移除 NapCat 专用冗余字段,统一使用 `connection_mode`(`http` / `ws_forward` / `ws_reverse`)选择连接模式,保留基础身份配置(`robot_id`、`master_id`、`callback_port`)的同时,新增以下模块,实现单一文件全局管控:
|
|
105
|
+
|
|
106
|
+
| 模块 | 字段 | 说明 |
|
|
107
|
+
|------|------|------|
|
|
108
|
+
| **日志系统** | `log_encoding`、`log_level`、`debug_mode` | 编码、级别、调试模式开关 |
|
|
109
|
+
| **AI 模型** | `openai_api_key`、`openai_model`、`openai_api_base`、`openai_default_character` | 对接 OpenAI 兼容 API,支持自定义模型与基地址 |
|
|
110
|
+
| **自动回复** | `auto_replies` | 关键词 → 回复语字典,免插件实现快捷自动应答 |
|
|
111
|
+
|
|
112
|
+
**优势**:一处配置、全局生效;不再需要额外维护多个配置文件或硬编码参数。后续扩展多协议适配器(Telegram/Discord 等)时,只需在同一文件中追加对应平台配置块即可。
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 核心特性
|
|
117
|
+
|
|
118
|
+
- **模块化架构** — 配置管理 / 日志系统 / 安全模块 / 监控面板 / 插件管理器分离,职责清晰
|
|
119
|
+
- **多协议适配(GracyAdapter)** — 统一适配层,支持 HTTP 回调、WebSocket 正向、WebSocket 反向三种连接模式
|
|
120
|
+
- **企业级安全防护** — 日志自动脱敏(QQ号/API Key/密码)、危险命令拦截、输入验证、频率限制、权限分级、审计日志
|
|
121
|
+
- **插件化生态** — 插件即目录,放入 `plugins/` 自动注册,支持版本控制、依赖管理、循环依赖检测、热重载
|
|
122
|
+
- **AI 对话** — 内置 LLM_Chat 插件,对接 OpenAI 兼容 API,支持多人设切换、上下文记忆、定时任务、戳一戳互动
|
|
123
|
+
- **监控与可观测性** — 结构化日志、CPU/内存/消息统计、健康检查端点(`/health`、`/metrics`、`/status`)
|
|
124
|
+
- **Web 管理面板(GracyUI)** — 基于 React + TypeScript + TailwindCSS 的可视化 Bot 管理界面
|
|
125
|
+
- **跨平台** — 适配 Windows 10+ / Linux(Debian 11+)/ macOS
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 项目结构
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
GracyBot_V1.9.2/
|
|
133
|
+
├── bot.py # 启动入口(仅调用 core/main.py)
|
|
134
|
+
├── config.json # 主配置文件
|
|
135
|
+
├── config.template.json # 配置模板
|
|
136
|
+
├── hotreload.json # 热重载开关
|
|
137
|
+
├── requirements.txt # Python 依赖
|
|
138
|
+
│
|
|
139
|
+
├── core/ # 核心框架
|
|
140
|
+
│ ├── main.py # Flask 应用 & 启动流程
|
|
141
|
+
│ ├── handler.py # 消息处理 & 指令分发
|
|
142
|
+
│ ├── plugin_manager.py # 插件扫描/加载/注册/匹配
|
|
143
|
+
│ ├── config.py # 配置读取
|
|
144
|
+
│ ├── config_manager.py # 集中化配置管理
|
|
145
|
+
│ ├── security.py # 安全工具(脱敏/过滤/权限)
|
|
146
|
+
│ ├── security_manager.py # 安全管理器
|
|
147
|
+
│ ├── monitor.py # 系统监控 & 健康检查
|
|
148
|
+
│ ├── logger_manager.py # 结构化日志管理
|
|
149
|
+
│ ├── utils.py # 工具函数
|
|
150
|
+
│ └── gracy_adapter/ # 多协议适配层
|
|
151
|
+
│ ├── adapter.py # 适配器抽象基类
|
|
152
|
+
│ ├── event.py # 统一事件模型
|
|
153
|
+
│ ├── message.py # 消息段类型(Text/Image/At/Reply/Voice/File)
|
|
154
|
+
│ ├── send.py # 统一消息发送接口
|
|
155
|
+
│ ├── gracy_bot.py # GracyBot 统一入口
|
|
156
|
+
│ └── onebot/ # OneBot 平台实现
|
|
157
|
+
│ ├── http.py # HTTP 适配器
|
|
158
|
+
│ ├── ws.py # WebSocket 适配器(正向+反向)
|
|
159
|
+
│ └── cq.py # CQ 码解析
|
|
160
|
+
│
|
|
161
|
+
├── plugins/ # 插件目录(即插即用,放入即注册)
|
|
162
|
+
│
|
|
163
|
+
└── style/ # 样式资源
|
|
164
|
+
├── gracybot_logo.py # 启动 Logo
|
|
165
|
+
├── log_colors.py # 日志配色
|
|
166
|
+
└── styling.py # 样式工具
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 环境要求
|
|
172
|
+
|
|
173
|
+
- **Python**: 3.11+
|
|
174
|
+
- **NapCat**: OneBot v11 协议端(QQ 机器人必备,负责对接 QQ 协议)
|
|
175
|
+
- **Python 依赖**: Flask、requests、psutil、Pillow、py-cpuinfo、rarfile(详见 `requirements.txt`)
|
|
176
|
+
- **Node.js / npm**: 18+
|
|
177
|
+
- **前端依赖**: React、TypeScript、Vite、TailwindCSS(GracyUI 插件内置,`npm install` 即可)
|
|
178
|
+
- **操作系统**: Windows 10+ / Linux(Debian 11+)/ macOS
|
|
179
|
+
- **AI 对话(可选)**: 任意 OpenAI 兼容 API(默认对接 DeepSeek)
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 内置指令
|
|
184
|
+
|
|
185
|
+
| 指令 | 说明 | 权限 |
|
|
186
|
+
|---|---|---|
|
|
187
|
+
| `/关机` | 关闭机器人服务 | 仅主人 |
|
|
188
|
+
| `/重启` | 重启机器人服务 | 仅主人 |
|
|
189
|
+
| `/开机` | 启动机器人服务 | 仅主人 |
|
|
190
|
+
| `/关于` | 查看机器人框架信息 | 所有人 |
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## 插件列表
|
|
195
|
+
|
|
196
|
+
| 插件 | 说明 |
|
|
197
|
+
|---|---|
|
|
198
|
+
| **LLM_Chat** | AI 对话,多人设切换、上下文记忆、定时任务、戳一戳互动 |
|
|
199
|
+
| **帮助插件** | 生成帮助图片,展示所有可用命令 |
|
|
200
|
+
| **SysInfo_plugin** | 查看系统资源占用与运行详情 |
|
|
201
|
+
| **小禹插件** | 核心控制中枢:时间查询、QQ 变更、黑名单、热重载开关、依赖安装 |
|
|
202
|
+
| **GracyUI** | Web 可视化 Bot 管理面板 |
|
|
203
|
+
| **MonitorPlugin** | 查看系统状态与性能指标 |
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## 插件开发
|
|
208
|
+
|
|
209
|
+
插件采用「即插即用」设计,开发步骤:
|
|
210
|
+
|
|
211
|
+
1. 在 `plugins/` 下新建目录(目录名即插件名)
|
|
212
|
+
2. 创建 `__init__.py`,定义 `PLUGIN_META` 元信息:
|
|
213
|
+
|
|
214
|
+
```python
|
|
215
|
+
PLUGIN_META = {
|
|
216
|
+
"name": "我的插件",
|
|
217
|
+
"version": "1.0.0",
|
|
218
|
+
"description": "插件描述",
|
|
219
|
+
"author": "作者名称", # 插件作者
|
|
220
|
+
"commands": ["/mycommand"], # 触发指令列表
|
|
221
|
+
"handler": "handle_my_plugin", # 核心处理函数名
|
|
222
|
+
"chat_type": ["private", "group"], # 支持的聊天类型
|
|
223
|
+
"permission": "all", # all / master
|
|
224
|
+
"is_at_required": False, # 群聊是否需要 @机器人
|
|
225
|
+
"dependencies": [], # 依赖的其他插件
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
3. 创建核心文件(文件名与 `PLUGIN_META["name"]` 对应),实现 handler 函数:
|
|
230
|
+
|
|
231
|
+
```python
|
|
232
|
+
def handle_my_plugin(plugin_manager, send_msg, data, sender_id, chat_type, target, logger):
|
|
233
|
+
# 你的插件逻辑
|
|
234
|
+
pass
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
4. 重启机器人或开启热重载(`hotreload.json` 中 `"enabled": true`),插件自动加载。
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 安全防护
|
|
242
|
+
|
|
243
|
+
- **日志脱敏** — 自动隐藏 QQ 号、群 ID、API Key、密码等敏感信息
|
|
244
|
+
- **危险命令拦截** — 正则匹配 `rm -rf`、`shutdown`、`reboot` 等危险命令
|
|
245
|
+
- **输入验证** — XSS 防护、敏感字符过滤、长度限制
|
|
246
|
+
- **频率限制** — 基于 IP 和用户 ID 的请求频率控制
|
|
247
|
+
- **权限分级** — `master`(仅主人)/ `all`(所有人)两级权限
|
|
248
|
+
- **审计日志** — 记录用户操作、插件执行、权限校验等关键事件
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## 连接模式
|
|
253
|
+
|
|
254
|
+
| 模式 | 说明 | 适用场景 |
|
|
255
|
+
|---|---|---|
|
|
256
|
+
| `http` | NapCat 推送消息到 Bot 的 `/callback` 端点 | 最简单,适合新手 |
|
|
257
|
+
| `ws_forward` | Bot 主动连接 NapCat WebSocket | Bot 与 NapCat 同机部署 |
|
|
258
|
+
| `ws_reverse` | NapCat 连接 Bot 的 WebSocket | Bot 与 NapCat 不在同机 |
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 技术栈
|
|
263
|
+
|
|
264
|
+
- **后端**: Python 3.11+ / Flask / Werkzeug
|
|
265
|
+
- **前端(GracyUI)**: React / TypeScript / Vite / TailwindCSS
|
|
266
|
+
- **协议适配层(GracyAdapter)**: 抽象通用接口,当前已实现 OneBot v11(NapCat)
|
|
267
|
+
- **依赖**: requests, Flask, psutil, Pillow, py-cpuinfo, rarfile
|
|
268
|
+
|
|
269
|
+
> GracyAdapter 采用平台无关设计,OneBot 只是首个实现的适配器。后续将陆续接入 Telegram Bot API、Discord、微信等更多平台,扩展至多端机器人生态。
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 开发计划(Roadmap)
|
|
274
|
+
|
|
275
|
+
| 状态 | 功能模块 | 说明 |
|
|
276
|
+
|---|---|---|
|
|
277
|
+
| 已完成 | 核心框架 & 插件系统 | 模块化架构、插件热重载、依赖管理、版本控制 |
|
|
278
|
+
| 已完成 | GracyAdapter(OneBot) | HTTP 回调 + WS 正向/反向三种连接模式 |
|
|
279
|
+
| 已完成 | 安全防护体系 | 日志脱敏、危险命令拦截、频率限制、权限分级、审计日志 |
|
|
280
|
+
| 已完成 | LLM_Chat 插件 | 多人设切换、上下文记忆、定时任务、戳一戳互动 |
|
|
281
|
+
| 已完成 | 监控与健康检查 | CPU/内存统计、响应时间追踪、`/health` 端点 |
|
|
282
|
+
| 开发中 | GracyUI 管理面板完善 | 补充插件管理、日志中心、权限配置、实时消息流等模块 |
|
|
283
|
+
| 开发中 | 插件商店(Plugin Store) | 在线浏览、搜索、一键安装/卸载第三方插件 |
|
|
284
|
+
| 开发中 | GracyAdapter(多平台) | 接入 Telegram Bot API、Discord 等更多 IM 平台 |
|
|
285
|
+
| 规划中 | 工作流引擎 | 可视化拖拽编排自动化消息处理流程 |
|
|
286
|
+
| 规划中 | Docker 一键部署 | 提供官方镜像,`docker-compose up` 即可启动全套服务 |
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## 调试命令参考
|
|
291
|
+
|
|
292
|
+
项目根目录下的 `debug_commands.txt` 整理了一份分平台(Linux/macOS 和 Windows)的调试命令示例,涵盖启动管理、日志查看、进程排查、消息模拟测试、健康检查等常用操作,希望能帮大家在遇到问题时快速定位。
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## 声明
|
|
297
|
+
|
|
298
|
+
本项目为个人学习研究项目,不参与任何商业合作,仅供学习交流参考。请勿将本项目用于任何商业目的。
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 许可证
|
|
303
|
+
|
|
304
|
+
本项目采用 [MIT License](LICENSE) 开源协议,允许自由使用、复制、修改、合并、出版发行、再许可及出售软件的副本。详细信息请查看项目根目录下的 `LICENSE` 文件。
|
gracybot-1.9.2/README.md
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="plugins/GracyUI_plugin/frontend/public/gracy.png" alt="GracyBot" width="200" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">GracyBot</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<img src="https://img.shields.io/badge/Python-3.11+-blue?logo=python&logoColor=white" alt="Python" />
|
|
9
|
+
<img src="https://img.shields.io/badge/Platform-Windows%20|%20Linux%20|%20macOS-lightgrey" alt="Platform" />
|
|
10
|
+
<img src="https://img.shields.io/badge/Status-Active-brightgreen" alt="Status" />
|
|
11
|
+
<img src="https://img.shields.io/badge/License-MIT-green" alt="License" />
|
|
12
|
+
<img src="https://img.shields.io/badge/Version-v1.9.2-orange" alt="Version" />
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
<strong>中文</strong> | <a href="README_EN.md">English</a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
> 想给自己的 QQ 搞个智能机器人?GracyBot 就是为此而生的。基于 **Python 3.11+** & **NapCat** 的个性化定制 QQ 机器人框架,主打安全稳定、插件化扩展与便捷更新。
|
|
20
|
+
|
|
21
|
+
**作者**:小禹 | 湖南汽车工程职业大学 · 计算机网络技术专业
|
|
22
|
+
**团队**:GracyBot 开发团队
|
|
23
|
+
📧 **邮箱**:bc333333@163.com | 🐧 **QQ**:192004908 | 📢 **内测群**:127531571
|
|
24
|
+
|
|
25
|
+
敲代码、做项目是真正让我感到充实和热爱的事。学历可以定义起点,但不能框住眼界和天花板——GracyBot 就是在这份坚持下从零搭建起来的,希望它能帮到更多想动手做 QQ 机器人的朋友。
|
|
26
|
+
|
|
27
|
+
如果你在使用过程中遇到困难,或者想参与开发、交流讨论,欢迎加入内测群,我们一起让 GracyBot 变得更好!
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 目录
|
|
32
|
+
|
|
33
|
+
- [更新变化](#更新变化)
|
|
34
|
+
- [核心特性](#核心特性)
|
|
35
|
+
- [项目结构](#项目结构)
|
|
36
|
+
- [环境要求](#环境要求)
|
|
37
|
+
- [内置指令](#内置指令)
|
|
38
|
+
- [插件列表](#插件列表)
|
|
39
|
+
- [插件开发](#插件开发)
|
|
40
|
+
- [安全防护](#安全防护)
|
|
41
|
+
- [连接模式](#连接模式)
|
|
42
|
+
- [技术栈](#技术栈)
|
|
43
|
+
- [开发计划(Roadmap)](#开发计划roadmap)
|
|
44
|
+
- [调试命令参考](#调试命令参考)
|
|
45
|
+
- [声明](#声明)
|
|
46
|
+
- [许可证](#许可证)
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 更新变化
|
|
51
|
+
|
|
52
|
+
### v1.9.2 (2026-05-31)
|
|
53
|
+
|
|
54
|
+
#### 🔧 Linux 跨平台兼容性修复
|
|
55
|
+
**问题描述**:在 Linux 系统(Debian/Ubuntu/CentOS 等)下运行 Bot 时,SysInfo 等插件在执行 `/运行状态` 命令时偶发 `NameError: name 'time' is not defined` 或 `NameError: name 'ThreadPoolExecutor' is not defined`,而 Windows 完全正常。
|
|
56
|
+
**根因分析**:Linux 默认使用 `fork` 机制创建子进程,该机制直接复制父进程内存,不会重新执行模块级 `import` 语句。在热重载(Werkzeug reloader)或多线程并发场景下,部分标准库(如 `time`、`concurrent.futures`)的命名空间在 fork 后的子进程中丢失或未被正确继承,导致运行时 `NameError`。Windows 默认使用 `spawn` 模式,每次重新初始化解释器,因此不会出现此问题。
|
|
57
|
+
**修复方案**:在 `core/main.py` 入口统一设置 `multiprocessing.set_start_method('spawn')`,强制 Linux 使用与 Windows 一致的进程启动方式,从根源上消除 fork 带来的命名空间不一致问题。启动耗时增加约 0.5s(仅一次),日常消息响应速度无影响。此修复为框架级底层修复,对插件开发者完全透明。
|
|
58
|
+
|
|
59
|
+
#### 📄 配置文件(config.json)逻辑统一维护
|
|
60
|
+
**变更说明**:`config.json` 原为仅针对 OneBot(NapCat)登录方案的单协议配置文件,v1.9.2 升级为 **全平台统一配置中心**。
|
|
61
|
+
**变更前**:包含 `napcat_http_url`、`ws_host`、`ws_port`、`access_token` 等 NapCat 协议专用字段,功能局限于 HTTP 回调与 WS 连接配置,维护分散。
|
|
62
|
+
**变更后**:移除 NapCat 专用冗余字段,统一使用 `connection_mode`(`http` / `ws_forward` / `ws_reverse`)选择连接模式,保留基础身份配置(`robot_id`、`master_id`、`callback_port`)的同时,新增以下模块,实现单一文件全局管控:
|
|
63
|
+
|
|
64
|
+
| 模块 | 字段 | 说明 |
|
|
65
|
+
|------|------|------|
|
|
66
|
+
| **日志系统** | `log_encoding`、`log_level`、`debug_mode` | 编码、级别、调试模式开关 |
|
|
67
|
+
| **AI 模型** | `openai_api_key`、`openai_model`、`openai_api_base`、`openai_default_character` | 对接 OpenAI 兼容 API,支持自定义模型与基地址 |
|
|
68
|
+
| **自动回复** | `auto_replies` | 关键词 → 回复语字典,免插件实现快捷自动应答 |
|
|
69
|
+
|
|
70
|
+
**优势**:一处配置、全局生效;不再需要额外维护多个配置文件或硬编码参数。后续扩展多协议适配器(Telegram/Discord 等)时,只需在同一文件中追加对应平台配置块即可。
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 核心特性
|
|
75
|
+
|
|
76
|
+
- **模块化架构** — 配置管理 / 日志系统 / 安全模块 / 监控面板 / 插件管理器分离,职责清晰
|
|
77
|
+
- **多协议适配(GracyAdapter)** — 统一适配层,支持 HTTP 回调、WebSocket 正向、WebSocket 反向三种连接模式
|
|
78
|
+
- **企业级安全防护** — 日志自动脱敏(QQ号/API Key/密码)、危险命令拦截、输入验证、频率限制、权限分级、审计日志
|
|
79
|
+
- **插件化生态** — 插件即目录,放入 `plugins/` 自动注册,支持版本控制、依赖管理、循环依赖检测、热重载
|
|
80
|
+
- **AI 对话** — 内置 LLM_Chat 插件,对接 OpenAI 兼容 API,支持多人设切换、上下文记忆、定时任务、戳一戳互动
|
|
81
|
+
- **监控与可观测性** — 结构化日志、CPU/内存/消息统计、健康检查端点(`/health`、`/metrics`、`/status`)
|
|
82
|
+
- **Web 管理面板(GracyUI)** — 基于 React + TypeScript + TailwindCSS 的可视化 Bot 管理界面
|
|
83
|
+
- **跨平台** — 适配 Windows 10+ / Linux(Debian 11+)/ macOS
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 项目结构
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
GracyBot_V1.9.2/
|
|
91
|
+
├── bot.py # 启动入口(仅调用 core/main.py)
|
|
92
|
+
├── config.json # 主配置文件
|
|
93
|
+
├── config.template.json # 配置模板
|
|
94
|
+
├── hotreload.json # 热重载开关
|
|
95
|
+
├── requirements.txt # Python 依赖
|
|
96
|
+
│
|
|
97
|
+
├── core/ # 核心框架
|
|
98
|
+
│ ├── main.py # Flask 应用 & 启动流程
|
|
99
|
+
│ ├── handler.py # 消息处理 & 指令分发
|
|
100
|
+
│ ├── plugin_manager.py # 插件扫描/加载/注册/匹配
|
|
101
|
+
│ ├── config.py # 配置读取
|
|
102
|
+
│ ├── config_manager.py # 集中化配置管理
|
|
103
|
+
│ ├── security.py # 安全工具(脱敏/过滤/权限)
|
|
104
|
+
│ ├── security_manager.py # 安全管理器
|
|
105
|
+
│ ├── monitor.py # 系统监控 & 健康检查
|
|
106
|
+
│ ├── logger_manager.py # 结构化日志管理
|
|
107
|
+
│ ├── utils.py # 工具函数
|
|
108
|
+
│ └── gracy_adapter/ # 多协议适配层
|
|
109
|
+
│ ├── adapter.py # 适配器抽象基类
|
|
110
|
+
│ ├── event.py # 统一事件模型
|
|
111
|
+
│ ├── message.py # 消息段类型(Text/Image/At/Reply/Voice/File)
|
|
112
|
+
│ ├── send.py # 统一消息发送接口
|
|
113
|
+
│ ├── gracy_bot.py # GracyBot 统一入口
|
|
114
|
+
│ └── onebot/ # OneBot 平台实现
|
|
115
|
+
│ ├── http.py # HTTP 适配器
|
|
116
|
+
│ ├── ws.py # WebSocket 适配器(正向+反向)
|
|
117
|
+
│ └── cq.py # CQ 码解析
|
|
118
|
+
│
|
|
119
|
+
├── plugins/ # 插件目录(即插即用,放入即注册)
|
|
120
|
+
│
|
|
121
|
+
└── style/ # 样式资源
|
|
122
|
+
├── gracybot_logo.py # 启动 Logo
|
|
123
|
+
├── log_colors.py # 日志配色
|
|
124
|
+
└── styling.py # 样式工具
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 环境要求
|
|
130
|
+
|
|
131
|
+
- **Python**: 3.11+
|
|
132
|
+
- **NapCat**: OneBot v11 协议端(QQ 机器人必备,负责对接 QQ 协议)
|
|
133
|
+
- **Python 依赖**: Flask、requests、psutil、Pillow、py-cpuinfo、rarfile(详见 `requirements.txt`)
|
|
134
|
+
- **Node.js / npm**: 18+
|
|
135
|
+
- **前端依赖**: React、TypeScript、Vite、TailwindCSS(GracyUI 插件内置,`npm install` 即可)
|
|
136
|
+
- **操作系统**: Windows 10+ / Linux(Debian 11+)/ macOS
|
|
137
|
+
- **AI 对话(可选)**: 任意 OpenAI 兼容 API(默认对接 DeepSeek)
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 内置指令
|
|
142
|
+
|
|
143
|
+
| 指令 | 说明 | 权限 |
|
|
144
|
+
|---|---|---|
|
|
145
|
+
| `/关机` | 关闭机器人服务 | 仅主人 |
|
|
146
|
+
| `/重启` | 重启机器人服务 | 仅主人 |
|
|
147
|
+
| `/开机` | 启动机器人服务 | 仅主人 |
|
|
148
|
+
| `/关于` | 查看机器人框架信息 | 所有人 |
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 插件列表
|
|
153
|
+
|
|
154
|
+
| 插件 | 说明 |
|
|
155
|
+
|---|---|
|
|
156
|
+
| **LLM_Chat** | AI 对话,多人设切换、上下文记忆、定时任务、戳一戳互动 |
|
|
157
|
+
| **帮助插件** | 生成帮助图片,展示所有可用命令 |
|
|
158
|
+
| **SysInfo_plugin** | 查看系统资源占用与运行详情 |
|
|
159
|
+
| **小禹插件** | 核心控制中枢:时间查询、QQ 变更、黑名单、热重载开关、依赖安装 |
|
|
160
|
+
| **GracyUI** | Web 可视化 Bot 管理面板 |
|
|
161
|
+
| **MonitorPlugin** | 查看系统状态与性能指标 |
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 插件开发
|
|
166
|
+
|
|
167
|
+
插件采用「即插即用」设计,开发步骤:
|
|
168
|
+
|
|
169
|
+
1. 在 `plugins/` 下新建目录(目录名即插件名)
|
|
170
|
+
2. 创建 `__init__.py`,定义 `PLUGIN_META` 元信息:
|
|
171
|
+
|
|
172
|
+
```python
|
|
173
|
+
PLUGIN_META = {
|
|
174
|
+
"name": "我的插件",
|
|
175
|
+
"version": "1.0.0",
|
|
176
|
+
"description": "插件描述",
|
|
177
|
+
"author": "作者名称", # 插件作者
|
|
178
|
+
"commands": ["/mycommand"], # 触发指令列表
|
|
179
|
+
"handler": "handle_my_plugin", # 核心处理函数名
|
|
180
|
+
"chat_type": ["private", "group"], # 支持的聊天类型
|
|
181
|
+
"permission": "all", # all / master
|
|
182
|
+
"is_at_required": False, # 群聊是否需要 @机器人
|
|
183
|
+
"dependencies": [], # 依赖的其他插件
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
3. 创建核心文件(文件名与 `PLUGIN_META["name"]` 对应),实现 handler 函数:
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
def handle_my_plugin(plugin_manager, send_msg, data, sender_id, chat_type, target, logger):
|
|
191
|
+
# 你的插件逻辑
|
|
192
|
+
pass
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
4. 重启机器人或开启热重载(`hotreload.json` 中 `"enabled": true`),插件自动加载。
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## 安全防护
|
|
200
|
+
|
|
201
|
+
- **日志脱敏** — 自动隐藏 QQ 号、群 ID、API Key、密码等敏感信息
|
|
202
|
+
- **危险命令拦截** — 正则匹配 `rm -rf`、`shutdown`、`reboot` 等危险命令
|
|
203
|
+
- **输入验证** — XSS 防护、敏感字符过滤、长度限制
|
|
204
|
+
- **频率限制** — 基于 IP 和用户 ID 的请求频率控制
|
|
205
|
+
- **权限分级** — `master`(仅主人)/ `all`(所有人)两级权限
|
|
206
|
+
- **审计日志** — 记录用户操作、插件执行、权限校验等关键事件
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 连接模式
|
|
211
|
+
|
|
212
|
+
| 模式 | 说明 | 适用场景 |
|
|
213
|
+
|---|---|---|
|
|
214
|
+
| `http` | NapCat 推送消息到 Bot 的 `/callback` 端点 | 最简单,适合新手 |
|
|
215
|
+
| `ws_forward` | Bot 主动连接 NapCat WebSocket | Bot 与 NapCat 同机部署 |
|
|
216
|
+
| `ws_reverse` | NapCat 连接 Bot 的 WebSocket | Bot 与 NapCat 不在同机 |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 技术栈
|
|
221
|
+
|
|
222
|
+
- **后端**: Python 3.11+ / Flask / Werkzeug
|
|
223
|
+
- **前端(GracyUI)**: React / TypeScript / Vite / TailwindCSS
|
|
224
|
+
- **协议适配层(GracyAdapter)**: 抽象通用接口,当前已实现 OneBot v11(NapCat)
|
|
225
|
+
- **依赖**: requests, Flask, psutil, Pillow, py-cpuinfo, rarfile
|
|
226
|
+
|
|
227
|
+
> GracyAdapter 采用平台无关设计,OneBot 只是首个实现的适配器。后续将陆续接入 Telegram Bot API、Discord、微信等更多平台,扩展至多端机器人生态。
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 开发计划(Roadmap)
|
|
232
|
+
|
|
233
|
+
| 状态 | 功能模块 | 说明 |
|
|
234
|
+
|---|---|---|
|
|
235
|
+
| 已完成 | 核心框架 & 插件系统 | 模块化架构、插件热重载、依赖管理、版本控制 |
|
|
236
|
+
| 已完成 | GracyAdapter(OneBot) | HTTP 回调 + WS 正向/反向三种连接模式 |
|
|
237
|
+
| 已完成 | 安全防护体系 | 日志脱敏、危险命令拦截、频率限制、权限分级、审计日志 |
|
|
238
|
+
| 已完成 | LLM_Chat 插件 | 多人设切换、上下文记忆、定时任务、戳一戳互动 |
|
|
239
|
+
| 已完成 | 监控与健康检查 | CPU/内存统计、响应时间追踪、`/health` 端点 |
|
|
240
|
+
| 开发中 | GracyUI 管理面板完善 | 补充插件管理、日志中心、权限配置、实时消息流等模块 |
|
|
241
|
+
| 开发中 | 插件商店(Plugin Store) | 在线浏览、搜索、一键安装/卸载第三方插件 |
|
|
242
|
+
| 开发中 | GracyAdapter(多平台) | 接入 Telegram Bot API、Discord 等更多 IM 平台 |
|
|
243
|
+
| 规划中 | 工作流引擎 | 可视化拖拽编排自动化消息处理流程 |
|
|
244
|
+
| 规划中 | Docker 一键部署 | 提供官方镜像,`docker-compose up` 即可启动全套服务 |
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## 调试命令参考
|
|
249
|
+
|
|
250
|
+
项目根目录下的 `debug_commands.txt` 整理了一份分平台(Linux/macOS 和 Windows)的调试命令示例,涵盖启动管理、日志查看、进程排查、消息模拟测试、健康检查等常用操作,希望能帮大家在遇到问题时快速定位。
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## 声明
|
|
255
|
+
|
|
256
|
+
本项目为个人学习研究项目,不参与任何商业合作,仅供学习交流参考。请勿将本项目用于任何商业目的。
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## 许可证
|
|
261
|
+
|
|
262
|
+
本项目采用 [MIT License](LICENSE) 开源协议,允许自由使用、复制、修改、合并、出版发行、再许可及出售软件的副本。详细信息请查看项目根目录下的 `LICENSE` 文件。
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"robot_id": "填写机器人ID",
|
|
3
|
+
"callback_port": 3002,
|
|
4
|
+
"master_id": "填写主人ID",
|
|
5
|
+
"connection_mode": "ws_reverse",
|
|
6
|
+
"bot_version": "v1.9.2",
|
|
7
|
+
"log_encoding": "utf-8",
|
|
8
|
+
"log_level": "INFO",
|
|
9
|
+
"debug_mode": false,
|
|
10
|
+
"auto_replies": {
|
|
11
|
+
"你好": "哈喽~ 我是 GracyBot,有什么可以帮你呀?",
|
|
12
|
+
"在吗": "在呢在呢~ 随时在线为你服务!",
|
|
13
|
+
"谢谢": "不客气呀~ 能帮到你我也很开心!",
|
|
14
|
+
"再见": "拜拜~ 下次见啦,祝你生活愉快!",
|
|
15
|
+
"早上好": "早上好呀~ 新的一天也要元气满满哦!",
|
|
16
|
+
"晚上好": "晚上好~ 记得早点休息,不要熬夜呀!",
|
|
17
|
+
"吃了吗": "哈哈,已经吃过啦~ 你也要按时吃饭呀!",
|
|
18
|
+
"天气怎么样": "抱歉呀,我暂时没法查询天气,记得关注天气预报哦~",
|
|
19
|
+
"你是谁": "我是 GracyBot,一款基于 Napcat 的 QQ 机器人,很高兴认识你!",
|
|
20
|
+
"加油": "谢谢鼓励~ 你也超棒的,一起加油呀!"
|
|
21
|
+
}
|
|
22
|
+
}
|