From 56e0aabbf32d74d0c213a13e8e88873b37c2b19d Mon Sep 17 00:00:00 2001 From: passthem Date: Mon, 27 Oct 2025 15:20:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20UX=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20preview=20=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- konabot/plugins/kona_ph/manager.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/konabot/plugins/kona_ph/manager.py b/konabot/plugins/kona_ph/manager.py index a6ba642..44c2fd6 100644 --- a/konabot/plugins/kona_ph/manager.py +++ b/konabot/plugins/kona_ph/manager.py @@ -8,6 +8,7 @@ from pydantic import BaseModel from konabot.common.longtask import DepLongTaskTarget from konabot.common.nb.extract_image import download_image_bytes from konabot.common.nb.qq_broadcast import qq_broadcast +from konabot.common.username import get_username from konabot.plugins.kona_ph.core.storage import Puzzle, PuzzleManager, get_today_date, puzzle_manager PUZZLE_PAGE_SIZE = 10 @@ -41,11 +42,11 @@ def get_puzzle_info_message(manager: PuzzleManager, puzzle: Puzzle) -> UniMessag msg = UniMessage.text( f"--- 谜题信息 ---\n" f"Raw ID: {puzzle.raw_id}\n" - f"标题: {puzzle.title}\n" - f"出题者 ID: {puzzle.author_id}\n" + f"出题者: {get_username(puzzle.author_id)} | {puzzle.author_id}\n" f"创建时间: {puzzle.created_at.strftime('%Y-%m-%d %H:%M:%S')}\n" - f"Flag: {puzzle.flag}\n" f"状态: {status}{status_suffix}\n\n" + f"标题: {puzzle.title}\n" + f"Flag: {puzzle.flag}\n\n" f"{puzzle.content}" ) @@ -80,6 +81,7 @@ def create_admin_commands(): dest="modify", ), Subcommand("publish", Args["raw_id?", str], dest="publish"), + Subcommand("preview", Args["raw_id", str], dest="preview"), ), rule=is_puzzle_manager, ) @@ -93,6 +95,7 @@ def create_admin_commands(): msg = msg.text("konaph info - 查看谜题\n") msg = msg.text("konaph my - 查看我的谜题列表\n") msg = msg.text("konaph modify - 查看如何修改谜题信息\n") + msg = msg.text("konaph preview - 预览一个题目的效果,不会展示答案\n") if is_puzzle_admin(target): msg = msg.text("konaph all [--ready] - 查看所有谜题\n") @@ -196,7 +199,7 @@ def create_admin_commands(): if manager.puzzle_pinned == p.raw_id: message = message.text("[📌]") if manager.is_puzzle_published(p.raw_id): - message = message.text(f"[#{p.index_id}] ") + message = message.text(f"[✨][#{p.index_id}] ") elif p.ready: message = message.text("[✅] ") else: @@ -227,7 +230,7 @@ def create_admin_commands(): if p.raw_id == manager.puzzle_pinned: message = message.text("[📌]") if manager.is_puzzle_published(p.raw_id): - message = message.text(f"[#{p.index_id}] ") + message = message.text(f"[✨][#{p.index_id}] ") elif p.ready: message = message.text("[✅] ") else: @@ -284,7 +287,7 @@ def create_admin_commands(): "支持的参数:\n" " --title 标题\n" " --description 题目详情描述(用直引号包裹以支持多行)\n" - " --flag flag\n" + " --flag flag,也就是题目的答案\n" " --image <图片> 图片\n" " --remove-image 删除图片" ) @@ -326,4 +329,14 @@ def create_admin_commands(): await qq_broadcast(config.plugin_puzzle_playgroup, p.get_unimessage()) return await target.send_message("Ok!") + @cmd_admin.assign("preview") + async def _(target: DepLongTaskTarget, raw_id: str): + async with puzzle_manager() as manager: + puzzle = manager.puzzle_data.get(raw_id) + if puzzle is None: + return await target.send_message("没有这个谜题") + if not is_puzzle_admin(target) and target.target_id != puzzle.author_id: + return await target.send_message("你没有权限预览这个谜题") + return await target.send_message(puzzle.get_unimessage()) + return cmd_admin