@ -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,8 @@ def create_admin_commands():
dest = " modify " ,
) ,
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 ,
)
@ -93,6 +96,8 @@ def create_admin_commands():
msg = msg . text ( " konaph info <id> - 查看谜题 \n " )
msg = msg . text ( " konaph my <page?> - 查看我的谜题列表 \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 ) :
msg = msg . text ( " konaph all [--ready] <page?> - 查看所有谜题 \n " )
@ -196,7 +201,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 +232,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 +289,7 @@ def create_admin_commands():
" 支持的参数: \n "
" --title <str> 标题 \n "
" --description <str> 题目详情描述(用直引号包裹以支持多行) \n "
" --flag <str> flag \n "
" --flag <str> flag,也就是题目的答案 \n "
" --image <图片> 图片 \n "
" --remove-image 删除图片 "
)
@ -326,4 +331,31 @@ 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 ( ) )
@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