# konabot

在 MTTU 内部使用的 bot 一只。

## 协助开发方式

请首先联系 passthem 以获得该 Gitea 网站的账号和初始密码，登录后我将会给你添加本仓库的权限。然后，按照下面的方式配置环境。

## 环境配置

本项目使用 Poetry 进行版本管理

### 前置要求

- 一台四肢健全的电脑
    - 或许科学上网很重要
    - 安装 [git](https://git-scm.com/) 版本管理工具
    - 安装 [python](https://www.python.org/)，推荐 3.12.x 版本或以上
- 大脑
    - 上面不会的可以问 AI，你把这个全文复制粘贴给 AI 都行，让它手把手教你配置环境
    - 也可以问我，因为 AI 很多时候没法解决梯子问题
    - 也可以找群友问

### 安装 pipx 和 poetry

```bash
python -m pip install --user pipx
pipx ensurepath
pipx install poetry
```

### 下载代码并安装依赖

在你喜欢的（以后不太会移动的，专门用来装代码的）文件夹里面打开控制台。

```bash
git clone https://gitea.service.jazzwhom.top/Passthem/konabot.git
cd konabot
poetry install
```

### 编辑配置文件

如果你使用 [VSCode](https://code.visualstudio.com/)，可以在控制台输入指令，在此处打开 VSCode：

```bash
code .
```

复制 `.env.example` 文件并改名为 `.env`。

#### 如果你要配置 Discord

首先，在 [Discord 开放平台](https://discord.com/developers/applications) 创建应用和机器人，记好 Bot Token。然后，按照 [该文档](https://github.com/nonebot/adapter-discord) 编辑 `.env` 文件，并多添加一行 `ENABLE_DISCORD=true`

#### 如果你要配置 Onebot（QQ 方向）

你可以下载一个 Onebot 模拟器：[Matcha](https://github.com/A-kirami/matcha)

然后，根据 [该文档](https://onebot.adapters.nonebot.dev/docs/guide/setup) 配置连接，并多添加一行 `ENABLE_QQ=true`

#### 如果你想禁用控制台的 Bot 面板

配置 `ENABLE_CONSOLE=false`

#### 配置并支持 LLM（大语言模型）

详见[LLM 配置文档](/docs/LLM.md)。

#### 配置 konabot-web 以支持更高级的图片渲染

详见[konabot-web 配置文档](/docs/konabot-web.md)

#### 数据库配置

本项目使用SQLite作为数据库，默认数据库文件位于`./data/database.db`。可以通过设置`DATABASE_PATH`环境变量来指定其他位置。

### 运行

使用命令行手动启动 Bot：

```bash
poetry run just watch
```

如果你不希望自动重载，只是想运行 Bot，可以直接运行：

```bash
poetry run python bot.py
```

## 开发文档

- Nonebot2 开发文档上可以参考的内容
    - [事件响应器](https://nonebot.dev/docs/tutorial/matcher)
    - [事件处理](https://nonebot.dev/docs/tutorial/handler)
    - [Alconna 插件](https://nonebot.dev/docs/best-practice/alconna/)

## 代码测试

本项目使用 pytest 进行自动化测试，你可以把你的测试代码放在 `./tests` 目录下。

使用命令行执行测试：

```bash
poetry run just test
```

使用命令行，在浏览器查看测试覆盖率报告：

```bash
poetry run just coverage
# 此时会打开一个 :8000 端口的 Web 服务器
# 你可以在 http://localhost:8000 查看覆盖率报告
# 在控制台使用 Ctrl+C 关闭这个 Web 服务器
```
