Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
b7333df
重构排行榜逻辑,支持全局和个人排行榜类型
ZayrexDev Sep 5, 2026
6244d6f
优化排行榜逻辑,支持在个人和全局排行榜中使用有效的组ID
ZayrexDev Sep 5, 2026
f19206f
优化RankGuessCommandHandler,调整附近玩家显示范围逻辑
ZayrexDev Sep 5, 2026
914ae5d
优化RankGuessWeights,动态计算愿望权重以考虑玩家数量
ZayrexDev Sep 5, 2026
e5ff5b2
优化RankGuess逻辑,新增RankType以支持不同游戏状态和记录条件
ZayrexDev Sep 5, 2026
36e0713
修复RankGuessGameService逻辑,调整标准游戏判断条件
ZayrexDev Sep 5, 2026
5a54adb
优化ScoreFilterArguments,新增AR、OD、CS和HP过滤条件
ZayrexDev Sep 5, 2026
0ac0129
优化ScoreCommandHandler,重构目标解析逻辑并支持用户覆盖
ZayrexDev Sep 5, 2026
68751ee
优化ScoreCommandHandler和TaskCoordinator,新增错误提示支持和请求处理逻辑
ZayrexDev Sep 5, 2026
33e2daa
优化APIHelper和RankGuessCommandHandler,新增权重请求参数支持
ZayrexDev Sep 5, 2026
72daaac
优化APIHelper,修正权重请求参数的URI格式
ZayrexDev Sep 5, 2026
05e19e4
优化Router和ScoreCommandHandler,重命名handleBo为handleBp并新增请求反馈
ZayrexDev Sep 5, 2026
ee8cdf0
优化ScoreCommandHandler,新增用户提及解析和错误提示支持
ZayrexDev Sep 5, 2026
28ef10f
优化RankGuessCommandHandler和RankGuessGameService,新增权重计算提示和成绩显示格式调整
ZayrexDev Sep 6, 2026
271a481
优化RankGuessGame,调整权重计算和PP范围提示,增强提示信息格式
ZayrexDev Sep 6, 2026
adc8711
优化RankGuessGame和RankGuessGameService,调整得分计算和提示强度参数
ZayrexDev Sep 6, 2026
819b734
优化RankGuessGame和RankGuessGameService,调整得分计算和提示强度参数
ZayrexDev Sep 6, 2026
9dc8182
优化Rank相关类,新增最小参与者参数以增强统计计算的准确性
ZayrexDev Sep 7, 2026
2c6bae6
优化RankGuessRecordStore,调整个人统计方法以支持可选的最小参与者参数
ZayrexDev Sep 7, 2026
019d75c
优化RankGuessCommandHandler,增强战绩排行回复格式,支持空玩家提示
ZayrexDev Sep 7, 2026
87cc258
优化APIHelper、RankGuessCommandHandler和相关类,调整快捷查询和许愿功能,更新命令用法
ZayrexDev Sep 7, 2026
d750ebf
更新版本号至1.11.8
ZayrexDev Sep 7, 2026
62690a8
调整权重
ZayrexDev Sep 7, 2026
414bd3f
调整权重
ZayrexDev Sep 8, 2026
eb1ba4f
添加回复@
ZayrexDev Sep 8, 2026
0eec9c4
优化目标记忆
ZayrexDev Sep 8, 2026
15bcfa6
更改部分文本
ZayrexDev Sep 8, 2026
fa92717
优化目标记忆
ZayrexDev Sep 9, 2026
4befe3a
添加平均猜测排名功能并优化提示信息
ZayrexDev Sep 9, 2026
48b156a
架构优化
ZayrexDev Sep 9, 2026
63f98e4
优化统计和权重功能,支持指定用户查询
ZayrexDev Sep 9, 2026
5a66982
修改随机文本
ZayrexDev Sep 9, 2026
a6d49fa
添加用户游戏统计功能,优化统计信息展示
ZayrexDev Sep 9, 2026
ac2a71b
添加获取用户自上次选择以来游戏数量的功能,并优化权重计算逻辑
ZayrexDev Sep 9, 2026
ec77106
添加获取用户组排名数据的功能,并优化权重计算逻辑,支持用户权重因素展示
ZayrexDev Sep 9, 2026
a4d4171
添加游戏限制参数到获取用户组排名数据的功能,优化查询逻辑
ZayrexDev Sep 9, 2026
db2b4d5
优化获取用户组排名数据的查询逻辑,修正游戏限制参数设置顺序
ZayrexDev Sep 9, 2026
e1bb589
调整排名游戏的最小游戏数量限制,从10改为5
ZayrexDev Sep 9, 2026
ac68acf
优化权重计算逻辑,调整游戏权重参数和抽选状态提示
ZayrexDev Sep 9, 2026
8837841
优化权重计算逻辑,调整游戏权重参数和抽选状态提示
ZayrexDev Sep 10, 2026
7f2c316
优化权重计算逻辑,调整游戏权重参数和抽选状态提示
ZayrexDev Sep 10, 2026
e459c21
调整评分计算逻辑,优化原始评分权重和排名阈值
ZayrexDev Sep 10, 2026
630b610
重构加载文本生成逻辑,提取随机选择方法以提高代码可读性
ZayrexDev Sep 10, 2026
42c08a9
限制未知指令和空指令回复,仅在非群组环境中发送帮助信息
ZayrexDev Sep 10, 2026
d0c5cd1
限制未知指令和空指令回复,仅在非群组环境中发送帮助信息
ZayrexDev Sep 10, 2026
0bcdaa2
重构命令生成逻辑,简化回复消息中的命令格式化
ZayrexDev Sep 10, 2026
992f17b
添加公告管理功能,重构相关逻辑以支持公告的创建、发布、撤回和列表显示
ZayrexDev Sep 12, 2026
28ec44d
优化回放视频生成逻辑,增加错误处理并改进消息发送机制
ZayrexDev Sep 12, 2026
0d14748
增加回放视频生成的超时处理,重构相关逻辑以支持自定义超时参数
ZayrexDev Sep 12, 2026
c3cf341
优化回放视频生成错误处理,返回具体错误信息以提升用户反馈
ZayrexDev Sep 13, 2026
4954163
添加取消回放渲染功能,优化部分指令语法
ZayrexDev Sep 13, 2026
e1304b5
添加图像渲染超时错误码及对应提示信息
ZayrexDev Sep 13, 2026
bcd54b6
优化成绩查询错误处理,移除提示信息以简化回复内容
ZayrexDev Sep 13, 2026
ab0c8ec
更新排名过滤逻辑,支持新增排名选项 SSH 和 SS,并调整相关错误提示
ZayrexDev Sep 13, 2026
39ff579
更新可取消回放状态逻辑,支持新增状态 'upload_queued' 并调整相关提示信息
ZayrexDev Sep 13, 2026
5a66a66
添加用户相关提示功能,优化提示逻辑以支持更多用户特征
ZayrexDev Sep 14, 2026
5f78365
添加用户相关提示功能,优化提示逻辑以支持更多用户特征
ZayrexDev Sep 14, 2026
628db6c
优化用户名特征提取逻辑,处理空用户名返回空列表并增加字母检查
ZayrexDev Sep 14, 2026
51ee166
优化 RankGuessGameService 构造函数,简化代码并调整提示逻辑以支持更多特征
ZayrexDev Sep 14, 2026
157a187
添加好友状态功能
ZayrexDev Sep 15, 2026
6bd927b
优化 RankGuessGameService 和 Round 类中的提示逻辑,增强用户状态提示并调整用户名特征输出格式
ZayrexDev Sep 15, 2026
9ca8cf0
优化 RankGuessGameService 和 UserDataStore 中的代码,调整方法参数类型并使用集合去重用户信息
ZayrexDev Sep 15, 2026
d21b837
优化 SocialCommandHandler 中的好友更新逻辑,提取更新好友的功能到独立方法并简化代码
ZayrexDev Sep 15, 2026
89f357f
优化 UserDataStore 中的用户信息存储逻辑,使用 HashMap 替代流式处理以提高性能
ZayrexDev Sep 15, 2026
e0d225e
优化 ReplyFactory 中的好友状态回复格式,调整链接文本和去除多余分隔符
ZayrexDev Sep 15, 2026
e2fea37
优化 ReplyFactory 和 SocialCommandHandler 中的好友状态逻辑,调整参数类型并增强状态提示
ZayrexDev Sep 15, 2026
fd5a7dc
优化 RankGuessCommandHandler 中的排名解析逻辑,调整正则表达式和参数类型以支持小数,并处理溢出情况
ZayrexDev Sep 15, 2026
b1ef7a9
优化 HintUtil 中的强度权重数组,调整中期和后期的权重值以改善游戏平衡
ZayrexDev Sep 15, 2026
53ae1d8
优化 ReplyFactory 中的好友状态回复格式,调整文本内容以增强可读性和信息清晰度
ZayrexDev Sep 15, 2026
788c3c2
优化 FinishedRound 和 RankGuessCommandHandler 中的参数,添加 starterOpenId 以支持游…
ZayrexDev Sep 15, 2026
fcfcd08
优化 SocialCommandHandler 中的回复格式,使用 PendingMessage 包装未绑定提示以增强信息呈现
ZayrexDev Sep 16, 2026
7413727
添加 /sup
ZayrexDev Sep 16, 2026
9f3f93a
更新版本号至 1.12.0
ZayrexDev Sep 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 21 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Seira 是一个提供 osu! 成绩查询的 QQ 机器人。
支持生成最好成绩图、最近成绩图、排行榜等,持续更新中...

