Skip to content

Commit bba565e

Browse files
committed
refactor(telegram): simplify status quota copy
1 parent 8f15332 commit bba565e

3 files changed

Lines changed: 44 additions & 14 deletions

File tree

src/nonebot_plugin_codex/service.py

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,28 @@ def _format_status_reset_time(self, value: object) -> str:
831831
parsed = datetime.fromtimestamp(value, tz=timezone.utc)
832832
except (OverflowError, OSError, ValueError):
833833
return "未知"
834-
return parsed.astimezone().strftime("%Y-%m-%d %H:%M:%S")
834+
return parsed.astimezone().strftime("%m-%d %H:%M:%S")
835+
836+
def _format_status_bucket_label(self, bucket: object, fallback: str) -> str:
837+
if not isinstance(bucket, dict):
838+
return fallback
839+
window_minutes = bucket.get("windowDurationMins")
840+
if window_minutes == 300:
841+
return "5小时"
842+
if window_minutes == 10080:
843+
return "1周"
844+
if isinstance(window_minutes, int) and window_minutes > 0:
845+
if window_minutes % (60 * 24 * 7) == 0:
846+
weeks = window_minutes // (60 * 24 * 7)
847+
return f"{weeks}周"
848+
if window_minutes % (60 * 24) == 0:
849+
days = window_minutes // (60 * 24)
850+
return f"{days}天"
851+
if window_minutes % 60 == 0:
852+
hours = window_minutes // 60
853+
return f"{hours}小时"
854+
return f"{window_minutes}分钟"
855+
return fallback
835856

836857
def _is_noise_history_text(self, text: str) -> bool:
837858
lowered = text.strip().lower()
@@ -2132,9 +2153,10 @@ def _format_status_context_line(self, session: ChatSession | None) -> str:
21322153

21332154
def _format_status_rate_limit_bucket(
21342155
self,
2135-
label: str,
21362156
bucket: object,
2157+
fallback_label: str,
21372158
) -> list[str]:
2159+
label = self._format_status_bucket_label(bucket, fallback_label)
21382160
if not isinstance(bucket, dict):
21392161
return [f"{label}:暂不可用", f"{label} 刷新时间:未知"]
21402162

@@ -2145,8 +2167,8 @@ def _format_status_rate_limit_bucket(
21452167
used_percent = max(0, min(used_percent, 100))
21462168
remaining_percent = max(0, 100 - used_percent)
21472169
return [
2148-
f"{label}{used_percent}% 已用,{remaining_percent}% 剩余",
2149-
f"{label} 刷新时间:{self._format_status_reset_time(bucket.get('resetsAt'))}",
2170+
f"{label}剩余 {remaining_percent}%",
2171+
f"{label}刷新时间:{self._format_status_reset_time(bucket.get('resetsAt'))}",
21502172
]
21512173

21522174
async def render_status_panel(
@@ -2164,10 +2186,16 @@ async def render_status_panel(
21642186
raise RuntimeError("当前环境未启用 Codex app-server 额度查询。")
21652187
limits = await runner.read_rate_limits()
21662188
lines.extend(
2167-
self._format_status_rate_limit_bucket("额度 1", limits.get("primary"))
2189+
self._format_status_rate_limit_bucket(
2190+
limits.get("primary"),
2191+
"额度 1",
2192+
)
21682193
)
21692194
lines.extend(
2170-
self._format_status_rate_limit_bucket("额度 2", limits.get("secondary"))
2195+
self._format_status_rate_limit_bucket(
2196+
limits.get("secondary"),
2197+
"额度 2",
2198+
)
21712199
)
21722200
except Exception as exc:
21732201
lines.extend(["额度状态:暂不可用", str(exc) or "未知错误。"])

tests/test_service.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -258,15 +258,17 @@ async def test_render_status_panel_shows_rate_limit_summary(
258258

259259
panel = service.open_status_panel("private_1")
260260
text, markup = await service.render_status_panel("private_1")
261+
primary_reset_text = service._format_status_reset_time(primary_resets_at) # noqa: SLF001
262+
secondary_reset_text = service._format_status_reset_time(secondary_resets_at) # noqa: SLF001
261263

262264
assert "当前额度状态" in text
263265
assert "上午窗口" not in text
264266
assert "下午窗口" not in text
265267
assert "上下文:12,345 / 200,000 tokens" in text
266-
assert "额度 1:48% 已用,52% 剩余" in text
267-
assert "额度 1 刷新时间:" in text
268-
assert "额度 2:38% 已用,62% 剩余" in text
269-
assert "额度 2 刷新时间:" in text
268+
assert "5小时:剩余 52%" in text
269+
assert f"5小时刷新时间:{primary_reset_text}" in text
270+
assert "1周:剩余 62%" in text
271+
assert f"1周刷新时间:{secondary_reset_text}" in text
270272
assert markup.inline_keyboard[0][0].text == "刷新"
271273
assert markup.inline_keyboard[0][0].callback_data == (
272274
f"cst:{panel.token}:{panel.version}:refresh"

tests/test_telegram_handlers.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,10 @@ def __init__(self) -> None:
153153
self.status_text = (
154154
"当前额度状态\n"
155155
"上下文:12,345 / 200,000 tokens\n"
156-
"额度 1:48% 已用,52% 剩余\n"
157-
"额度 1 刷新时间:2026-03-18 01:24:28\n"
158-
"额度 2:38% 已用,62% 剩余\n"
159-
"额度 2 刷新时间:2026-03-24 13:04:30"
156+
"5小时:剩余 52%\n"
157+
"5小时刷新时间:03-18 01:24:28\n"
158+
"1周:剩余 62%\n"
159+
"1周刷新时间:03-24 13:04:30"
160160
)
161161
self.status_markup = SimpleNamespace(name="status")
162162
self.default_mode = "resume"

0 commit comments

Comments
 (0)