koishi-plugin-best-jrrp
Version:
支持真随机的今日人品(运势),可任意自定义消息,支持随机图片,还带有排行、分析、货币等功能。
137 lines (102 loc) • 5.92 kB
Markdown
# koishi-plugin-best-jrrp
[](https://www.npmjs.com/package/koishi-plugin-best-jrrp)
支持真随机的今日人品(运势),可任意自定义消息,支持随机图片,还带有排行、分析、货币等功能。
## 功能特性
- **多种计算算法**:支持线性同余、正态分布,以及基于大气噪声的 Random.org 真随机 API。
- **丰富的显示格式**:人品值可以显示为二进制、八进制、十六进制,甚至是动态生成的数学表达式。
- **高度自定义消息**:可配置不同分数范围、特定分数或特定日期的消息。消息模板支持多种占位符,包括 at 用户、一言、本地/网络图片等。
- **灵活的货币系统**:与 `koishi-plugin-monetary` 深度联动,可通过一个简单的规则输入框,实现固定值、随机范围、人品值倍率等多种复杂的奖惩逻辑。
- **全面的数据查询**:支持查询特定日期的人品值(支持自然语言,如“昨天”),或预测未来特定分数将在哪天出现。
- **排行榜与数据分析**:查看今日人气之星,并通过深度统计报告(如走势图、分布热图)分析个人运气走势。
- **灵活的数据管理**:管理员可以按用户或日期(支持自然语言)清除人品数据。
## 命令列表
- `jrrp` - 获取今日人品值。首次使用可获得货币奖励。
- `jrrp.date [date:date]` - 查询指定日期的人品值(支持 "MM-DD", "YYYY-MM-DD", "昨天" 等格式)。
- `jrrp.score [score]` - 预测未来何时会出现指定的人品分数(真随机模式下禁用)。
- `jrrp.rank` - 查看今日人品排行榜。
- `jrrp.analyse` - 分析你的人品数据统计信息。
- `jrrp.clear` - 清除人品数据(需要4级权限)。
## 配置说明
插件配置主要分为基础配置、样式配置、消息配置和强大的货币配置。
### 1. 基础配置
```yaml
# 启用日期查询
enableDate: true
# 启用人品预测
enableScore: true
# 启用人品排行
enableRank: true
# 启用数据分析
enableAnalyse: true
# 计算方式: gaussian(正态分布)/linear(线性同余)/randomorg(真随机)
algorithm: linear
# 密钥 - Random.org (使用真随机时需填写)
apiKey: ''
```
### 2. 样式配置
```yaml
# 是否启用数值格式化
enableScoreFormat: true
# 仅在指定日期启用格式化 (MM-DD格式, 留空则始终启用)
formatDate: '4-1'
# 格式化样式: binary(二进制)/octal(八进制)/hex(十六进制)/simple(简单表达式)/complex(复杂表达式)
scoreFormat: 'simple'
```
### 3. 消息配置
```yaml
# 消息内容 (支持 {money} 等占位符)
template: '{at}你今天的人品值是:{score}{message}'
# 图源地址 (可以是网络JSON链接或本地文件夹路径)
imagesPath: 'https://raw.githubusercontent.com/YisRime/koishi-plugin-onebot-tool/main/resource/pixiv.json'
# 启用区间消息
enableRange: true
# ... 区间消息与特殊消息配置 ...```
### 4. 货币配置 (`koishi-plugin-monetary` 联动)
```yaml
# 启用货币支持
enableMonetary: false
# 签到奖励
rewardRule: '50-150'
# 启用累签惩罚
enableRepeatPenalty: false
# 累签惩罚
penaltyRule: '50'
```
## 货币系统详解
本插件可通过 `rewardRule` 和 `penaltyRule` 两个配置项,实现高度灵活的奖惩逻辑。
### 规则语法
您可以在规则输入框中使用以下任意一种格式:
| 格式 | 示例 | 说明 |
| :--- | :--- | :--- |
| **固定值** | `50` | 奖励或惩罚一个固定的数值。奖励规则中可使用负数,如 `-50`。 |
| **随机整数范围** | `50-100` | 在指定的两个整数之间(包含边界)随机取一个值。 |
| **固定倍率** | `1.5x` | 基于当前获得的人品分数,乘以一个固定的倍率。 |
| **随机倍率范围** | `0.5x-1.5x` | 基于人品分数,乘以一个在指定范围内的随机倍率。 |
### 工作机制
- **`rewardRule` (奖励规则)**: 当用户当天**第一次**使用 `jrrp` 命令时触发。
- 示例: 设置为 `1.5x`,用户人品值为 80,则奖励 `80 * 1.5 = 120` 货币。
- **`penaltyRule` (惩罚规则)**: 当用户在同一天**重复**使用 `jrrp` 命令时触发。
- 规则计算出的值将**自动转为负数**进行扣除。
- 示例: 设置为 `50-100`,用户重复签到,将被随机扣除 50 到 100 的货币。
- **注意**: 扣除操作会检查用户余额,若余额不足,则不会执行。
## 算法详解
### 线性同余算法 (linear)
默认算法。使用线性同余生成器,通过一个简单的哈希函数(基于用户ID和日期)生成伪随机数。计算速度快,分布均匀。
### 正态分布算法 (gaussian)
使用正态分布(高斯分布)进行计算。生成的分数会更倾向于聚集在中间值(50)附近,而两端(0和100)的极值出现的概率较低。
### Random.org API (randomorg)
通过调用 Random.org 的 API 获取基于大气噪声的真随机数。
- **需要提供有效的 API 密钥**。
- 当 API 请求失败或超时时,会自动降级使用**线性同余算法**。
- 在此模式下,`jrrp.day` 和 `jrrp.score` 命令将被禁用,因为真随机数是无法预测的。
## 消息配置
消息模板 (`template`) 支持丰富的占位符:
- `{at}`: @当前用户。
- `{username}`: 当前用户的昵称。
- `{score}`: 经过格式化后的人品分数值。
- `{message}`: 根据分数和日期匹配到的区间或特殊消息。
- `{money}`: 显示本次操作中获得的奖励(正数)或惩罚(负数)。若无货币变动,则此占位符被移除。
- `{hitokoto}`: 从 `v1.hitokoto.cn` 获取一句话。
- `{image:URL}`: 发送指定 URL 的图片。
- `{pixiv}`: 发送一张来自 `imagesPath` 的随机图片。
- `{~}`: 消息分隔符,可将一条消息分段发送。