Seira 依赖 [oStella](https://github.com/BotSeira/oStella) 作为上游数据服务。
Seira 依赖 [oStella](https://github.com/bptSeira/oStella) 作为上游数据服务。

详细使用文档在[这里](https://docs.seira.top/)~

Expand Down Expand Up @@ -47,11 +47,6 @@ Seira正在活跃开发中,在使用的过程中可能会有一些Bug,也会

<img width="400" alt="image" src="https://github.com/user-attachments/assets/c1caf387-381c-442f-99da-5b4257657576" />

每局结算后自动保存战绩。在群内使用 `/rg stats` 查询自己的本群战绩,使用 `/rg stats all` 查询自己的全部群聊战绩。
统计包括参与数、获胜数、胜率、前 20% 次数和达成率、平均分、最高分、总得分及平均名次。
每人每局只统计最终猜测,获胜按最终排行榜第一名计算;前 20% 名额向上取整,仅统计至少 5 人参与的对局,达成率以这些对局为分母。
战绩与用户绑定共用配置中的 SQLite 数据库,分数采用最终结算得分;历史未记录的对局不会自动补入。

### 查询群友的排行榜!

<img width="400" alt="image" src="https://github.com/user-attachments/assets/cbc361a4-61e0-440d-908e-f1d52009373e" />
Expand All @@ -78,23 +73,24 @@ Seira正在活跃开发中,在使用的过程中可能会有一些Bug,也会
| `/f` | `/f` | 获取好友列表 |
| `/fall` | `/fall` | 获取全部好友列表 |
| `/fclear` | `/fclear` | 清除好友记录 |
| `/bo` | `/bo [n] [uid/username/@user] [filters...]` | 获取最多200条最好成绩后过滤;省略n时返回第一个匹配成绩详情 |
| `/rs` | `/rs [n] [uid/username/@user] [filters...]` | 获取最多200条最近成绩后过滤;省略n时返回第一个匹配成绩详情 |
| `/rp` | `/rp [n] [uid/username/@user] [filters...]` | 获取最多200条最近通过成绩后过滤;省略n时返回第一个匹配成绩详情 |
| `/bp` | `/bp [n/a-b] [uid/username/@user] [filters...]` | 获取最多200条最好成绩或指定范围后过滤;省略数量时返回第一个匹配成绩详情 |
| `/rs` | `/rs [n/a-b] [uid/username/@user] [filters...]` | 获取最多200条最近成绩或指定范围后过滤;省略数量时返回第一个匹配成绩详情 |
| `/rp` | `/rp [n/a-b] [uid/username/@user] [filters...]` | 获取最多200条最近通过成绩或指定范围后过滤;省略数量时返回第一个匹配成绩详情 |
| `/tb` | `/tb [#days] [uid/username/@user]` | 获取近N天达成的BP(默认1天),并保留完整BP排名编号 |
| `/m` | `/m <id/rsN/boN> [Mod]` | 获取指定谱面信息 |
| `/ap` | `/ap <id/rsN/boN>` | 获取指定谱面音频预览 |
| `/bgp` | `/bgp <id/rsN/boN>` | 获取指定谱面背景预览 |
| `/s` | `/s <id/locId/rsN/boN>` | 获取指定的在线或本地成绩图 |
| `/sa` | `/sa <id/locId/rsN/boN>` | 获取指定成绩分析图 |
| `/ma` | `/ma [id/locId/rsN/boN] [n/#n]` | 获取指定或最近目标成绩的Miss分析;省略目标时用`#n`指定Miss |
| `/m` | `/m <id/rsN/bpN> [Mod]` | 获取指定谱面信息 |
| `/ap` | `/ap <id/rsN/bpN>` | 获取指定谱面音频预览 |
| `/bgp` | `/bgp <id/rsN/bpN>` | 获取指定谱面背景预览 |
| `/s` | `/s <id/locId/rsN/bpN>` | 获取指定的在线或本地成绩图 |
| `/sa` | `/sa <id/locId/rsN/bpN>` | 获取指定成绩分析图 |
| `/ma` | `/ma [id/locId/rsN/bpN] [n/#n]` | 获取指定或最近目标成绩的Miss分析;省略目标时用`#n`指定Miss |
| `/u` | `/u [uid/username/@user]` | 获取指定用户信息 |
| `/r` | `/r [id/locId/rsN/boN] [[mm:ss]-[mm:ss]]` | 生成并发送指定或最近目标的回放视频。省略范围时自动识别高光,使用`-`渲染整个回放 |
| `/r` | `/r [id/locId/rsN/bpN] [[mm:ss]-[mm:ss]]` | 生成并发送指定或最近目标的回放视频。省略范围时自动识别高光,使用`-`渲染整个回放 |
| `/rg` | `/rg <start/group/#Rank/end/wish/stats [all]/lb [all]>` | 猜 Rank 游戏及个人战绩查询 |
| `/rsc` | `/rsc [id/locId/rsN/boN] [+<id1>,<id2>...]` | 生成并发送指定或最近目标的成绩同屏回放视频;追加用户和范围顺序不限 |
| `/rsc` | `/rsc [id/locId/rsN/bpN] [+<id1>,<id2>...]` | 生成并发送指定或最近目标的成绩同屏回放视频;追加用户和范围顺序不限 |
| `/rstat` | `/rstat [id]` | 获取视频生成进度 |
| `/ms` | `/ms <id/rsN/boN>` | 获取指定谱面集信息 |
| `/dl` | `/dl <id/rsN/boN/mp>` | 获取指定谱面集的镜像下载链接 |
| `/rcancel` | `/rcancel <id>` | 取消排队中、渲染中或上传中的回放任务 |
| `/ms` | `/ms <id/rsN/bpN>` | 获取指定谱面集信息 |
| `/dl` | `/dl <id/rsN/bpN/mp>` | 获取指定谱面集的镜像下载链接 |
| `/sms` | `/sms <query>` | 搜索谱面集 |
| `/lb` | `/lb [id] [<uid1>,<uid2>...]` | 列出指定谱面排行或表现分排行 |
| `/daily` | `/daily` | 每日挑战信息 |
Expand All @@ -116,15 +112,17 @@ Seira正在活跃开发中,在使用的过程中可能会有一些Bug,也会

### 快捷查询

对于一些需要指定谱面ID或成绩ID的指令(如 `/m`、`/s`、`/ms` 等),支持快捷查询写法,格式为 `rs5`、`bo3`、`rp2`。
对于一些需要指定谱面ID或成绩ID的指令(如 `/m`、`/s`、`/ms` 等),支持快捷查询写法,格式为 `rs5`、`bp3`、`rp2`。

快捷查询也可以直接作为指令使用,并在后面指定玩家,例如 `/bp5 @用户`;紧凑写法同样支持列表范围,例如 `/bp21-30`、`/rp6-10 @用户`。

这些指令会共享最近一次显式指定的查询目标。已有最近目标时,`/r`、`/rsc`、`/ma` 可以省略目标,例如 `/r 01:00-01:30`、`/rsc +12345,67890 -`、`/ma #2`。

也可以在前面写上玩家ID、用户名或@用户,例如 `123456 rs5`、`peppy bo3`、`@ABC bo3`,表示查询指定玩家的最近成绩第 5 条或最好成绩第 3 条。
也可以在前面写上玩家ID、用户名或@用户,例如 `123456 rs5`、`peppy bp3`、`@ABC bp3`,表示查询指定玩家的最近成绩第 5 条或最好成绩第 3 条。

- `rs5`:使用你已绑定的玩家ID,查询“最近成绩第 5 条”
- `rp1`:使用你已绑定的玩家ID,查询“最近通过成绩第 1 条”
- `bo3`:使用你已绑定的玩家ID,查询“最好成绩第 3 条”
- `bp3`:使用你已绑定的玩家ID,查询“最好成绩第 3 条”
- `12345 rs1`:使用12345作为玩家ID,查询“最近成绩第 1 条”
- `peppy rs1`:先按用户名查找玩家ID,再查询“最近成绩第 1 条”
- `@ABC rs1`:使用ABC绑定的用户的ID作为玩家ID,查询“最近成绩第 1 条”
Expand All @@ -144,7 +142,7 @@ Seira正在活跃开发中,在使用的过程中可能会有一些Bug,也会
>
> **警告:危险区域!**
>
> 以下命令仅用于调试,使用不当可能会造成数据丢失、账号封禁等后果,且仅在调试模式启用且发送者为Bot管理员的情况下可用。
> 以下命令仅用于调试,使用不当可能会造成数据丢失、账号封禁等后果,且仅在调试模式启用且发送者为bpt管理员的情况下可用。
>
> 这些指令可能会随时进行添加、修改或删除,且不保证向后兼容。

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.github.BotSeira</groupId>
<artifactId>SeiraCore</artifactId>
<version>1.11.6</version>
<version>1.12.0</version>

<properties>
<maven.compiler.source>25</maven.compiler.source>
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/xyz/zcraft/seira/SeiraApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import xyz.zcraft.seira.services.BindingService;
import xyz.zcraft.seira.services.BotStat;
import xyz.zcraft.seira.services.DailyLuck;
import xyz.zcraft.seira.services.NoticeStore;
import xyz.zcraft.seira.util.AdminRegistry;
import xyz.zcraft.seira.util.ApplicationExecutors;

Expand Down Expand Up @@ -45,6 +46,7 @@ public SeiraApplication(AppConfig config) {
LOG.info("Initializing application services");
DailyLuck.initialize(config.qq().appId());
BotStat.initialize();
NoticeStore.initialize();

ApplicationExecutors createdExecutors = new ApplicationExecutors();
BindingService createdBindingService = new BindingService(
Expand Down
Loading
Loading