Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
c507dc5
添加指令预处理
ZayrexDev Aug 25, 2026
749b5e3
增强回放渲染失败信息,添加可能原因解析
ZayrexDev Aug 28, 2026
4b42982
更新版本
ZayrexDev Aug 28, 2026
6fe6aa7
添加关闭完成日志信息
ZayrexDev Aug 28, 2026
fc6af95
优化带过滤器的指令参数解析(#42)
ZayrexDev Sep 1, 2026
14177d9
优化部分指令目标参数解析(#42)
ZayrexDev Sep 1, 2026
71c4d9c
使/rg猜测无需带#
ZayrexDev Sep 1, 2026
c99827f
修改部分文本
ZayrexDev Sep 1, 2026
9006e67
修复rg统计结果的300数量bug
ZayrexDev Sep 1, 2026
0384115
修复抄袭惩罚提示多次的bug
ZayrexDev Sep 1, 2026
9fdf605
更新文本
ZayrexDev Sep 1, 2026
17ca723
修改了rg提示权重
ZayrexDev Sep 1, 2026
4d86970
修改了rg提示权重
ZayrexDev Sep 1, 2026
0761c51
添加猜群友rank
ZayrexDev Sep 1, 2026
8b90aca
修复一些问题
ZayrexDev Sep 1, 2026
3e98ad7
添加获取用户Rank的功能,并优化Rank Guess命令处理逻辑
ZayrexDev Sep 1, 2026
7f846a8
添加对replay字段的支持,更新ScoreFilterArguments以解析相关过滤器
ZayrexDev Sep 2, 2026
93be08d
添加许愿功能,更新RankGuessCommandHandler以支持用户许愿,并优化权重生成逻辑
ZayrexDev Sep 2, 2026
c72abda
更新版本号至1.11.4,并在帮助信息中添加许愿功能的命令参数
ZayrexDev Sep 2, 2026
6fb0e65
优化好友列表显示,添加折叠功能以改善群组中的信息展示
ZayrexDev Sep 2, 2026
7a7b75e
为/rg添加权重查询和限制频繁猜测
ZayrexDev Sep 2, 2026
c85881d
调整权重
ZayrexDev Sep 2, 2026
c125c63
移除weight
ZayrexDev Sep 2, 2026
394ca0b
恢复权重记录功能,确保在游戏结束时正确记录分数和用户信息
ZayrexDev Sep 2, 2026
88114f4
优化权重选择逻辑,修复一些问题
ZayrexDev Sep 2, 2026
7df3d1d
添加权重保存功能,确保游戏结束时正确记录权重数据
ZayrexDev Sep 2, 2026
8ec870a
优化提示信息格式,调整文本内容以提升用户体验
ZayrexDev Sep 2, 2026
d6050fa
添加新的错误码和提示信息,优化用户反馈体验
ZayrexDev Sep 2, 2026
9c0cd32
重构消息发送逻辑,添加猜rank统计数据
ZayrexDev Sep 3, 2026
1bbdad0
优化抄袭惩罚降低提示
ZayrexDev Sep 3, 2026
b428dc4
添加停止所有猜测游戏的功能,确保在请求停止时正确结束进行中的游戏
ZayrexDev Sep 3, 2026
4629b00
添加视频消息引用功能,优化猜 Rank 游戏状态反馈
ZayrexDev Sep 3, 2026
42d1369
优化猜Rank游戏结束逻辑,添加战绩记录条件和反馈信息
ZayrexDev Sep 3, 2026
c294c26
优化停止所有猜测游戏的逻辑,确保在停止时不会影响进行中的游戏
ZayrexDev Sep 3, 2026
de59863
添加获取用户成绩权重的API调用,并在权重命令中显示用户的成绩权重
ZayrexDev Sep 3, 2026
b5b92d7
优化错误处理回复,添加用户引用信息以提升反馈清晰度
ZayrexDev Sep 3, 2026
a9491f5
优化猜 Rank 战绩统计逻辑,添加用户参与次数和胜率反馈,调整排名条件
ZayrexDev Sep 3, 2026
6833c53
整理代码,修复一些问题
ZayrexDev Sep 3, 2026
bfe7cf0
优化排名评分逻辑,调整评分范围和等级划分
ZayrexDev Sep 3, 2026
400260b
调整排名评分逻辑,修改胜率和前二十名比重计算
ZayrexDev Sep 3, 2026
0c12f7b
调整比重
ZayrexDev Sep 3, 2026
8d37e75
调整比重
ZayrexDev Sep 3, 2026
206214b
调整比重
ZayrexDev Sep 3, 2026
1ccdd3c
调整比重
ZayrexDev Sep 3, 2026
2fe7e11
更新命令用法,简化/rg指令格式
ZayrexDev Sep 3, 2026
88f4cce
优化权重计算逻辑,增加用户概率反馈
ZayrexDev Sep 3, 2026
851e4b4
更新统计逻辑,增加最近游戏表现的反馈
ZayrexDev Sep 3, 2026
2974491
更新统计逻辑,增加最近游戏表现的反馈
ZayrexDev Sep 3, 2026
d766f4a
调整原始评分计算逻辑,修改权重因子
ZayrexDev Sep 3, 2026
49f287d
更新随机评分权重计算逻辑,增加权重因子参数
ZayrexDev Sep 4, 2026
397084a
调整最近用户限制和评分重复因子,优化权重计算逻辑
ZayrexDev Sep 4, 2026
523be06
优化代码结构
ZayrexDev Sep 4, 2026
73f0928
优化/rg的Rank计算逻辑
ZayrexDev Sep 4, 2026
ff2f3a6
更新版本号至1.11.6
ZayrexDev Sep 4, 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
79 changes: 42 additions & 37 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ 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 @@ -65,43 +70,43 @@ Seira正在活跃开发中,在使用的过程中可能会有一些Bug,也会

> 所有命令都以 `/` 开头。指令详情请见[文档](https://docs.seira.top/overview/commands.html)。

| 命令 | 用法 | 结果 |
|-----------------|----------------------------------------------------|---------------------------------------------------------------------------------|
| `/bind` | `/bind` | 开始osu账号绑定流程 |
| `/unbind` | `/unbind` | 解除当前用户的osu账号绑定 |
| `/clearhistory` | `/clearhistory` | 清除当前用户在群聊中的记录 |
| `/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时返回第一个匹配成绩详情 |
| `/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 |
| `/u` | `/u [uid/username/@user]` | 获取指定用户信息 |
| `/r` | `/r [id/locId/rsN/boN] [[mm:ss]-[mm:ss]]` | 生成并发送指定或最近目标的回放视频。省略范围时自动识别高光,使用`-`渲染整个回放 |
| `/rg` | `/rg <start/#Rank/end>` | 在群聊中开始、参与或结束猜 Rank 游戏 |
| `/rsc` | `/rsc [id/locId/rsN/boN] [+<id1>,<id2>...]` | 生成并发送指定或最近目标的成绩同屏回放视频;追加用户和范围顺序不限 |
| `/rstat` | `/rstat [id]` | 获取视频生成进度 |
| `/ms` | `/ms <id/rsN/boN>` | 获取指定谱面集信息 |
| `/dl` | `/dl <id/rsN/boN/mp>` | 获取指定谱面集的镜像下载链接 |
| `/sms` | `/sms <query>` | 搜索谱面集 |
| `/lb` | `/lb [id] [<uid1>,<uid2>...]` | 列出指定谱面排行或表现分排行 |
| `/daily` | `/daily` | 每日挑战信息 |
| `/luck` | `/luck` | 今日人品 |
| `/mp` | `/mp` | 多人房间列表 |
| `/watch` | `/watch add/del/list [目标]` | 添加/删除/列出监视任务 |
| `/mpwatch` | `/mpwatch start/stop/status [目标]` | 按群成员添加、停止或查看多人房间监视;`stop all` 可停止本群全部监视 |
| `/wx` | `/wx start <UID列表> <谱面ID列表>` / `/wx stop` | 监视指定玩家在指定谱面取得的成绩,重启后自动恢复 |
| `/dcs` | `/dcs start <guild-id>.<channel-id>` / `/dcs stop` | 开启或解除当前 QQ 群与 Discord 频道的双向消息同步 |
| `/stat` | `/stat` | 服务状态和统计信息文本 |
| `/inspect` | `/inspect` | 获取当前上下文信息 |
| `/help` | `/help` | 显示帮助信息 |
| 命令 | 用法 | 结果 |
|-----------------|---------------------------------------------------------|---------------------------------------------------------------------------------|
| `/bind` | `/bind` | 开始osu账号绑定流程 |
| `/unbind` | `/unbind` | 解除当前用户的osu账号绑定 |
| `/clearhistory` | `/clearhistory` | 清除当前用户在群聊中的记录 |
| `/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时返回第一个匹配成绩详情 |
| `/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 |
| `/u` | `/u [uid/username/@user]` | 获取指定用户信息 |
| `/r` | `/r [id/locId/rsN/boN] [[mm:ss]-[mm:ss]]` | 生成并发送指定或最近目标的回放视频。省略范围时自动识别高光,使用`-`渲染整个回放 |
| `/rg` | `/rg <start/group/#Rank/end/wish/stats [all]/lb [all]>` | 猜 Rank 游戏及个人战绩查询 |
| `/rsc` | `/rsc [id/locId/rsN/boN] [+<id1>,<id2>...]` | 生成并发送指定或最近目标的成绩同屏回放视频;追加用户和范围顺序不限 |
| `/rstat` | `/rstat [id]` | 获取视频生成进度 |
| `/ms` | `/ms <id/rsN/boN>` | 获取指定谱面集信息 |
| `/dl` | `/dl <id/rsN/boN/mp>` | 获取指定谱面集的镜像下载链接 |
| `/sms` | `/sms <query>` | 搜索谱面集 |
| `/lb` | `/lb [id] [<uid1>,<uid2>...]` | 列出指定谱面排行或表现分排行 |
| `/daily` | `/daily` | 每日挑战信息 |
| `/luck` | `/luck` | 今日人品 |
| `/mp` | `/mp` | 多人房间列表 |
| `/watch` | `/watch add/del/list [目标]` | 添加/删除/列出监视任务 |
| `/mpwatch` | `/mpwatch start/stop/status [目标]` | 按群成员添加、停止或查看多人房间监视;`stop all` 可停止本群全部监视 |
| `/wx` | `/wx start <UID列表> <谱面ID列表>` / `/wx stop` | 监视指定玩家在指定谱面取得的成绩,重启后自动恢复 |
| `/dcs` | `/dcs start <guild-id>.<channel-id>` / `/dcs stop` | 开启或解除当前 QQ 群与 Discord 频道的双向消息同步 |
| `/stat` | `/stat` | 服务状态和统计信息文本 |
| `/inspect` | `/inspect` | 获取当前上下文信息 |
| `/help` | `/help` | 显示帮助信息 |

部分指令会先回复“请求已加入队列,预计等待时间 X 秒”,待异步请求完成后再额外发送结果消息。

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.0</version>
<version>1.11.6</version>

<properties>
<maven.compiler.source>25</maven.compiler.source>
Expand Down
1 change: 0 additions & 1 deletion src/main/java/xyz/zcraft/seira/Seira.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import org.apache.logging.log4j.core.config.Configurator;
import xyz.zcraft.seira.config.AppConfig;
import xyz.zcraft.seira.config.ConfigLoader;
import xyz.zcraft.seira.runtime.SeiraApplication;

import java.io.IOException;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,28 @@
package xyz.zcraft.seira.runtime;
package xyz.zcraft.seira;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.config.Configurator;
import xyz.zcraft.seira.binding.BindingService;
import xyz.zcraft.seira.binding.UserDataStore;
import xyz.zcraft.seira.bot.QQBot;
import xyz.zcraft.seira.config.AppConfig;
import xyz.zcraft.seira.config.RuntimeConfig;
import xyz.zcraft.seira.console.ConsoleCommandProcessor;
import xyz.zcraft.seira.console.JLineConsole;
import xyz.zcraft.seira.console.UserDataConsoleAccess;
import xyz.zcraft.seira.config.AppConfig;
import xyz.zcraft.seira.config.RuntimeConfig;
import xyz.zcraft.seira.security.AdminRegistry;
import xyz.zcraft.seira.db.SqliteDatabase;
import xyz.zcraft.seira.services.BindingService;
import xyz.zcraft.seira.services.BotStat;
import xyz.zcraft.seira.services.DailyLuck;
import xyz.zcraft.seira.util.AdminRegistry;
import xyz.zcraft.seira.util.ApplicationExecutors;

import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;

/** Composition root and single owner of all long-lived application resources. */
/**
* Composition root and single owner of all long-lived application resources.
*/
public final class SeiraApplication implements AutoCloseable {
private static final Logger LOG = LogManager.getLogger(SeiraApplication.class);

Expand All @@ -31,7 +34,7 @@ public final class SeiraApplication implements AutoCloseable {

public SeiraApplication(AppConfig config) {
Objects.requireNonNull(config, "config");
UserDataStore.init(config.seira().sqlitePath());
SqliteDatabase.init(config.seira().sqlitePath());
RuntimeConfig createdRuntimeConfig = new RuntimeConfig(config);
AdminRegistry createdAdmins = new AdminRegistry(config.seira().adminIds());
createdRuntimeConfig.addReloadListener(result -> {
Expand Down Expand Up @@ -92,5 +95,6 @@ public void close() {
bot.close();
DailyLuck.saveToFile();
BotStat.shutdown();
LOG.info("Shutdown complete");
}
}
Loading
Loading