<h1 align="right">infini'水系核心</h1>

<p align="right">
    <a aria-label="Join the community on GitHub" href="https://github.com/HydroRoll-Team/hydroroll/discussions" target="blank">
        <img alt="" src="https://img.shields.io/badge/Join%20the%20community-blueviolet.svg?logo=data:image/x-icon;base64, &labelColor=000000&logoWidth=20&logoColor=white">
    </a>
    <a href="https://pypi.org/project/infini">
        <img alt="pypi" src="https://img.shields.io/pypi/v/infini?labelColor=000000">
    </a>
    <a href="https://github.com/HydroRoll-Team/infini/blob/master/LICENSE">
        <img alt="hydro" src="https://img.shields.io/pypi/l/infini?labelColor=000000&color=">
    </a>

[![.github/workflows/python-publish.yml](https://github.com/HydroRoll-Team/infini/actions/workflows/python-publish.yml/badge.svg)](https://github.com/HydroRoll-Team/infini/actions/workflows/python-publish.yml)
[![CodeQL](https://github.com/HydroRoll-Team/infini/actions/workflows/codeql.yml/badge.svg)](https://github.com/HydroRoll-Team/infini/actions/workflows/codeql.yml)
[![Netlify Status](https://api.netlify.com/api/v1/badges/ecbe4af3-223f-4fa4-a182-a37a776fd05b/deploy-status)](https://app.netlify.com/sites/grps-v1/deploys)

</p>

## 🎁 `Getting` <img align="right" alt="hydro" src="https://mirror.ghproxy.com/https://raw.githubusercontent.com/HydroRoll-Team/HydroRoll/main/site/src/assets/image/logo.png" height="120">

> [!IMPORTANT]  
>
> 强烈推荐使用 `pdm` 等能创建虚拟环境的包管理工具管理你的 `HydroRollBot` 项目。

1. 安装库

    在终端中执行：

    ```bash
    git clone https://github.com/HydroRoll-Team/infini.git
    cd infini
    pdm install
    ```

    你可以使用`pip`进行安装：

    ```bash
    pip install infini
    ```

2. 创建规则包实例

    确保你的`infini`正确安装后，打开终端并执行：

    ``` shell
    python -m infini new MyRule
    ```

    你可以在生成的 `MyRule\rule.py` 创建一个或者多个继承 `Handler` 基类的实例, 通过编写合适的相关方法与类注册规则包实现规则的自定义。

    ``` python
    from infini import Handler, Result

    __handlers__ = ["HandlerRule"]


    class HandlerRule(Handler):
        """自设业务函数"""

        name = "MyRule" # 规则包名
        priority: int = 0 # 规则包权重

        def process(self, **kwargs) -> Result:
            """声明规则包检定方式"""
            return Result("event1", True)
    ```

    `process`函数应当返回一个`Result`对象，它应当包含一个消息事件名（例如示例中的`event1`），该消息事件名应当在 `MyRule\event.py` 中被注册。消息事件的动态内容通过`{name}`的方式声明并通过`name="内容"`的方式实现。

3. 创建你的测试文件

    在 `MyRule\tests.py` 中的 `test` 函数中给出测试函数，并返回一个 `list`，应当包含所有异常内容。

4. 测试你的规则包

    执行指令：

    ```bash
    python -m infini test MyRule
    ```

## 🌟 `contribute`

在此之前，请先克隆本仓库。

```shell
git clone https://github.com/HydroRoll-Team/infini.git
```

### 贡献手册

本段内容主要针对想要为[通用规则包标准(GRPS)]的`docs 文档` 或 `Python 实现` 作贡献的社区朋友，若您想要推广 `GRPS-1` 标准的其他语言实现，请提交相关 `PR`，届时修改下方的[资源列表]。

您需要确保自己的硬件环境有 `Python` 解释器，您需要全局安装 `pdm` 依赖以实现局部开发 `infini` 文档或源码的目的。

```shell
pip3 install pdm
```

接着在 `infini` 仓库主分支的根目录下激活 `pdm` 虚拟环境。

```shell
cd infini
pdm venv list
pdm venv activate in-project
```

**一、 在本地部署文档**

在 `infini` 仓库根目录下安装 `docs` 组的依赖。

```shell
pdm install -dG docs
```

依赖安装完毕后，可进行版本控制或直接进行文档贡献。

> 版本控制 | `mike` 的其他指令具体可查看 [jimporter/mike](https://github.com/jimporter/mike)。

```shell
pdm run mike serve
```

这样便可以查看不同版本的文档了。

> 文档贡献 | 这样贡献出来的文档永远是 `dev` 分支或 `latests` 分支的，这也是最为普遍的文档贡献方式，`mkdocs` 具体的配置教程可查看 [squidfunk/mkdocs]()。

```shell
pdm run mkdocs serve
```

接着就可以在本地 `8000` 端口查看文档了，同时由于 `mkdocs` 是热加载的，因此您可以直接在 `serve` 指令预览最新文档后，修改对应文档的内容，保存后仅需等待文档内容变化即可。

> [!WARNING]  
>
> 注意，强烈建议学习 [mkdocs-materials](https://squidfunk.github.io/mkdocs-material/) 的文档语法后进行文档内容的贡献 `PR`，同时还请遵循水系核心的[文档规范]。

### 贡献源码

在贡献源码之前，请先知悉水系有一套渐进式开发文档，水系核心 `infini` 的开发是极其内核的，但是，此 `repo` 所代表的仅仅只是 `GRPS-1` 的一个 `Python` 实现，因此如果已经相当了解水系架构和通用规则包标准，那么可以遵循以下说明进行适当的开发。

水系核心主要由三部分构成：`Rule API`、`Rule Wiki`、`Rule Event-Handler`。

1. `Rule API`

该部分由网络库编写，为其他组件提供一个接入或把 `infini` 接入的可能。

3. `Rule Wiki`

该部分主要用于读取 `__doc__` 并格式化为 `mkdocs` 站点以及成品规则书 `pdf`。

4. `Rule Event-Handler`

该部分用于实际与 `HydroRoll` 插件通信。

## 🎍 `resources`

<https://grps.hydroroll.team> _(recommend)_  
<https://grps-v1.netlify.app>  
~~<https://hydroroll-team.github.io/infini/>~~

## 📄 `License`

[MIT](https://github.com/HydroRoll-Team/infini/blob/master/LICENSE) © 2023-PRESENT [简律纯](https://github.com/HsiangNianian)


[通用规则包标准(GRPS)]: https://grps.hydroroll.team/dev/standard/what-is-rule-package/
[资源列表]: https://github.com/HydroRoll-Team/infini?tab=readme-ov-file#-resources
[文档规范]: https://grps.hydroroll.team/dev/contribute/