forked from bot/app
✨ 新增observer类和开发调试器
This commit is contained in:
parent
02cf058552
commit
8568c7bb99
@ -8,13 +8,18 @@ export default navbar([
|
|||||||
prefix: "deployment/",
|
prefix: "deployment/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "使用及开发",
|
text: "使用及功能",
|
||||||
link: "/usage/",
|
link: "/usage/",
|
||||||
prefix: "usage/",
|
prefix: "usage/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "资源及插件",
|
text: "资源及插件",
|
||||||
link: "/store/resource",
|
link: "/store/",
|
||||||
prefix: "store/",
|
prefix: "store/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "开发及贡献",
|
||||||
|
link: "/dev/",
|
||||||
|
prefix: "dev/",
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
@ -10,7 +10,7 @@ export default sidebar({
|
|||||||
children: "structure",
|
children: "structure",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "使用及开发",
|
text: "使用及功能",
|
||||||
icon: "book",
|
icon: "book",
|
||||||
prefix: "usage/",
|
prefix: "usage/",
|
||||||
children: "structure",
|
children: "structure",
|
||||||
@ -20,6 +20,12 @@ export default sidebar({
|
|||||||
icon: "store",
|
icon: "store",
|
||||||
prefix: "store/",
|
prefix: "store/",
|
||||||
children: "structure",
|
children: "structure",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "开发及贡献",
|
||||||
|
icon: "pen-nib",
|
||||||
|
prefix: "dev/",
|
||||||
|
children: "structure",
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
@ -13,14 +13,25 @@ tag:
|
|||||||
首次运行后生成`config.yml`和`config`目录,你可修改配置项后重启轻雪,绝大多数情况下,你只需要修改`superusers`及`nickname`字段即可
|
首次运行后生成`config.yml`和`config`目录,你可修改配置项后重启轻雪,绝大多数情况下,你只需要修改`superusers`及`nickname`字段即可
|
||||||
|
|
||||||
启动时会加载项目目录下`config.yml/yaml/json/toml`和`config`目录下的所有配置文件,你可在`config`目录下创建多个配置文件,轻雪会自动合并这些配置文件
|
启动时会加载项目目录下`config.yml/yaml/json/toml`和`config`目录下的所有配置文件,你可在`config`目录下创建多个配置文件,轻雪会自动合并这些配置文件
|
||||||
|
|
||||||
## **基础配置项**
|
## **基础配置项**
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
command_start: [ "/", "" ] # 指令前缀,若没有""空命令头,请开启alconna_use_command_start保证alconna解析正常
|
nonebot:
|
||||||
host: 127.0.0.1 # 监听地址,默认为本机,若要接收外部请求请填写0.0.0.0
|
# Nonebot机器人的配置,以前的最外层配置项仍可为Nonebot服务,但是部分内容会被覆盖,请尽快迁移
|
||||||
port: 20216 # 绑定端口
|
command_start: [ "/", "" ] # 指令前缀,若没有""空命令头,请开启alconna_use_command_start保证alconna解析正常
|
||||||
nickname: [ "liteyuki" ] # 机器人昵称列表
|
host: 127.0.0.1 # 监听地址,默认为本机,若要接收外部请求请填写0.0.0.0
|
||||||
superusers: [ "1919810" ] # 超级用户列表
|
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
|
```yaml
|
||||||
onebot_access_token: "" # 访问令牌,对公开放时建议设置
|
# 高级NoneBot配置
|
||||||
default_language: "zh-CN" # 默认语言
|
nonebot:
|
||||||
alconna_auto_completion: false # alconna是否自动补全指令,默认false,建议开启
|
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 # 是否允许更新
|
liteyuki:
|
||||||
log_level: "INFO" # 日志等级
|
allow_update: true # 是否允许更新
|
||||||
log_icon: true # 是否显示日志等级图标(某些控制台字体不可用)
|
debug: false # 轻雪调试,开启会自动重载Bot或者资源,其他插件自带的调试功能也将开启
|
||||||
auto_report: true # 是否自动上报问题给轻雪服务器
|
dev_mode: false # 开发者模式,开启后将会启动监视者,监视文件变化并自动重载
|
||||||
auto_update: true # 是否自动更新轻雪,每天4点检查更新
|
|
||||||
debug: false # 轻雪调试,开启会自动重载Bot或者资源,其他插件自带的调试功能也将开启
|
|
||||||
safe_mode: false # 安全模式,开启后将不会加载任何第三方插件
|
|
||||||
# 其他Nonebot插件的配置项
|
|
||||||
custom_config_1: "custom_value1"
|
|
||||||
custom_config_2: "custom_value2"
|
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!tip]
|
> [!tip]
|
||||||
> 如果要使用dotenv配置文件,请自行创建`.env.{ENVIRONMENT}`,并在`config.yml`中添加`environment:{ENVIRONMENT}`字段
|
> 如果要使用NoneBot和dotenv配置文件,请自行创建`.env.{ENVIRONMENT}`,并在`config.yml`中添加`nonebot.environment:{ENVIRONMENT}`字段
|
||||||
|
|
||||||
## **OneBot实现端配置**
|
## **与NoneBot对接的OneBot实现端配置**
|
||||||
|
|
||||||
生产环境中推荐反向WebSocket
|
生产环境中推荐反向WebSocket
|
||||||
不同的实现端给出的字段可能不同,但是基本上都是一样的,这里给出一个参考值
|
不同的实现端给出的字段可能不同,但是基本上都是一样的,这里给出一个参考值
|
||||||
|
8
docs/dev/README.md
Normal file
8
docs/dev/README.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: 开发及贡献
|
||||||
|
index: false
|
||||||
|
icon: laptop-code
|
||||||
|
category: 开发
|
||||||
|
---
|
||||||
|
|
||||||
|
<Catalog />
|
@ -1,15 +1,13 @@
|
|||||||
---
|
---
|
||||||
title: 轻雪函数
|
title: 轻雪函数
|
||||||
icon: code
|
icon: code
|
||||||
order: 4
|
order: 2
|
||||||
category: 使用指南
|
category: 开发
|
||||||
tag:
|
|
||||||
- 配置
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## **轻雪函数**
|
## **轻雪函数**
|
||||||
|
|
||||||
轻雪函数 Liteyuki Function 是轻雪的一个功能,它允许你在轻雪中运行一些自定义的由数据驱动的命令,类似于Minecraft的mcfunction.
|
轻雪函数 Liteyuki Function 是轻雪的一个功能,它允许你在轻雪中运行一些自定义的由数据驱动的命令,类似于Minecraft的mcfunction,属于资源包的一部分,但需单独起篇幅.
|
||||||
|
|
||||||
### **函数文件**
|
### **函数文件**
|
||||||
|
|
||||||
@ -70,3 +68,7 @@ await
|
|||||||
|
|
||||||
> [!warning]
|
> [!warning]
|
||||||
> 但若出现非单function的情况,有一个task任务没有完成而await被执行了,那么当前所有函数包的task都会被截停销毁
|
> 但若出现非单function的情况,有一个task任务没有完成而await被执行了,那么当前所有函数包的task都会被截停销毁
|
||||||
|
|
||||||
|
|
||||||
|
> [!tip]
|
||||||
|
> 编写轻雪函数推荐你使用VS Code插件[Liteyuki Function](https://github.com/LiteyukiStudio/lyfunctionTextmate)实现语法高亮
|
59
docs/dev/dev_lyplugin.md
Normal file
59
docs/dev/dev_lyplugin.md
Normal file
@ -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进程
|
@ -1,12 +1,14 @@
|
|||||||
---
|
---
|
||||||
title: 资源包
|
title: 资源包开发
|
||||||
icon: paint-brush
|
icon: box
|
||||||
order: 3
|
order: 1
|
||||||
category: 使用手册
|
category: 开发
|
||||||
---
|
---
|
||||||
|
|
||||||
## 简介
|
## 简介
|
||||||
|
|
||||||
资源包,亦可根据用途称为主题包、字体包、语言包等,它允许你一定程度上自定义轻雪的外观,并且不用修改源代码
|
资源包,亦可根据用途称为主题包、字体包、语言包等,它允许你一定程度上自定义轻雪的外观,并且不用修改源代码
|
||||||
|
|
||||||
- [资源/主题商店](/store/)提供了一些资源包供你选择,你也可以自己制作资源包
|
- [资源/主题商店](/store/)提供了一些资源包供你选择,你也可以自己制作资源包
|
||||||
- 资源包的制作很简单,如果你接触过`Minecraft`的资源包,那么你能够很快就上手,仅需按照原有路径进行文件替换即可,讲起打包成一个新的资源包。
|
- 资源包的制作很简单,如果你接触过`Minecraft`的资源包,那么你能够很快就上手,仅需按照原有路径进行文件替换即可,讲起打包成一个新的资源包。
|
||||||
- 部分内容制作需要一点点前端基础,例如`html`,`css`
|
- 部分内容制作需要一点点前端基础,例如`html`,`css`
|
||||||
@ -16,8 +18,11 @@ category: 使用手册
|
|||||||
请注意,主题包中的html渲染使用Js来规定数据的渲染位置,请确保您所编写的html代码能被Bot解析,否则会导致渲染失败或渲染结果不理想/异常/错位等无法预料的事情发生。推荐在编写html时同时更改对应Js代码,以避免出现无法预料的问题。
|
请注意,主题包中的html渲染使用Js来规定数据的渲染位置,请确保您所编写的html代码能被Bot解析,否则会导致渲染失败或渲染结果不理想/异常/错位等无法预料的事情发生。推荐在编写html时同时更改对应Js代码,以避免出现无法预料的问题。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 加载资源包
|
## 加载资源包
|
||||||
|
|
||||||
- 资源包通常是以`.zip`格式压缩的,只需要将其解压到根目录`resources`目录下即可,注意不要嵌套文件夹,正常的路径应该是这样的
|
- 资源包通常是以`.zip`格式压缩的,只需要将其解压到根目录`resources`目录下即可,注意不要嵌套文件夹,正常的路径应该是这样的
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
main.py
|
main.py
|
||||||
resources
|
resources
|
||||||
@ -29,8 +34,10 @@ resources
|
|||||||
├─metadata.yml
|
├─metadata.yml
|
||||||
└─...
|
└─...
|
||||||
```
|
```
|
||||||
|
|
||||||
- 你自己制作的资源包也应该遵循这个规则,并且应该在`metadata.yml`中填写一些信息
|
- 你自己制作的资源包也应该遵循这个规则,并且应该在`metadata.yml`中填写一些信息
|
||||||
- 若没有`metadata.yml`文件,则该文件夹不会被识别为资源包
|
- 若没有`metadata.yml`文件,则该文件夹不会被识别为资源包
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
name: "资源包名称"
|
name: "资源包名称"
|
||||||
version: "1.0.0"
|
version: "1.0.0"
|
||||||
@ -38,5 +45,9 @@ description: "资源包描述"
|
|||||||
# 你可以自定义一些信息,但请保证以上三个字段
|
# 你可以自定义一些信息,但请保证以上三个字段
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
- 资源包加载遵循一个优先级,即后加载的资源包会覆盖前面的资源包,例如,你在A包中定义了一个`index.html`文件,B包也定义了一个`index.html`文件,那么加载B包后,A包中的`index.html`文件会被覆盖
|
- 资源包加载遵循一个优先级,即后加载的资源包会覆盖前面的资源包,例如,你在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
|
- 对于不同资源包的不同文件,是可以相对引用的,例如你在A中定义了`templates/index.html`,在B中定义了`templates/style.css`,可以在A的`index.html`中用`./style.css`相对路径引用B中的css
|
||||||
|
|
||||||
|
> [!tip]
|
||||||
|
> 资源包的结构会随着轻雪的更新而有变动,第三方资源包开发者需要注意版本兼容性,同时用户也应该自行选择可用的资源包
|
@ -1,5 +1,8 @@
|
|||||||
---
|
---
|
||||||
title: 资源商店
|
title: 资源及插件商店
|
||||||
icon: store
|
|
||||||
index: false
|
index: false
|
||||||
|
icon: store
|
||||||
|
category: 商店
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<Catalog />
|
@ -1,7 +1,8 @@
|
|||||||
from liteyuki.bot import (
|
from liteyuki.bot import (
|
||||||
LiteyukiBot,
|
LiteyukiBot,
|
||||||
get_bot,
|
get_bot,
|
||||||
get_config
|
get_config,
|
||||||
|
get_config_with_compat
|
||||||
)
|
)
|
||||||
|
|
||||||
from liteyuki.comm import (
|
from liteyuki.comm import (
|
||||||
|
@ -20,6 +20,7 @@ __all__ = [
|
|||||||
"LiteyukiBot",
|
"LiteyukiBot",
|
||||||
"get_bot",
|
"get_bot",
|
||||||
"get_config",
|
"get_config",
|
||||||
|
"get_config_with_compat",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ from typing import Callable, TypeAlias
|
|||||||
from watchdog.events import FileSystemEvent, FileSystemEventHandler
|
from watchdog.events import FileSystemEvent, FileSystemEventHandler
|
||||||
from watchdog.observers import Observer
|
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()
|
liteyuki_bot = get_bot()
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ def debounce(wait):
|
|||||||
return decorator
|
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...")
|
logger.debug("Liteyuki Reload enabled, watching for file changes...")
|
||||||
observer.start()
|
observer.start()
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved
|
|||||||
@File : __init__.py.py
|
@File : __init__.py.py
|
||||||
@Software: PyCharm
|
@Software: PyCharm
|
||||||
"""
|
"""
|
||||||
|
from liteyuki import get_config_with_compat, load_plugin
|
||||||
from liteyuki.plugin import PluginMetadata, load_plugins
|
from liteyuki.plugin import PluginMetadata, load_plugins
|
||||||
|
|
||||||
__plugin_meta__ = PluginMetadata(
|
__plugin_meta__ = PluginMetadata(
|
||||||
@ -18,3 +19,8 @@ __plugin_meta__ = PluginMetadata(
|
|||||||
)
|
)
|
||||||
|
|
||||||
load_plugins("src/liteyuki_plugins")
|
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)
|
Loading…
Reference in New Issue
Block a user