feat: 对nb-cli的支持

This commit is contained in:
snowy 2024-04-12 13:07:19 +08:00
parent 6a4c88a6ba
commit e2779bdfd7
17 changed files with 127 additions and 40 deletions

1
.gitignore vendored
View File

@ -18,6 +18,7 @@ compile.bat
liteyuki/resources/templates/latest-debug.html liteyuki/resources/templates/latest-debug.html
# vuepress # vuepress
.github .github
pyproject.toml
# nuitka # nuitka
main.build/ main.build/

View File

@ -46,7 +46,7 @@ export default hopeTheme({
// 在这里配置主题提供的插件 // 在这里配置主题提供的插件
plugins: { plugins: {
searchPro: true, search: true,
// search: true, // search: true,
comment: { comment: {
provider: "Giscus", provider: "Giscus",

View File

@ -11,7 +11,7 @@ heroText: LiteyukiBot
tagline: 轻雪机器人一个以轻量和简洁为设计理念基于Nonebot2的OneBot标准聊天机器人 tagline: 轻雪机器人一个以轻量和简洁为设计理念基于Nonebot2的OneBot标准聊天机器人
actions: actions:
- text: 快速开始 - text: 快速部署
icon: lightbulb icon: lightbulb
link: ./deployment/install.html link: ./deployment/install.html
type: primary type: primary

View File

@ -8,19 +8,22 @@ tag:
- 部署 - 部署
--- ---
### 轻雪配置项(Nonebot插件配置项也可以写在此与dotenv格式不同应为小写) 首次运行后生成`config.yml`,你可以修改配置项后重启轻雪,绝大多数情况下,你只需要修改`superusers`和`nickname`字段即可
配置文件会在首次启动后生成,你可以在`config.yml`中修改配置项后重启轻雪,绝大多数情况下,你只需要修改`superusers`和`nickname`。如果不确定字段的含义,请不要修改(部分在自动生成配置文件中未列出,需手动添加) ## **基础配置项**
```yaml ```yaml
# 生成文件的配置项
command_start: [ "/", "" ] # 指令前缀,若没有""空命令头请开启alconna_use_command_start保证alconna解析正常 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 # 绑定端口 port: 20216 # 绑定端口
nickname: [ "liteyuki" ] # 机器人昵称 nickname: [ "liteyuki" ] # 机器人昵称列表
superusers: [ "1919810" ] # 超级用户 superusers: [ "1919810" ] # 超级用户列表
```
# 未列出的配置项(如要自定义请手动修改) ## **其他配置**
以下为默认值,如需自定义请手动添加
```yaml
onebot_access_token: "" # 访问令牌,对公开放时建议设置 onebot_access_token: "" # 访问令牌,对公开放时建议设置
default_language: "zh-CN" # 默认语言 default_language: "zh-CN" # 默认语言
log_level: "INFO" # 日志等级 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协议进行通信即轻雪作为服务端 | | 协议 | 反向WebSocket | 推荐使用反向ws协议进行通信即轻雪作为服务端 |
| 地址 | ws://`address`/onebot/v11/ws | 地址取决于配置文件,本机默认为`127.0.0.1:20216` | | 地址 | ws://127.0.0.1:20216/onebot/v11/ws | 地址取决于配置文件,本机默认为`127.0.0.1:20216` |
| AccessToken | `""` | 如果你给轻雪配置了`AccessToken`,请在此填写相同的值 | | AccessToken | `""` | 如果你给轻雪配置了`AccessToken`,请在此填写相同的值 |
### 其他通信方式 ## **其他**
- 实现端与轻雪的通信方式不局限为反向WebSocket但是推荐使用反向WebSocket。 - 要使用其他通信方式请访问[OneBot Adapter](https://onebot.adapters.nonebot.dev/)获取详细信息
- 反向WebSocket的优点是轻雪作为服务端可以更好的控制连接适用于生产环境。 - 轻雪不局限于OneBot适配器你可以使用NoneBot2支持的任何适配器
- 在某些情况下你也可以使用正向WebSocket比如你在开发轻雪插件时可以使用正向WebSocket主动连接实现端
- 有更多疑问请访问[OneBot Adapter](https://onebot.adapters.nonebot.dev/)获取详细信息

View File

@ -8,7 +8,7 @@ tag:
- 部署 - 部署
--- ---
### 常见问题 ## **常见问题**
- 设备上Python环境太乱了pip和python不对应怎么办 - 设备上Python环境太乱了pip和python不对应怎么办
- 请使用`/path/to/python -m pip install -r requirements.txt`来安装依赖, - 请使用`/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群[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 1. [Lagrange.OneBot](https://github.com/KonataDev/Lagrange.Core)基于NTQQ的OneBot实现目前Markdown消息支持Lagrange
2. [LLOneBot](https://github.com/LLOneBot/LLOneBot)NTQQ的OneBot插件需要安装NTQQ 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 原生实现,需要官方机器人权限 6. [Gensokyo](https://github.com/Hoshinonyaruko/Gensokyo),基于 OneBot QQ官方机器人Api Golang 原生实现,需要官方机器人权限
7. 人工实现的`Onebot`协议自己整一个WebSocket客户端看着QQ的消息然后给轻雪传输数据 7. 人工实现的`Onebot`协议自己整一个WebSocket客户端看着QQ的消息然后给轻雪传输数据
#### 推荐方案(Minecraft) ## **推荐方案(Minecraft)**
1. [MinecraftOneBot](https://github.com/snowykami/MinecraftOnebot)我们专门为Minecraft开发的服务器Bot支持OneBotV11标准 1. [MinecraftOneBot](https://github.com/snowykami/MinecraftOnebot)我们专门为Minecraft开发的服务器Bot支持OneBotV11标准
使用其他项目连接请先自行查阅文档若有困难请联系对应开发者而不是Liteyuki的开发者 使用其他项目连接请先自行查阅文档若有困难请联系对应开发者而不是Liteyuki的开发者
### 鸣谢 ## **鸣谢**
- [Nonebot2](https://nonebot.dev)提供的框架支持 - [Nonebot2](https://nonebot.dev)提供的框架支持
- [nonebot-plugin-htmlrender](https://github.com/kexue-z/nonebot-plugin-htmlrender/tree/master)提供的渲染功能 - [nonebot-plugin-htmlrender](https://github.com/kexue-z/nonebot-plugin-htmlrender/tree/master)提供的渲染功能

View File

@ -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+` - Windows系统版本最低`Windows10+`/`Windows Server 2019+`
- Linux系统要支持Python3.10+,推荐`Ubuntu 20.04+`(~~别用你那b CentOS~~) - Linux系统要支持Python3.10+,推荐`Ubuntu 20.04+`(~~别用你那b CentOS~~)
- CPU: 至少`1vCPU` - CPU: 至少`1vCPU`
- 内存: Bot无其他插件会占用`200~300MB`,其他插件占用视具体插件而定,建议`1GB`以上 - 内存: Bot无其他插件会占用`200~300MB`,其他插件占用视具体插件而定,建议`1GB`以上
- 硬盘: 至少`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] > [!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] > [!tip]
> 推荐使用虚拟环境来运行轻雪,以避免依赖冲突,你可以使用`python -m venv venv`来创建虚拟环境,然后使用`venv\Scripts\activate`来激活虚拟环境 > 推荐使用虚拟环境来运行轻雪,以避免依赖冲突,你可以使用`python -m venv venv`来创建虚拟环境,然后使用`venv\Scripts\activate`来激活虚拟环境
> [!warning] > [!warning]
> 轻雪的更新功能依赖Git如果你没有安装Git你将无法使用更新功能 > 轻雪的更新功能依赖Git如果你没有安装Git你将无法使用更新功能
>
#### 其他问题请移步至[答疑](/deployment/fandq) #### 其他问题请移步至[答疑](/deployment/fandq)
#### 想在Linux命令行中拥有更好的体验试试[TRSS_Liteyuki轻雪机器人管理脚本](https://timerainstarsky.github.io/TRSS_Liteyuki/)该功能仅供参考不是LiteyukiBot官方提供的功能 [//]: # (#### 想在Linux命令行中拥有更好的体验试试[TRSS_Liteyuki轻雪机器人管理脚本](https://timerainstarsky.github.io/TRSS_Liteyuki/)该功能仅供参考不是LiteyukiBot官方提供的功能)

View File

@ -6,7 +6,7 @@ from .runtime import *
__author__ = "snowykami" __author__ = "snowykami"
__plugin_meta__ = PluginMetadata( __plugin_meta__ = PluginMetadata(
name="轻雪主程序", name="轻雪核心插件",
description="轻雪主程序插件,包含了许多初始化的功能", description="轻雪主程序插件,包含了许多初始化的功能",
usage="", usage="",
homepage="https://github.com/snowykami/LiteyukiBot", homepage="https://github.com/snowykami/LiteyukiBot",

View File

@ -4,8 +4,8 @@ from .rpm import *
__author__ = "snowykami" __author__ = "snowykami"
__plugin_meta__ = PluginMetadata( __plugin_meta__ = PluginMetadata(
name="轻雪插件管理", name="轻雪包管理器",
description="本地插件管理和插件商店支持,支持启用/停用,安装/卸载插件", description="本地插件管理和插件商店支持,资源包管理,支持启用/停用,安装/卸载插件",
usage=( usage=(
"npm list\n" "npm list\n"
"npm enable/disable <plugin_name>\n" "npm enable/disable <plugin_name>\n"

View File

@ -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,
}
)

View File

View File

@ -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")

View File

@ -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)]})`;

View File

@ -3,12 +3,17 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Liteyuki Status</title> <title>Liteyuki Status</title>
<link rel="stylesheet" href="css/card.css"> <link rel="stylesheet" href="./css/card.css">
<link rel="stylesheet" href="./css/status.css">
</head> </head>
<body> <body>
<div class="data-storage" id="data">{{ data | tojson }}</div> <div class="data-storage" id="data">{{ data | tojson }}</div>
<div class="info-box" id="system-info"></div> <div class="info-box" id="system-info"></div>
<div class="info-box" id="disk-info"></div> <div class="info-box" id="disk-info"></div>
<div class="info-box" id="motto-info"></div> <div class="info-box" id="motto-info"></div>
<script src="./js/card.js"></script>
<script src="./js/status.js"></script>
</body> </body>
</html> </html>

View File

@ -60,6 +60,10 @@ def init():
if not os.path.exists("data/liteyuki/liteyuki.json"): if not os.path.exists("data/liteyuki/liteyuki.json"):
register_bot() 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( nonebot.logger.info(
f"Run Liteyuki with Python{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro} " f"Run Liteyuki with Python{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro} "
f"at {sys.executable}" f"at {sys.executable}"

View File

@ -1,3 +1,5 @@
import os.path
import nonebot import nonebot
from nonebot.adapters.onebot import v11, v12 from nonebot.adapters.onebot import v11, v12
@ -21,6 +23,7 @@ for adapter in adapters:
driver.register_adapter(adapter) driver.register_adapter(adapter)
nonebot.load_plugin("liteyuki.liteyuki_main") nonebot.load_plugin("liteyuki.liteyuki_main")
nonebot.load_from_toml("pyproject.toml")
if __name__ == "__main__": if __name__ == "__main__":
try: try:

View File

@ -4,10 +4,11 @@ colored==2.2.4
dash==2.16.1 dash==2.16.1
GitPython==3.1.42 GitPython==3.1.42
jieba==0.42.1 jieba==0.42.1
nb-cli==1.4.1
nonebot2[fastapi,httpx,websockets]==2.2.1 nonebot2[fastapi,httpx,websockets]==2.2.1
nonebot-plugin-htmlrender==0.3.1 nonebot-plugin-htmlrender==0.3.1
nonebot-adapter-onebot==2.4.3 nonebot-adapter-onebot==2.4.3
nonebot-plugin-alconna==0.41.0 nonebot-plugin-alconna==0.42.3
nonebot_plugin_apscheduler==0.4.0 nonebot_plugin_apscheduler==0.4.0
playwright==1.17.2 playwright==1.17.2
psutil==5.9.8 psutil==5.9.8