diff --git a/CHANGELOG.md b/CHANGELOG.md index e7c5fbc..bc1ebb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## beta 2.0.5.1023 - 2026-10-23 17:16:12 + +- 21 点胜率显示修复完成:`/摩拉` 里的 21 点战绩现在会和 `/21点 胜率` 使用同一套统计口径。 +- 修复 `/摩拉` 误读旧版通用胜负字段的问题,避免旧抽奖等历史数据污染 21 点胜率展示。 +- 超时认输、主动认输、单人结算和多人牌桌仍统一写入 `blackjack_stats`,本次只调整展示读取来源。 + ## beta 2.0.4.1023 - 2026-10-23 16:56:33 - 许愿池和 21 点小版本更新完成:`/抽奖` 已并入许愿池,21 点新增群内胜率统计并调整下注上限。 diff --git a/README.md b/README.md index f0519ef..4d22ba4 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ JWeBot 是运行于 Linux 的单群微信自动回复系统。它通过本地 OC 观察选定的微信窗口,将消息写入持久化 Edge 账本,调用经过审核的命令插件, 并通过带视觉确认的 GUI 发送链路回复。 -当前版本:`beta 2.0.4.1023`,更新时间:2026-10-23 16:56:33。 +当前版本:`beta 2.0.5.1023`,更新时间:2026-10-23 17:16:12。 1.0 Beta 收口了当前稳定功能:本地命令插件、人物与上下文索引、 Steam 状态与时长查询、虚拟摩拉游戏、多人彩票、21 点、CS Major @@ -272,10 +272,10 @@ visually confirmed GUI bridge. Current version: ```text -beta 2.0.4.1023 +beta 2.0.5.1023 ``` -Updated: 2026-10-23 16:56:33. +Updated: 2026-10-23 17:16:12. The 1.0 Beta baseline consolidates the stable local command set, person and context indexes, Steam presence/playtime queries, virtual coin games, diff --git a/VERSION b/VERSION index ef7f4ed..a19b372 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -beta 2.0.4.1023 +beta 2.0.5.1023 diff --git a/packages/jwebot-config/pyproject.toml b/packages/jwebot-config/pyproject.toml index aa6dd31..f04cd3a 100644 --- a/packages/jwebot-config/pyproject.toml +++ b/packages/jwebot-config/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "jwebot-config" -version = "2.0.4b1+1023" +version = "2.0.5b1+1023" description = "Profile-based configuration compiler for JWeBot" requires-python = ">=3.9" dependencies = [ diff --git a/packages/jwebot-config/src/jwebot_config/__init__.py b/packages/jwebot-config/src/jwebot_config/__init__.py index 7446596..b8828ca 100644 --- a/packages/jwebot-config/src/jwebot_config/__init__.py +++ b/packages/jwebot-config/src/jwebot_config/__init__.py @@ -36,4 +36,4 @@ __all__ = [ "write_default_profile", ] -__version__ = "2.0.4b1+1023" +__version__ = "2.0.5b1+1023" diff --git a/packages/jwebot-extension-host/pyproject.toml b/packages/jwebot-extension-host/pyproject.toml index 79f17e9..7de7062 100644 --- a/packages/jwebot-extension-host/pyproject.toml +++ b/packages/jwebot-extension-host/pyproject.toml @@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta" [project] name = "jwebot-extension-host" -version = "2.0.4b1+1023" +version = "2.0.5b1+1023" description = "Single-release, single-invocation process host for JWeBot extensions" requires-python = ">=3.9" dependencies = [ - "jwebot-sdk==2.0.4b1+1023", - "jwebot-kernel==2.0.4b1+1023", + "jwebot-sdk==2.0.5b1+1023", + "jwebot-kernel==2.0.5b1+1023", ] [project.scripts] diff --git a/packages/jwebot-extension-host/src/jwebot_extension_host/__init__.py b/packages/jwebot-extension-host/src/jwebot_extension_host/__init__.py index e64257e..2331920 100644 --- a/packages/jwebot-extension-host/src/jwebot_extension_host/__init__.py +++ b/packages/jwebot-extension-host/src/jwebot_extension_host/__init__.py @@ -16,4 +16,4 @@ __all__ = [ "process_request", ] -__version__ = "2.0.4b1+1023" +__version__ = "2.0.5b1+1023" diff --git a/packages/jwebot-kernel/pyproject.toml b/packages/jwebot-kernel/pyproject.toml index 983f378..98050a3 100644 --- a/packages/jwebot-kernel/pyproject.toml +++ b/packages/jwebot-kernel/pyproject.toml @@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta" [project] name = "jwebot-kernel" -version = "2.0.4b1+1023" +version = "2.0.5b1+1023" description = "Stable routing and extension authority for JWeBot" requires-python = ">=3.9" dependencies = [ - "jwebot-config==2.0.4b1+1023", - "jwebot-sdk==2.0.4b1+1023", - "jwebot-official-extensions==2.0.4b1+1023", + "jwebot-config==2.0.5b1+1023", + "jwebot-sdk==2.0.5b1+1023", + "jwebot-official-extensions==2.0.5b1+1023", "tomli>=2; python_version < '3.11'", ] diff --git a/packages/jwebot-kernel/src/jwebot_kernel/__init__.py b/packages/jwebot-kernel/src/jwebot_kernel/__init__.py index 1294521..66ced8a 100644 --- a/packages/jwebot-kernel/src/jwebot_kernel/__init__.py +++ b/packages/jwebot-kernel/src/jwebot_kernel/__init__.py @@ -107,4 +107,4 @@ __all__ = [ "verify_installed_release_signature", ] -__version__ = "2.0.4b1+1023" +__version__ = "2.0.5b1+1023" diff --git a/packages/jwebot-official-extensions/pyproject.toml b/packages/jwebot-official-extensions/pyproject.toml index 4ba8a13..6f2bf9b 100644 --- a/packages/jwebot-official-extensions/pyproject.toml +++ b/packages/jwebot-official-extensions/pyproject.toml @@ -4,11 +4,11 @@ build-backend = "setuptools.build_meta" [project] name = "jwebot-official-extensions" -version = "2.0.4b1+1023" +version = "2.0.5b1+1023" description = "Reviewed local command adapters and broker implementation for JWeBot" requires-python = ">=3.9" dependencies = [ - "jwebot-sdk==2.0.4b1+1023", + "jwebot-sdk==2.0.5b1+1023", ] [tool.setuptools.packages.find] diff --git a/packages/jwebot-official-extensions/src/jwebot_official_extensions/__init__.py b/packages/jwebot-official-extensions/src/jwebot_official_extensions/__init__.py index 327fc21..bc4c614 100644 --- a/packages/jwebot-official-extensions/src/jwebot_official_extensions/__init__.py +++ b/packages/jwebot-official-extensions/src/jwebot_official_extensions/__init__.py @@ -90,4 +90,4 @@ __all__ = [ "render_feature_list", ] -__version__ = "2.0.4b1+1023" +__version__ = "2.0.5b1+1023" diff --git a/packages/jwebot-official-extensions/src/jwebot_official_extensions/player_games.py b/packages/jwebot-official-extensions/src/jwebot_official_extensions/player_games.py index a020b86..a6c776b 100644 --- a/packages/jwebot-official-extensions/src/jwebot_official_extensions/player_games.py +++ b/packages/jwebot-official-extensions/src/jwebot_official_extensions/player_games.py @@ -816,8 +816,12 @@ class PlayerGames: state = "进行中" if account.get("game") else "无进行中的牌局" loan = account.get("loan") loan_text = f"未还贷款 {loan['principal']};" if loan else "无贷款;" - total = account["wins"] + account["losses"] + account["ties"] - win_rate = (account["wins"] / total * 100) if total else 0.0 + blackjack_stats = account["blackjack_stats"] + total = int(blackjack_stats["hands"]) + wins = int(blackjack_stats["wins"]) + losses = int(blackjack_stats["losses"]) + ties = int(blackjack_stats["ties"]) + win_rate = (wins / total * 100) if total else 0.0 lines = [ ( f"{player_label}:{expired}当前摩拉 {account['balance']};" @@ -826,8 +830,8 @@ class PlayerGames: f"{loan_text}" ), ( - f"21点 {state};已结算胜 {account['wins']} / " - f"负 {account['losses']} / 平 {account['ties']}," + f"21点 {state};已结算胜 {wins} / " + f"负 {losses} / 平 {ties}," f"胜率 {win_rate:.2f}%。" ), "最近10次账户变动:", diff --git a/packages/jwebot-sdk/pyproject.toml b/packages/jwebot-sdk/pyproject.toml index 3c91add..9719e96 100644 --- a/packages/jwebot-sdk/pyproject.toml +++ b/packages/jwebot-sdk/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "jwebot-sdk" -version = "2.0.4b1+1023" +version = "2.0.5b1+1023" description = "Typed, capability-limited extension API for JWeBot plugins" requires-python = ">=3.9" dependencies = [] diff --git a/packages/jwebot-sdk/src/jwebot_sdk/__init__.py b/packages/jwebot-sdk/src/jwebot_sdk/__init__.py index 55976b0..b0a4dd7 100644 --- a/packages/jwebot-sdk/src/jwebot_sdk/__init__.py +++ b/packages/jwebot-sdk/src/jwebot_sdk/__init__.py @@ -40,4 +40,4 @@ __all__ = [ "SingleGroupContext", ] -__version__ = "2.0.4b1+1023" +__version__ = "2.0.5b1+1023" diff --git a/pyproject.toml b/pyproject.toml index 683dd43..822d69d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.jwebot] -release = "beta 2.0.4.1023" +release = "beta 2.0.5.1023" production_deployments_enabled_by_default = false [tool.jwebot.workspace] diff --git a/tests/test_jwebot_edge.py b/tests/test_jwebot_edge.py index f17436b..886dbfd 100644 --- a/tests/test_jwebot_edge.py +++ b/tests/test_jwebot_edge.py @@ -1291,9 +1291,9 @@ class LedgerAndApplicationTests(unittest.TestCase): self.assertEqual(version["route"], "local") self.assertIn("JWeBot 版本", version["text"]) self.assertIn("kernel", version["text"]) - self.assertIn("最新版本:beta 2.0.4.1023", version["text"]) - self.assertIn("更新时间:2026-10-23 16:56:33", version["text"]) - self.assertIn("更新摘要:许愿池和 21 点小版本更新完成", version["text"]) + self.assertIn("最新版本:beta 2.0.5.1023", version["text"]) + self.assertIn("更新时间:2026-10-23 17:16:12", version["text"]) + self.assertIn("更新摘要:21 点胜率显示修复完成", version["text"]) self.assertEqual(debug["route"], "local") self.assertIn("调试埋点", debug["text"]) self.assertEqual(balance["route"], "local") diff --git a/tests/test_release_063.py b/tests/test_release_063.py index d420a38..56568c0 100644 --- a/tests/test_release_063.py +++ b/tests/test_release_063.py @@ -193,6 +193,19 @@ class Release063GameTests(unittest.TestCase): "alice:胜 0 / 负 0 / 平 1,胜率 0.00%;净赚净亏 0 摩拉", rates, ) + account = self.state() + account["wins"] = 12 + account["losses"] = 15 + account["ties"] = 3 + self.engine.ledger._save_player_account( + "group-a", + person_key, + account, + MODULE.utc_now(), + ) + wallet = self.command("/摩拉") + self.assertIn("21点 无进行中的牌局;已结算胜 0 / 负 0 / 平 1", wallet) + self.assertNotIn("已结算胜 12 / 负 15 / 平 3", wallet) self.assertIn("1~2000", self.command("/21点开始2001")) def test_multiplayer_blackjack_table_guides_turns_and_settles(self): diff --git a/tests/test_release_update.py b/tests/test_release_update.py index 86feadd..2a21c85 100644 --- a/tests/test_release_update.py +++ b/tests/test_release_update.py @@ -20,7 +20,7 @@ SPEC.loader.exec_module(MODULE) class ReleaseUpdateTests(unittest.TestCase): - release = "beta 2.0.4.1023" + release = "beta 2.0.5.1023" major_release = "beta 2.0.0.1021" def setUp(self):