ソースを参照

fix: refine group shortcut cleanup

AI-Co-Authored-By: Codex
chendeben 1 週間 前
親
コミット
5c0e472111

+ 2 - 2
tests/test_admin_shortcuts.py

@@ -101,7 +101,7 @@ async def test_member_action_shortcut_executes_temporary_mute(
     assert message.text == "  禁言1分钟\u200b  "
     assert message.command is None
     assert "禁言时长:** 1m" in target_reply.await_args.args[0]
-    assert "10 秒后自动删除" in target_reply.await_args.args[0]
+    assert "自动删除" not in target_reply.await_args.args[0]
     assert scheduled == [
         ((message, replied_message, response), {"delay_seconds": 10})
     ]
@@ -154,7 +154,7 @@ async def test_delete_message_shortcut_waits_before_cleanup(
     await admin.member_action_shortcut(None, message)
 
     message.reply_text.assert_awaited_once()
-    assert "10 秒后自动删除" in message.reply_text.await_args.args[0]
+    assert "自动删除" not in message.reply_text.await_args.args[0]
     target_reply.assert_not_awaited()
     assert scheduled == [
         ((message, replied_message, response), {"delay_seconds": 10})

+ 27 - 0
tests/test_points_commands.py

@@ -37,6 +37,7 @@ def _checkin_message() -> SimpleNamespace:
             first_name="顾客",
             last_name=None,
         ),
+        reply_to_message=None,
         reply_text=AsyncMock(return_value=response),
     )
 
@@ -120,3 +121,29 @@ async def test_checkin_error_schedules_user_and_bot_messages_for_cleanup(
         == points_module.ParseMode.DISABLED
     )
     assert cleanup == [message, response]
+
+
+async def test_balance_schedules_user_and_bot_messages_for_cleanup(
+    points_module, monkeypatch
+):
+    message = _checkin_message()
+    cleanup = []
+    monkeypatch.setattr(
+        points_module,
+        "get_point_account",
+        AsyncMock(return_value={"balance": 25}),
+    )
+    monkeypatch.setattr(
+        points_module,
+        "schedule_group_cleanup",
+        lambda *messages: cleanup.extend(messages),
+    )
+
+    response = await points_module.points_balance_command(None, message)
+
+    assert "<b>25</b> 积分" in message.reply_text.await_args.args[0]
+    assert (
+        message.reply_text.await_args.kwargs["parse_mode"]
+        == points_module.ParseMode.HTML
+    )
+    assert cleanup == [message, response]

+ 1 - 8
wbb/modules/admin.py

@@ -86,9 +86,6 @@ __HELP__ = """/ban - 封禁成员。
 可快捷执行对应管理操作。"""
 
 MEMBER_ACTION_CLEANUP_SECONDS = 10
-MEMBER_ACTION_CLEANUP_NOTICE = (
-    "\n\n⏳ 本提示、快捷指令及被回复消息将在 10 秒后自动删除。"
-)
 
 
 async def member_permissions(chat_id: int, user_id: int):
@@ -673,11 +670,7 @@ async def member_action_shortcut(client, message: Message):
 
     def cleanup_reply(original_reply):
         async def wrapped_reply(text, *args, **kwargs):
-            response = await original_reply(
-                f"{text}{MEMBER_ACTION_CLEANUP_NOTICE}",
-                *args,
-                **kwargs,
-            )
+            response = await original_reply(text, *args, **kwargs)
             schedule_group_cleanup(
                 message,
                 replied_message,

+ 9 - 3
wbb/modules/points.py

@@ -102,6 +102,12 @@ async def _reply_checkin(message: Message, text: str) -> Message:
     return response
 
 
+async def _reply_balance(message: Message, text: str) -> Message:
+    response = await message.reply_text(text, parse_mode=ParseMode.HTML)
+    schedule_group_cleanup(message, response)
+    return response
+
+
 def _checkin_message(
     template: str,
     *,
@@ -149,12 +155,12 @@ def _adjustment_parts(message: Message) -> tuple[str | None, str | None, str]:
 async def points_balance_command(_, message: Message):
     target = await _resolve_target(message)
     if not target:
-        return await message.reply_text("未找到该成员。")
+        return await _reply_balance(message, "未找到该成员。")
     account = await get_point_account(message.chat.id, target.id)
-    return await message.reply_text(
+    return await _reply_balance(
+        message,
         f"{_mention(target.id, target.first_name)} 当前有 "
         f"<b>{int(account['balance'])}</b> 积分。",
-        parse_mode=ParseMode.HTML,
     )