forked from mttu-developers/konabot
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 37179fc4d7 | |||
| 56e0aabbf3 |
@ -83,13 +83,13 @@ async def _(target: DepLongTaskTarget):
|
|||||||
uname = get_username(int(u), gid)
|
uname = get_username(int(u), gid)
|
||||||
t = d.strftime("%H:%M")
|
t = d.strftime("%H:%M")
|
||||||
tries = len(manager.submissions[p.raw_id][u])
|
tries = len(manager.submissions[p.raw_id][u])
|
||||||
msg = msg.text(f"\n- {uname} [Solved at {t} in {tries} times]")
|
msg = msg.text(f"\n- {uname} [🎉 {t} 完成 | {tries} 提交]")
|
||||||
for u in info.tried_users - set(info.success_users.keys()):
|
for u in info.tried_users - set(info.success_users.keys()):
|
||||||
uname = u
|
uname = u
|
||||||
if re.match(r"^\d+$", u):
|
if re.match(r"^\d+$", u):
|
||||||
uname = get_username(int(u), gid)
|
uname = get_username(int(u), gid)
|
||||||
tries = len(manager.submissions[p.raw_id][u])
|
tries = len(manager.submissions[p.raw_id][u])
|
||||||
msg = msg.text(f"\n- {uname} [Unsolved in {tries} times]")
|
msg = msg.text(f"\n- {uname} [💦 {tries} 提交]")
|
||||||
|
|
||||||
await target.send_message(msg)
|
await target.send_message(msg)
|
||||||
|
|
||||||
|
|||||||
@ -8,6 +8,7 @@ from pydantic import BaseModel
|
|||||||
from konabot.common.longtask import DepLongTaskTarget
|
from konabot.common.longtask import DepLongTaskTarget
|
||||||
from konabot.common.nb.extract_image import download_image_bytes
|
from konabot.common.nb.extract_image import download_image_bytes
|
||||||
from konabot.common.nb.qq_broadcast import qq_broadcast
|
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
|
from konabot.plugins.kona_ph.core.storage import Puzzle, PuzzleManager, get_today_date, puzzle_manager
|
||||||
|
|
||||||
PUZZLE_PAGE_SIZE = 10
|
PUZZLE_PAGE_SIZE = 10
|
||||||
@ -41,11 +42,11 @@ def get_puzzle_info_message(manager: PuzzleManager, puzzle: Puzzle) -> UniMessag
|
|||||||
msg = UniMessage.text(
|
msg = UniMessage.text(
|
||||||
f"--- 谜题信息 ---\n"
|
f"--- 谜题信息 ---\n"
|
||||||
f"Raw ID: {puzzle.raw_id}\n"
|
f"Raw ID: {puzzle.raw_id}\n"
|
||||||
f"标题: {puzzle.title}\n"
|
f"出题者: {get_username(puzzle.author_id)} | {puzzle.author_id}\n"
|
||||||
f"出题者 ID: {puzzle.author_id}\n"
|
|
||||||
f"创建时间: {puzzle.created_at.strftime('%Y-%m-%d %H:%M:%S')}\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"状态: {status}{status_suffix}\n\n"
|
||||||
|
f"标题: {puzzle.title}\n"
|
||||||
|
f"Flag: {puzzle.flag}\n\n"
|
||||||
f"{puzzle.content}"
|
f"{puzzle.content}"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -80,6 +81,8 @@ def create_admin_commands():
|
|||||||
dest="modify",
|
dest="modify",
|
||||||
),
|
),
|
||||||
Subcommand("publish", Args["raw_id?", str], dest="publish"),
|
Subcommand("publish", Args["raw_id?", str], dest="publish"),
|
||||||
|
Subcommand("preview", Args["raw_id", str], dest="preview"),
|
||||||
|
Subcommand("get-submits", Args["raw_id", str], dest="get-submits")
|
||||||
),
|
),
|
||||||
rule=is_puzzle_manager,
|
rule=is_puzzle_manager,
|
||||||
)
|
)
|
||||||
@ -93,6 +96,8 @@ def create_admin_commands():
|
|||||||
msg = msg.text("konaph info <id> - 查看谜题\n")
|
msg = msg.text("konaph info <id> - 查看谜题\n")
|
||||||
msg = msg.text("konaph my <page?> - 查看我的谜题列表\n")
|
msg = msg.text("konaph my <page?> - 查看我的谜题列表\n")
|
||||||
msg = msg.text("konaph modify - 查看如何修改谜题信息\n")
|
msg = msg.text("konaph modify - 查看如何修改谜题信息\n")
|
||||||
|
msg = msg.text("konaph preview <id> - 预览一个题目的效果,不会展示答案\n")
|
||||||
|
msg = msg.text("konaph get-submits <id> - 获得题目的提交记录\n")
|
||||||
|
|
||||||
if is_puzzle_admin(target):
|
if is_puzzle_admin(target):
|
||||||
msg = msg.text("konaph all [--ready] <page?> - 查看所有谜题\n")
|
msg = msg.text("konaph all [--ready] <page?> - 查看所有谜题\n")
|
||||||
@ -196,7 +201,7 @@ def create_admin_commands():
|
|||||||
if manager.puzzle_pinned == p.raw_id:
|
if manager.puzzle_pinned == p.raw_id:
|
||||||
message = message.text("[📌]")
|
message = message.text("[📌]")
|
||||||
if manager.is_puzzle_published(p.raw_id):
|
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:
|
elif p.ready:
|
||||||
message = message.text("[✅] ")
|
message = message.text("[✅] ")
|
||||||
else:
|
else:
|
||||||
@ -227,7 +232,7 @@ def create_admin_commands():
|
|||||||
if p.raw_id == manager.puzzle_pinned:
|
if p.raw_id == manager.puzzle_pinned:
|
||||||
message = message.text("[📌]")
|
message = message.text("[📌]")
|
||||||
if manager.is_puzzle_published(p.raw_id):
|
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:
|
elif p.ready:
|
||||||
message = message.text("[✅] ")
|
message = message.text("[✅] ")
|
||||||
else:
|
else:
|
||||||
@ -284,7 +289,7 @@ def create_admin_commands():
|
|||||||
"支持的参数:\n"
|
"支持的参数:\n"
|
||||||
" --title <str> 标题\n"
|
" --title <str> 标题\n"
|
||||||
" --description <str> 题目详情描述(用直引号包裹以支持多行)\n"
|
" --description <str> 题目详情描述(用直引号包裹以支持多行)\n"
|
||||||
" --flag <str> flag\n"
|
" --flag <str> flag,也就是题目的答案\n"
|
||||||
" --image <图片> 图片\n"
|
" --image <图片> 图片\n"
|
||||||
" --remove-image 删除图片"
|
" --remove-image 删除图片"
|
||||||
)
|
)
|
||||||
@ -326,4 +331,31 @@ def create_admin_commands():
|
|||||||
await qq_broadcast(config.plugin_puzzle_playgroup, p.get_unimessage())
|
await qq_broadcast(config.plugin_puzzle_playgroup, p.get_unimessage())
|
||||||
return await target.send_message("Ok!")
|
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())
|
||||||
|
|
||||||
|
@cmd_admin.assign("get-submits")
|
||||||
|
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("你没有权限预览这个谜题")
|
||||||
|
|
||||||
|
msg = UniMessage.text(f"==== {puzzle.title} 提交记录 ====\n\n")
|
||||||
|
submits = manager.submissions.get(raw_id, {})
|
||||||
|
for uid, ls in submits.items():
|
||||||
|
s = ', '.join((i.flag for i in ls))
|
||||||
|
msg = msg.text(f"- {get_username(uid)}:{s}\n")
|
||||||
|
return await target.send_message(msg)
|
||||||
|
|
||||||
|
|
||||||
return cmd_admin
|
return cmd_admin
|
||||||
|
|||||||
Reference in New Issue
Block a user