# ⚙️[GenshinUID](https://github.com/KimigaiiWuyi/GenshinUID) Core 0.1.0

[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?&labelColor=ef8336)](https://pycqa.github.io/isort/)
[![Lint: flake8](https://img.shields.io/badge/lint-flake8-&labelColor=4C9C39)](https://flake8.pycqa.org/)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Genshin-bots/gsuid-core/master.svg)](https://results.pre-commit.ci/latest/github/Genshin-bots/gsuid-core/master)

[KimigaiiWuyi/GenshinUID](https://github.com/KimigaiiWuyi/GenshinUID) 的核心部分，平台无关，支持 HTTP/WS 形式调用，便于移植到其他平台以及框架。

**🎉[详细文档](https://docs.gsuid.gbots.work/#/)**

## 安装Core

1. git clone gsuid-core本体

```shell
git clone https://ghproxy.com/https://github.com/Genshin-bots/gsuid_core.git --depth=1 --single-branch
```

2. 安装poetry

```shell
pip install poetry
```

3. 安装所需依赖

```shell
# cd进入clone好的文件夹内
cd gsuid_core
# 安装依赖
poetry install
```

4. 安装所需插件（可选）

```shell
# cd进入插件文件夹内
cd plugins
# 安装v4 GenshinUID
git clone -b v4 https://ghproxy.com/https://github.com/KimigaiiWuyi/GenshinUID.git --depth=1 --single-branch
```

5. 启动gsuid_core（早柚核心）

```shell
# 在gsuid_core/genshin_core文件夹内
poetry run python core.py
# 或者（二选一即可）
poetry run core
```

6. 链接其他适配端

+ 默认core将运行在`localhost:8765`端口上，如有需要可至`config.json`修改。
+ 在支持的Bot上（例如NoneBot2、HoshinoBot、ZeroBot、YunZaiBot等），安装相应适配插件，启动Bot（如果有修改端口，则需要在启动Bot前修改适配插件相应端口），即可自动连接Core端。

## Docker部署Core（可选）

`请先安装好Docker与Docker Compose`

1. git clone gsuid-core本体

```shell
git clone https://ghproxy.com/https://github.com/Genshin-bots/gsuid_core.git --depth=1 --single-branch
```

2. 安装所需插件

```shell
# 安装v4 GenshinUID
cd plugins
git clone -b v4 https://ghproxy.com/https://github.com/KimigaiiWuyi/GenshinUID.git --depth=1 --single-branch
```

2. Docker Compose启动

```shell
# 进入项目根目录
docker-compose up -d
```

- 默认core将运行在`localhost:8765`端口上，Docker部署必须修改`config.json`，如`0.0.0.0:8765`
- 如果Bot（例如NoneBot2、HoshinoBot）也是Docker部署的，Core或其插件更新后，可能需要将Core和Bot的容器都重启才生效

## 配置文件

修改`gsuid_core/gsuid_core/config.json`，参考如下

**（注意json不支持`#`，所以不要复制下面的配置到自己的文件中）**

```json
{
 "HOST": "localhost", # 如需挂载公网修改为`0.0.0.0`
 "PORT": "8765", # core端口
 "masters": ["444835641", "111"], # Bot主人，pm为0
 "superusers": ["123456789"], # 超管，pm为1
 "sv": {
     "Core管理": {
         "priority": 5, # 某个服务的优先级
         "enabled": true, # 某个服务是否启动
         "pm": 1, # 某个服务要求的权限等级
         "black_list": [], # 某个服务的黑名单
         "area": "ALL",  # 某个服务的触发范围
         "white_list": [] # 某个服务的白名单
     },
 },
 "log": {
     "level": "DEBUG" # log等级
 },
 "command_start": ["/", "*"], # core内所有插件的要求前缀
 "misfire_grace_time": 90
}
```

> 黑名单一旦设置，黑名单中的用户ID将无法访问该服务
>
> 白名单一旦设置，只有白名单的用户ID能访问该服务
>
> 服务配置可以通过[网页控制台](https://docs.gsuid.gbots.work/#/WebConsole)实时修改, 如果手动修改`config.json`需要**重启**

## 编写插件


```python
import asyncio

from gsuid_core.sv import SL, SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event


@SV('开关').on_prefix(('关闭', '开启')) # 定义一组服务`开关`，服务内有两个前缀触发器
async def get_switch_msg(bot: Bot, ev: Event):
    name = ev.text         # 获取消息除了命令之外的文字
    command = ev.command   # 获取消息中的命令部分
    im = await process(name)  # 自己的业务逻辑
    await bot.logger.info('正在进行[关闭/开启开关]')  # 发送loger
    await bot.send(im)   # 发送消息

sv=SV(
    name='复杂的服务',  # 定义一组服务`开关`,
    pm=2, # 权限 0为master，1为superuser，2为群的群主&管理员，3为普通
    priority=5, # 整组服务的优先级
    enabled=True, # 是否启用
    area= 'ALL', # 群聊和私聊均可触发
    black_list=[], # 黑名单
    white_list=[], # 白名单
)

@sv.on_prefix('测试')
async def get_msg(bot: Bot, ev: Event):
    ...
```
