diff --git a/docs/.vuepress/navbar.ts b/docs/.vuepress/navbar.ts
index 2686b1b5..fddb094b 100644
--- a/docs/.vuepress/navbar.ts
+++ b/docs/.vuepress/navbar.ts
@@ -8,13 +8,18 @@ export default navbar([
prefix: "deployment/",
},
{
- text: "使用及开发",
+ text: "使用及功能",
link: "/usage/",
prefix: "usage/",
},
{
text: "资源及插件",
- link: "/store/resource",
+ link: "/store/",
prefix: "store/",
+ },
+ {
+ text: "开发及贡献",
+ link: "/dev/",
+ prefix: "dev/",
}
]);
diff --git a/docs/.vuepress/sidebar.ts b/docs/.vuepress/sidebar.ts
index 5a144421..938fec84 100644
--- a/docs/.vuepress/sidebar.ts
+++ b/docs/.vuepress/sidebar.ts
@@ -10,7 +10,7 @@ export default sidebar({
children: "structure",
},
{
- text: "使用及开发",
+ text: "使用及功能",
icon: "book",
prefix: "usage/",
children: "structure",
@@ -20,6 +20,12 @@ export default sidebar({
icon: "store",
prefix: "store/",
children: "structure",
+ },
+ {
+ text: "开发及贡献",
+ icon: "pen-nib",
+ prefix: "dev/",
+ children: "structure",
}
],
});
diff --git a/docs/deployment/config.md b/docs/deployment/config.md
index 385c070d..50067718 100644
--- a/docs/deployment/config.md
+++ b/docs/deployment/config.md
@@ -13,14 +13,25 @@ tag:
首次运行后生成`config.yml`和`config`目录,你可修改配置项后重启轻雪,绝大多数情况下,你只需要修改`superusers`及`nickname`字段即可
启动时会加载项目目录下`config.yml/yaml/json/toml`和`config`目录下的所有配置文件,你可在`config`目录下创建多个配置文件,轻雪会自动合并这些配置文件
+
## **基础配置项**
```yaml
-command_start: [ "/", "" ] # 指令前缀,若没有""空命令头,请开启alconna_use_command_start保证alconna解析正常
-host: 127.0.0.1 # 监听地址,默认为本机,若要接收外部请求请填写0.0.0.0
-port: 20216 # 绑定端口
-nickname: [ "liteyuki" ] # 机器人昵称列表
-superusers: [ "1919810" ] # 超级用户列表
+nonebot:
+ # Nonebot机器人的配置,以前的最外层配置项仍可为Nonebot服务,但是部分内容会被覆盖,请尽快迁移
+ command_start: [ "/", "" ] # 指令前缀,若没有""空命令头,请开启alconna_use_command_start保证alconna解析正常
+ host: 127.0.0.1 # 监听地址,默认为本机,若要接收外部请求请填写0.0.0.0
+ port: 20216 # 绑定端口
+ nickname: [ "liteyuki" ] # 机器人昵称列表
+ superusers: [ "1919810" ] # 超级用户列表
+liteyuki:
+ # 写在外层的配置项将会被覆盖,建议迁移到liteyuki下
+ log_level: "INFO" # 日志等级
+ log_icon: true # 是否显示日志等级图标(某些控制台字体不可用)
+ auto_report: true # 是否自动上报问题给轻雪服务器
+ auto_update: true # 是否自动更新轻雪,每天4点检查更新
+ plugins: [ ] # 轻雪插件列表
+ plugin_dirs: [ ] # 轻雪插件目录列表
```
## **其他配置**
@@ -28,27 +39,29 @@ superusers: [ "1919810" ] # 超级用户列表
以下为默认值,如需自定义请手动添加
```yaml
-onebot_access_token: "" # 访问令牌,对公开放时建议设置
-default_language: "zh-CN" # 默认语言
-alconna_auto_completion: false # alconna是否自动补全指令,默认false,建议开启
+# 高级NoneBot配置
+nonebot:
+ onebot_access_token: "" # 访问令牌,对公开放时建议设置
+ default_language: "zh-CN" # 默认语言
+ alconna_auto_completion: false # alconna是否自动补全指令,默认false,建议开启
+ safe_mode: false # 安全模式,开启后将不会加载任何第三方NoneBot插件
+ # 其他Nonebot插件的配置项
+ custom_config_1: "custom_value1"
+ custom_config_2: "custom_value2"
+
# 开发者选项
-allow_update: true # 是否允许更新
-log_level: "INFO" # 日志等级
-log_icon: true # 是否显示日志等级图标(某些控制台字体不可用)
-auto_report: true # 是否自动上报问题给轻雪服务器
-auto_update: true # 是否自动更新轻雪,每天4点检查更新
-debug: false # 轻雪调试,开启会自动重载Bot或者资源,其他插件自带的调试功能也将开启
-safe_mode: false # 安全模式,开启后将不会加载任何第三方插件
-# 其他Nonebot插件的配置项
-custom_config_1: "custom_value1"
-custom_config_2: "custom_value2"
+liteyuki:
+ allow_update: true # 是否允许更新
+ debug: false # 轻雪调试,开启会自动重载Bot或者资源,其他插件自带的调试功能也将开启
+ dev_mode: false # 开发者模式,开启后将会启动监视者,监视文件变化并自动重载
+
...
```
> [!tip]
-> 如果要使用dotenv配置文件,请自行创建`.env.{ENVIRONMENT}`,并在`config.yml`中添加`environment:{ENVIRONMENT}`字段
+> 如果要使用NoneBot和dotenv配置文件,请自行创建`.env.{ENVIRONMENT}`,并在`config.yml`中添加`nonebot.environment:{ENVIRONMENT}`字段
-## **OneBot实现端配置**
+## **与NoneBot对接的OneBot实现端配置**
生产环境中推荐反向WebSocket
不同的实现端给出的字段可能不同,但是基本上都是一样的,这里给出一个参考值
diff --git a/docs/dev/README.md b/docs/dev/README.md
new file mode 100644
index 00000000..947ed654
--- /dev/null
+++ b/docs/dev/README.md
@@ -0,0 +1,8 @@
+---
+title: 开发及贡献
+index: false
+icon: laptop-code
+category: 开发
+---
+
+
\ No newline at end of file
diff --git a/docs/usage/lyfunc.md b/docs/dev/dev_lyfunc.md
similarity index 89%
rename from docs/usage/lyfunc.md
rename to docs/dev/dev_lyfunc.md
index 846080b5..db33a2db 100644
--- a/docs/usage/lyfunc.md
+++ b/docs/dev/dev_lyfunc.md
@@ -1,15 +1,13 @@
---
title: 轻雪函数
icon: code
-order: 4
-category: 使用指南
-tag:
- - 配置
+order: 2
+category: 开发
---
## **轻雪函数**
-轻雪函数 Liteyuki Function 是轻雪的一个功能,它允许你在轻雪中运行一些自定义的由数据驱动的命令,类似于Minecraft的mcfunction.
+轻雪函数 Liteyuki Function 是轻雪的一个功能,它允许你在轻雪中运行一些自定义的由数据驱动的命令,类似于Minecraft的mcfunction,属于资源包的一部分,但需单独起篇幅.
### **函数文件**
@@ -70,3 +68,7 @@ await
> [!warning]
> 但若出现非单function的情况,有一个task任务没有完成而await被执行了,那么当前所有函数包的task都会被截停销毁
+
+
+> [!tip]
+> 编写轻雪函数推荐你使用VS Code插件[Liteyuki Function](https://github.com/LiteyukiStudio/lyfunctionTextmate)实现语法高亮
\ No newline at end of file
diff --git a/docs/dev/dev_lyplugin.md b/docs/dev/dev_lyplugin.md
new file mode 100644
index 00000000..6bd5e948
--- /dev/null
+++ b/docs/dev/dev_lyplugin.md
@@ -0,0 +1,59 @@
+---
+title: 轻雪插件开发
+icon: laptop-code
+order: 3
+category: 开发
+---
+
+# 简介
+
+轻雪插件是轻雪内置的一部分功能,运行在主进程中,可以很高程度地扩展轻雪的功能
+
+## 开始
+
+### 创建插件
+
+在标准项目中,位于liteyuki/plugins和src/liteyuki_plugins下的Python modules均会被当作插件加载,你可自行添加配置文件以指定插件的加载路径
+一个`.py`文件或一个包含`__init__.py`的文件夹即可被识别为插件
+创建一个文件夹,例如`my_plugin`,并在其中创建一个`__init__.py`文件,即可创建一个插件
+
+```python
+from liteyuki.plugin import PluginMetadata
+
+__plugin_meta__ = PluginMetadata(
+ name="My Plugin",
+ version="1.0.0",
+ description="A simple plugin"
+)
+
+# 你的插件代码
+```
+
+### 编写逻辑部分
+
+轻雪主进程不涉及聊天部分,因此插件主要是一些后台任务或者与聊天机器人的通信
+以下我们会编写一个简单的插件,用于开发NoneBot时进行文件系统变更重载
+
+```python
+from liteyuki.dev import observer
+from liteyuki import get_bot, logger
+from watchdog.events import FileSystemEvent
+
+liteyuki = get_bot()
+
+exclude_extensions = (".pyc", ".pyo")
+
+
+# 用observer的on_file_system_event装饰器监听文件系统事件
+@observer.on_file_system_event(
+ directories=("src/nonebot_plugins",),
+ event_filter=lambda event: not event.src_path.endswith(exclude_extensions) and ("__pycache__" not in event.src_path) and os.path.isfile(event.src_path)
+)
+def restart_nonebot_process(event: FileSystemEvent):
+ logger.debug(f"File {event.src_path} changed, reloading nonebot...")
+ liteyuki.restart_process("nonebot")
+```
+
+### 加载插件
+
+在配置文件中的`liteyuki.plugins`中添加你的插件路径,例如`my_plugin`,重启轻雪即可加载插件。然后我们在src/nonebot_plugins下创建一个文件,例如`test.py`,并在其中写入一些代码,保存后轻雪会自动重载NoneBot进程
\ No newline at end of file
diff --git a/docs/usage/resource_pack.md b/docs/dev/dev_resource_pack.md
similarity index 89%
rename from docs/usage/resource_pack.md
rename to docs/dev/dev_resource_pack.md
index 78138e03..494748ca 100644
--- a/docs/usage/resource_pack.md
+++ b/docs/dev/dev_resource_pack.md
@@ -1,12 +1,14 @@
---
-title: 资源包
-icon: paint-brush
-order: 3
-category: 使用手册
+title: 资源包开发
+icon: box
+order: 1
+category: 开发
---
-## 简介
+## 简介
+
资源包,亦可根据用途称为主题包、字体包、语言包等,它允许你一定程度上自定义轻雪的外观,并且不用修改源代码
+
- [资源/主题商店](/store/)提供了一些资源包供你选择,你也可以自己制作资源包
- 资源包的制作很简单,如果你接触过`Minecraft`的资源包,那么你能够很快就上手,仅需按照原有路径进行文件替换即可,讲起打包成一个新的资源包。
- 部分内容制作需要一点点前端基础,例如`html`,`css`
@@ -16,8 +18,11 @@ category: 使用手册
请注意,主题包中的html渲染使用Js来规定数据的渲染位置,请确保您所编写的html代码能被Bot解析,否则会导致渲染失败或渲染结果不理想/异常/错位等无法预料的事情发生。推荐在编写html时同时更改对应Js代码,以避免出现无法预料的问题。
---
+
## 加载资源包
+
- 资源包通常是以`.zip`格式压缩的,只需要将其解压到根目录`resources`目录下即可,注意不要嵌套文件夹,正常的路径应该是这样的
+
```shell
main.py
resources
@@ -29,8 +34,10 @@ resources
├─metadata.yml
└─...
```
+
- 你自己制作的资源包也应该遵循这个规则,并且应该在`metadata.yml`中填写一些信息
- 若没有`metadata.yml`文件,则该文件夹不会被识别为资源包
+
```yaml
name: "资源包名称"
version: "1.0.0"
@@ -38,5 +45,9 @@ description: "资源包描述"
# 你可以自定义一些信息,但请保证以上三个字段
...
```
+
- 资源包加载遵循一个优先级,即后加载的资源包会覆盖前面的资源包,例如,你在A包中定义了一个`index.html`文件,B包也定义了一个`index.html`文件,那么加载B包后,A包中的`index.html`文件会被覆盖
- 对于不同资源包的不同文件,是可以相对引用的,例如你在A中定义了`templates/index.html`,在B中定义了`templates/style.css`,可以在A的`index.html`中用`./style.css`相对路径引用B中的css
+
+> [!tip]
+> 资源包的结构会随着轻雪的更新而有变动,第三方资源包开发者需要注意版本兼容性,同时用户也应该自行选择可用的资源包
\ No newline at end of file
diff --git a/docs/store/README.md b/docs/store/README.md
index 837257a9..e7619de2 100644
--- a/docs/store/README.md
+++ b/docs/store/README.md
@@ -1,5 +1,8 @@
---
-title: 资源商店
-icon: store
+title: 资源及插件商店
index: false
+icon: store
+category: 商店
---
+
+
\ No newline at end of file
diff --git a/liteyuki/__init__.py b/liteyuki/__init__.py
index 1e195c2e..ea4561fa 100644
--- a/liteyuki/__init__.py
+++ b/liteyuki/__init__.py
@@ -1,7 +1,8 @@
from liteyuki.bot import (
LiteyukiBot,
get_bot,
- get_config
+ get_config,
+ get_config_with_compat
)
from liteyuki.comm import (
diff --git a/liteyuki/bot/__init__.py b/liteyuki/bot/__init__.py
index fd298b79..118d2981 100644
--- a/liteyuki/bot/__init__.py
+++ b/liteyuki/bot/__init__.py
@@ -20,6 +20,7 @@ __all__ = [
"LiteyukiBot",
"get_bot",
"get_config",
+ "get_config_with_compat",
]
diff --git a/liteyuki/dev/observer.py b/liteyuki/dev/observer.py
index d61f540d..844c4498 100644
--- a/liteyuki/dev/observer.py
+++ b/liteyuki/dev/observer.py
@@ -9,7 +9,7 @@ from typing import Callable, TypeAlias
from watchdog.events import FileSystemEvent, FileSystemEventHandler
from watchdog.observers import Observer
-from liteyuki import get_bot, get_config, logger
+from liteyuki import get_bot, get_config_with_compat, logger
liteyuki_bot = get_bot()
@@ -37,7 +37,7 @@ def debounce(wait):
return decorator
-if get_config("dev_mode", False):
+if get_config_with_compat("liteyuki.dev_mode", ("dev_mode",), False):
logger.debug("Liteyuki Reload enabled, watching for file changes...")
observer.start()
diff --git a/liteyuki/plugins/plugins_loader/__init__.py b/liteyuki/plugins/plugins_loader/__init__.py
index e8f7010d..8b90c530 100644
--- a/liteyuki/plugins/plugins_loader/__init__.py
+++ b/liteyuki/plugins/plugins_loader/__init__.py
@@ -8,6 +8,7 @@ Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved
@File : __init__.py.py
@Software: PyCharm
"""
+from liteyuki import get_config_with_compat, load_plugin
from liteyuki.plugin import PluginMetadata, load_plugins
__plugin_meta__ = PluginMetadata(
@@ -18,3 +19,8 @@ __plugin_meta__ = PluginMetadata(
)
load_plugins("src/liteyuki_plugins")
+for plugin in get_config_with_compat("liteyuki.plugins", ("plugins", ), []):
+ load_plugin(plugin)
+
+for plugin_dir in get_config_with_compat("liteyuki.plugin_dirs", ("plugins_dirs", ), []):
+ load_plugins(plugin_dir)
\ No newline at end of file