|
|
@@ -15,6 +15,9 @@ import pytest
|
|
|
("禁言", ("/mute", ["mute"])),
|
|
|
("解除禁言", ("/unmute", ["unmute"])),
|
|
|
("警告", ("/warn", ["warn"])),
|
|
|
+ ("删除消息", ("/del", ["del"])),
|
|
|
+ ("删除", ("/del", ["del"])),
|
|
|
+ ("删", ("/del", ["del"])),
|
|
|
("禁言10分钟", ("/tmute 10m", ["tmute", "10m"])),
|
|
|
(" 禁言1分钟 ", ("/tmute 1m", ["tmute", "1m"])),
|
|
|
("禁言1分钟", ("/tmute 1m", ["tmute", "1m"])),
|
|
|
@@ -65,7 +68,14 @@ async def test_member_action_shortcut_executes_temporary_mute(
|
|
|
monkeypatch.setattr(admin, "list_admins", AsyncMock(return_value=[]))
|
|
|
|
|
|
restrict_member = AsyncMock()
|
|
|
- target_reply = AsyncMock()
|
|
|
+ response = SimpleNamespace(chat=SimpleNamespace(id=chat_id), id=30)
|
|
|
+ target_reply = AsyncMock(return_value=response)
|
|
|
+ scheduled = []
|
|
|
+ monkeypatch.setattr(
|
|
|
+ admin,
|
|
|
+ "schedule_group_cleanup",
|
|
|
+ lambda *messages, **kwargs: scheduled.append((messages, kwargs)),
|
|
|
+ )
|
|
|
replied_message = SimpleNamespace(
|
|
|
from_user=SimpleNamespace(id=target_id),
|
|
|
sender_chat=None,
|
|
|
@@ -91,3 +101,61 @@ 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 scheduled == [
|
|
|
+ ((message, replied_message, response), {"delay_seconds": 10})
|
|
|
+ ]
|
|
|
+
|
|
|
+
|
|
|
+@pytest.mark.asyncio
|
|
|
+async def test_delete_message_shortcut_waits_before_cleanup(
|
|
|
+ app_modules, monkeypatch
|
|
|
+):
|
|
|
+ admin = app_modules.load("wbb.modules.admin")
|
|
|
+ chat_id = -100123
|
|
|
+ actor_id = 10
|
|
|
+ privileges = SimpleNamespace(
|
|
|
+ can_post_messages=False,
|
|
|
+ can_edit_messages=False,
|
|
|
+ can_delete_messages=True,
|
|
|
+ can_restrict_members=True,
|
|
|
+ can_promote_members=False,
|
|
|
+ can_change_info=False,
|
|
|
+ can_invite_users=False,
|
|
|
+ can_pin_messages=False,
|
|
|
+ can_manage_video_chats=False,
|
|
|
+ )
|
|
|
+ app_modules.app.members[(chat_id, actor_id)] = SimpleNamespace(
|
|
|
+ privileges=privileges
|
|
|
+ )
|
|
|
+ response = SimpleNamespace(chat=SimpleNamespace(id=chat_id), id=31)
|
|
|
+ target_reply = AsyncMock(return_value=response)
|
|
|
+ replied_message = SimpleNamespace(
|
|
|
+ from_user=SimpleNamespace(id=20),
|
|
|
+ sender_chat=None,
|
|
|
+ reply_text=target_reply,
|
|
|
+ )
|
|
|
+ message = SimpleNamespace(
|
|
|
+ text="删除消息",
|
|
|
+ command=None,
|
|
|
+ chat=SimpleNamespace(id=chat_id),
|
|
|
+ from_user=SimpleNamespace(id=actor_id, mention="@admin"),
|
|
|
+ sender_chat=None,
|
|
|
+ reply_to_message=replied_message,
|
|
|
+ reply_text=AsyncMock(return_value=response),
|
|
|
+ )
|
|
|
+ scheduled = []
|
|
|
+ monkeypatch.setattr(
|
|
|
+ admin,
|
|
|
+ "schedule_group_cleanup",
|
|
|
+ lambda *messages, **kwargs: scheduled.append((messages, kwargs)),
|
|
|
+ )
|
|
|
+
|
|
|
+ await admin.member_action_shortcut(None, message)
|
|
|
+
|
|
|
+ message.reply_text.assert_awaited_once()
|
|
|
+ assert "10 秒后自动删除" in message.reply_text.await_args.args[0]
|
|
|
+ target_reply.assert_not_awaited()
|
|
|
+ assert scheduled == [
|
|
|
+ ((message, replied_message, response), {"delay_seconds": 10})
|
|
|
+ ]
|