From e2779bdfd700165ffe514d5e1521c35e0161012a Mon Sep 17 00:00:00 2001 From: snowy Date: Fri, 12 Apr 2024 13:07:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AF=B9nb-cli=E7=9A=84=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + docs/.vuepress/theme.js | 2 +- docs/README.md | 2 +- docs/deployment/config.md | 41 +++++++++++-------- docs/deployment/fandq.md | 8 ++-- docs/deployment/install.md | 23 ++++++----- liteyuki/liteyuki_main/__init__.py | 2 +- liteyuki/plugins/liteyuki_pacman/__init__.py | 4 +- liteyuki/plugins/liteyuki_status/__init__.py | 24 +++++++++++ liteyuki/plugins/liteyuki_status/api.py | 0 liteyuki/plugins/liteyuki_status/status.py | 29 +++++++++++++ liteyuki/resources/templates/js/card.js | 14 +++++++ liteyuki/resources/templates/status.html | 7 +++- .../{stats_mem.html => status_mem.html} | 0 liteyuki/utils/__init__.py | 4 ++ main.py | 3 ++ requirements.txt | 3 +- 17 files changed, 127 insertions(+), 40 deletions(-) create mode 100644 liteyuki/plugins/liteyuki_status/__init__.py create mode 100644 liteyuki/plugins/liteyuki_status/api.py create mode 100644 liteyuki/plugins/liteyuki_status/status.py create mode 100644 liteyuki/resources/templates/js/card.js rename liteyuki/resources/templates/{stats_mem.html => status_mem.html} (100%) diff --git a/.gitignore b/.gitignore index 9606ba5a..83c4605a 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ compile.bat liteyuki/resources/templates/latest-debug.html # vuepress .github +pyproject.toml # nuitka main.build/ diff --git a/docs/.vuepress/theme.js b/docs/.vuepress/theme.js index 882d5901..78b814ce 100644 --- a/docs/.vuepress/theme.js +++ b/docs/.vuepress/theme.js @@ -46,7 +46,7 @@ export default hopeTheme({ // 在这里配置主题提供的插件 plugins: { - searchPro: true, + search: true, // search: true, comment: { provider: "Giscus", diff --git a/docs/README.md b/docs/README.md index 82039a9f..eeeebcbd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -11,7 +11,7 @@ heroText: LiteyukiBot tagline: 轻雪机器人,一个以轻量和简洁为设计理念基于Nonebot2的OneBot标准聊天机器人 actions: - - text: 快速开始 + - text: 快速部署 icon: lightbulb link: ./deployment/install.html type: primary diff --git a/docs/deployment/config.md b/docs/deployment/config.md index 53c04a38..d109413c 100644 --- a/docs/deployment/config.md +++ b/docs/deployment/config.md @@ -8,19 +8,22 @@ tag: - 部署 --- -### 轻雪配置项(Nonebot插件配置项也可以写在此,与dotenv格式不同,应为小写) +首次运行后生成`config.yml`,你可以修改配置项后重启轻雪,绝大多数情况下,你只需要修改`superusers`和`nickname`字段即可 -配置文件会在首次启动后生成,你可以在`config.yml`中修改配置项后重启轻雪,绝大多数情况下,你只需要修改`superusers`和`nickname`。如果不确定字段的含义,请不要修改(部分在自动生成配置文件中未列出,需手动添加) +## **基础配置项** ```yaml -# 生成文件的配置项 command_start: [ "/", "" ] # 指令前缀,若没有""空命令头,请开启alconna_use_command_start保证alconna解析正常 -host: 127.0.0.1 # 监听地址,默认为本机,若要对外开放请填写0.0.0.0或者你的公网IP +host: 127.0.0.1 # 监听地址,默认为本机,若要接收外部请求请填写0.0.0.0 port: 20216 # 绑定端口 -nickname: [ "liteyuki" ] # 机器人昵称 -superusers: [ "1919810" ] # 超级用户 +nickname: [ "liteyuki" ] # 机器人昵称列表 +superusers: [ "1919810" ] # 超级用户列表 +``` -# 未列出的配置项(如要自定义请手动修改) +## **其他配置** +以下为默认值,如需自定义请手动添加 + +```yaml onebot_access_token: "" # 访问令牌,对公开放时建议设置 default_language: "zh-CN" # 默认语言 log_level: "INFO" # 日志等级 @@ -44,19 +47,21 @@ custom_config_2: "custom_value2" ... ``` -### Onebot实现端配置 +> [!tip] +> 如果要使用dotenv配置文件,请自行创建`.env.{ENVIRONMENT}`,并在`config.yml`中添加`environment:{ENVIRONMENT}`字段 +## **OneBot实现端配置** + +生产环境中推荐反向WebSocket 不同的实现端给出的字段可能不同,但是基本上都是一样的,这里给出一个参考值 -| 字段 | 参考值 | 说明 | -|-------------|---------------------------|----------------------------------| -| 协议 | 反向WebSocket | 推荐使用反向ws协议进行通信,即轻雪作为服务端 | -| 地址 | ws://`address`/onebot/v11/ws | 地址取决于配置文件,本机默认为`127.0.0.1:20216` | -| AccessToken | `""` | 如果你给轻雪配置了`AccessToken`,请在此填写相同的值 | +| 字段 | 参考值 | 说明 | +|-------------|------------------------------------|----------------------------------| +| 协议 | 反向WebSocket | 推荐使用反向ws协议进行通信,即轻雪作为服务端 | +| 地址 | ws://127.0.0.1:20216/onebot/v11/ws | 地址取决于配置文件,本机默认为`127.0.0.1:20216` | +| AccessToken | `""` | 如果你给轻雪配置了`AccessToken`,请在此填写相同的值 | -### 其他通信方式 +## **其他** -- 实现端与轻雪的通信方式不局限为反向WebSocket,但是推荐使用反向WebSocket。 -- 反向WebSocket的优点是轻雪作为服务端,可以更好的控制连接,适用于生产环境。 -- 在某些情况下,你也可以使用正向WebSocket,比如你在开发轻雪插件时,可以使用正向WebSocket主动连接实现端 -- 有更多疑问请访问[OneBot Adapter](https://onebot.adapters.nonebot.dev/)获取详细信息 +- 要使用其他通信方式请访问[OneBot Adapter](https://onebot.adapters.nonebot.dev/)获取详细信息 +- 轻雪不局限于OneBot适配器,你可以使用NoneBot2支持的任何适配器 diff --git a/docs/deployment/fandq.md b/docs/deployment/fandq.md index 2c9b42d1..9f48b7d5 100644 --- a/docs/deployment/fandq.md +++ b/docs/deployment/fandq.md @@ -8,7 +8,7 @@ tag: - 部署 --- -### 常见问题 +## **常见问题** - 设备上Python环境太乱了,pip和python不对应怎么办? - 请使用`/path/to/python -m pip install -r requirements.txt`来安装依赖, @@ -31,7 +31,7 @@ tag: - 其他问题 - 加入QQ群[775840726](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=SzmDYbfR6jY94o9KFNon7AwelRyI6M_u&authKey=ygeBdEmdFNyCWuNR4w0M1M8%2B5oDg7k%2FDfN0tzBkYcnbB%2FGHNnlVEnCIGbdftsnn7&noverify=0&group_code=775840726) -#### 推荐方案(QQ) +## **推荐方案(QQ)** 1. [Lagrange.OneBot](https://github.com/KonataDev/Lagrange.Core),基于NTQQ的OneBot实现,目前Markdown消息支持Lagrange 2. [LLOneBot](https://github.com/LLOneBot/LLOneBot),NTQQ的OneBot插件,需要安装NTQQ @@ -41,13 +41,13 @@ tag: 6. [Gensokyo](https://github.com/Hoshinonyaruko/Gensokyo),基于 OneBot QQ官方机器人Api Golang 原生实现,需要官方机器人权限 7. 人工实现的`Onebot`协议,自己整一个WebSocket客户端,看着QQ的消息,然后给轻雪传输数据 -#### 推荐方案(Minecraft) +## **推荐方案(Minecraft)** 1. [MinecraftOneBot](https://github.com/snowykami/MinecraftOnebot),我们专门为Minecraft开发的服务器Bot,支持OneBotV11标准 使用其他项目连接请先自行查阅文档,若有困难请联系对应开发者而不是Liteyuki的开发者 -### 鸣谢 +## **鸣谢** - [Nonebot2](https://nonebot.dev)提供的框架支持 - [nonebot-plugin-htmlrender](https://github.com/kexue-z/nonebot-plugin-htmlrender/tree/master)提供的渲染功能 diff --git a/docs/deployment/install.md b/docs/deployment/install.md index dd2fd6af..891c03a3 100644 --- a/docs/deployment/install.md +++ b/docs/deployment/install.md @@ -7,30 +7,31 @@ tag: - 安装 --- -### 设备要求 + + +## **开始安装** +1. 安装 [`Git`](https://git-scm.com/download/) 和 [`Python3.10+`](https://www.python.org/downloads/release/python-31010/) 环境 +2. 克隆项目 `git clone https://github.com/snowykami/LiteyukiBot` +3. 进入轻雪目录 `cd LiteyukiBot` +4. 安装依赖 `pip install -r requirements.txt` +5. 启动 `python main.py` + +## **设备要求** - Windows系统版本最低`Windows10+`/`Windows Server 2019+` - Linux系统要支持Python3.10+,推荐`Ubuntu 20.04+`(~~别用你那b CentOS~~) - CPU: 至少`1vCPU` - 内存: Bot无其他插件会占用`200~300MB`,其他插件占用视具体插件而定,建议`1GB`以上 - 硬盘: 至少`1GB`空间 -### 开始安装 -1. 安装 `Git` 和 `Python3.10+` 环境 -2. 克隆项目 `git clone https://github.com/snowykami/LiteyukiBot` -3. 切换目录`cd LiteyukiBot` -4. 安装依赖`pip install -r requirements.txt` -5. 启动`python main.py` - > [!warning] -> 请确保你的Python环境正确,如果设备上有多个环境,请使用`path/to/python -m pip install -r requirements.txt`来安装依赖,`path/to/python`为你的Python可执行文件路径 +> 如果设备上有多个环境,请使用`path/to/python -m pip install -r requirements.txt`来安装依赖,`path/to/python`为你的Python可执行文件路径 > [!tip] > 推荐使用虚拟环境来运行轻雪,以避免依赖冲突,你可以使用`python -m venv venv`来创建虚拟环境,然后使用`venv\Scripts\activate`来激活虚拟环境 > [!warning] > 轻雪的更新功能依赖Git,如果你没有安装Git,你将无法使用更新功能 -> #### 其他问题请移步至[答疑](/deployment/fandq) -#### 想在Linux命令行中拥有更好的体验?试试[TRSS_Liteyuki轻雪机器人管理脚本](https://timerainstarsky.github.io/TRSS_Liteyuki/),该功能仅供参考,不是LiteyukiBot官方提供的功能 +[//]: # (#### 想在Linux命令行中拥有更好的体验?试试[TRSS_Liteyuki轻雪机器人管理脚本](https://timerainstarsky.github.io/TRSS_Liteyuki/),该功能仅供参考,不是LiteyukiBot官方提供的功能) diff --git a/liteyuki/liteyuki_main/__init__.py b/liteyuki/liteyuki_main/__init__.py index 27fba355..a190a134 100644 --- a/liteyuki/liteyuki_main/__init__.py +++ b/liteyuki/liteyuki_main/__init__.py @@ -6,7 +6,7 @@ from .runtime import * __author__ = "snowykami" __plugin_meta__ = PluginMetadata( - name="轻雪主程序", + name="轻雪核心插件", description="轻雪主程序插件,包含了许多初始化的功能", usage="", homepage="https://github.com/snowykami/LiteyukiBot", diff --git a/liteyuki/plugins/liteyuki_pacman/__init__.py b/liteyuki/plugins/liteyuki_pacman/__init__.py index d10db8d3..a2ca5036 100644 --- a/liteyuki/plugins/liteyuki_pacman/__init__.py +++ b/liteyuki/plugins/liteyuki_pacman/__init__.py @@ -4,8 +4,8 @@ from .rpm import * __author__ = "snowykami" __plugin_meta__ = PluginMetadata( - name="轻雪插件管理", - description="本地插件管理和插件商店支持,支持启用/停用,安装/卸载插件", + name="轻雪包管理器", + description="本地插件管理和插件商店支持,资源包管理,支持启用/停用,安装/卸载插件", usage=( "npm list\n" "npm enable/disable \n" diff --git a/liteyuki/plugins/liteyuki_status/__init__.py b/liteyuki/plugins/liteyuki_status/__init__.py new file mode 100644 index 00000000..b1a2588b --- /dev/null +++ b/liteyuki/plugins/liteyuki_status/__init__.py @@ -0,0 +1,24 @@ +from nonebot.plugin import PluginMetadata +from .status import * + +__author__ = "snowykami" +__plugin_meta__ = PluginMetadata( + name="状态查看器", + description="", + usage=( + "MARKDOWN### 状态查看器\n" + "查看机器人的状态\n" + "### 用法\n" + "- `/status` 查看基本情况\n" + "- `/status memory` 查看内存使用情况\n" + "- `/status process` 查看进程情况\n" + ), + type="application", + homepage="https://github.com/snowykami/LiteyukiBot", + extra={ + "liteyuki": True, + "toggleable" : False, + "default_enable" : True, + } +) + diff --git a/liteyuki/plugins/liteyuki_status/api.py b/liteyuki/plugins/liteyuki_status/api.py new file mode 100644 index 00000000..e69de29b diff --git a/liteyuki/plugins/liteyuki_status/status.py b/liteyuki/plugins/liteyuki_status/status.py new file mode 100644 index 00000000..66e2faf0 --- /dev/null +++ b/liteyuki/plugins/liteyuki_status/status.py @@ -0,0 +1,29 @@ +from nonebot import require + +require("nonebot_plugin_alconna") +from nonebot_plugin_alconna import on_alconna, Alconna, Args, Subcommand, Arparma + +status_alc = on_alconna( + aliases={"status"}, + command=Alconna( + "status", + Subcommand( + "memory", + alias={"mem", "m", "内存"}, + ), + Subcommand( + "process", + alias={"proc", "p", "进程"}, + ) + ), +) + + +@status_alc.assign("memory") +async def _(): + print("memory") + + +@status_alc.assign("process") +async def _(): + print("process") diff --git a/liteyuki/resources/templates/js/card.js b/liteyuki/resources/templates/js/card.js new file mode 100644 index 00000000..f93abd92 --- /dev/null +++ b/liteyuki/resources/templates/js/card.js @@ -0,0 +1,14 @@ +const bgs = [ + "bg1.png", + "bg2.png", + "bg3.png", + "bg4.png", + "bg5.png", + "bg6.png", + "bg7.png", + "bg8.png", + "bg9.png", + "bg10.png", +] +// 随机选择背景图片 +document.body.style.backgroundImage = `url(./img/${bgs[Math.floor(Math.random() * bgs.length)]})`; diff --git a/liteyuki/resources/templates/status.html b/liteyuki/resources/templates/status.html index b819ce3f..e16dc7a3 100644 --- a/liteyuki/resources/templates/status.html +++ b/liteyuki/resources/templates/status.html @@ -3,12 +3,17 @@ Liteyuki Status - + + +
{{ data | tojson }}
+ + + \ No newline at end of file diff --git a/liteyuki/resources/templates/stats_mem.html b/liteyuki/resources/templates/status_mem.html similarity index 100% rename from liteyuki/resources/templates/stats_mem.html rename to liteyuki/resources/templates/status_mem.html diff --git a/liteyuki/utils/__init__.py b/liteyuki/utils/__init__.py index 8012f85d..0c4bda82 100644 --- a/liteyuki/utils/__init__.py +++ b/liteyuki/utils/__init__.py @@ -60,6 +60,10 @@ def init(): if not os.path.exists("data/liteyuki/liteyuki.json"): register_bot() + if not os.path.exists("pyproject.toml"): + with open("pyproject.toml", "w", encoding="utf-8") as f: + f.write("[tool.nonebot]\n") + nonebot.logger.info( f"Run Liteyuki with Python{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro} " f"at {sys.executable}" diff --git a/main.py b/main.py index 876b594b..79459e53 100644 --- a/main.py +++ b/main.py @@ -1,3 +1,5 @@ +import os.path + import nonebot from nonebot.adapters.onebot import v11, v12 @@ -21,6 +23,7 @@ for adapter in adapters: driver.register_adapter(adapter) nonebot.load_plugin("liteyuki.liteyuki_main") +nonebot.load_from_toml("pyproject.toml") if __name__ == "__main__": try: diff --git a/requirements.txt b/requirements.txt index 41657cce..e7801914 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,10 +4,11 @@ colored==2.2.4 dash==2.16.1 GitPython==3.1.42 jieba==0.42.1 +nb-cli==1.4.1 nonebot2[fastapi,httpx,websockets]==2.2.1 nonebot-plugin-htmlrender==0.3.1 nonebot-adapter-onebot==2.4.3 -nonebot-plugin-alconna==0.41.0 +nonebot-plugin-alconna==0.42.3 nonebot_plugin_apscheduler==0.4.0 playwright==1.17.2 psutil==5.9.8