TuringTalk 接口完整文档
服务地址:
https://game.xfcode.top(WebSocket 对应wss://game.xfcode.top/...) 消息格式:WebSocket 均为 JSON;HTTP 按 REST 风格。 更新日期:2026-10-06
一、WebSocket 接口
1.1 连接地址
服务端在 onOpen 时按连接的路径把连接分派给对应模式的 Handler;在 onMessage 时按消息 type 的前缀匹配路由(空前缀为兜底)。
| 模式 | WS 路径 | 消息前缀 | 说明 |
|---|---|---|---|
| 经典 1v1(图灵测试) | /ws | 空(兜底) | 匹配、聊天、判定 |
| 公共聊天室 | /ws/lobby | lobby_ | 聊天、表情、图片、点歌、投票、管理 |
| 五子棋 | /ws/board/gomoku | board_gomoku_ | 对弈 |
| 围棋 | /ws/board/go | board_go_ | 对弈 |
| 海龟汤(真人房) | /ws/soup | soup_ | 多人推理房 |
| 缘分(默契测试) | /ws/fate | fate. | 双人默契答题 |
| 方块世界(2D 沙盒) | /ws/blockworld | bw_ | 多人建造 |
| 临时聊天 | /ws/tempchat | temp_ | 1v1 私密房 |
| BOT 网关 | /bot | —(独立分派) | 开放给第三方 BOT 客户端 |
| 管理后台 | /{Admin.Path}/ws(默认 /admin/ws) | admin_ | 管理员专属 |
说明:
- 海龟汤、缘分受配置开关控制(
Soup.Enabled/Fate.Enabled,默认true);关闭时对应 WS 路径不会注册。- 方块世界当前暂停开放:
BlockWorld.Enabled配置为false,此时/ws/blockworld通道不注册、GET /blockworld返回 503 维护页、首页入口隐藏;世界数据保留,把配置改回true即可恢复。- 管理后台路径由
Admin.Path配置(默认admin),其 WS 地址为/{Admin.Path}/ws。- 未匹配到路径的连接会兜底路由到
/ws。连接过载时服务端会下发{"type":"error","message":"服务器繁忙,请稍后再试"}并立即关闭。
通用消息格式(发送/接收均为 JSON):
{ "type": "消息类型", ...参数 }心跳:除 BOT 网关(bot_ping/bot_pong)与临时聊天(temp_ping/temp_pong)外,其余模式统一使用 ping(C→S)与 pong(S→C)。
1.2 经典 1v1(/ws,空前缀)
| type | 方向 | 参数 | 说明 |
|---|---|---|---|
join | C→S | nickname, duration(300/600), fingerprint, reconnect_session_id? | 加入匹配队列 / 重连恢复会话 |
leave | C→S | — | 主动离开对局 |
message | C→S | text | 发送聊天消息(对手侧转发 sender 为「对方」) |
sticker | C→S | id | 发送表情(仅传表情 ID) |
judge | C→S | guess(ai/human), tag? | 做出判定 |
report | C→S | reason | 举报对手 |
save_history | C→S | session_id, ... | 保存对局记录 |
leave_message | C→S | text | 给对方留言 |
update_nickname | C→S | nickname, fp, player_token? | 修改昵称 |
change_password | C→S | old_password, new_password | 修改密码 |
set_password | C→S | new_password, player_token? | 设置密码 |
share_record | C→S | — | 分享战绩到聊天室 |
get_stickers | C→S | — | 获取可用表情列表 |
ping | C→S | — | 心跳 |
admin_ban / admin_verify | C→S(admin) | — | 管理员操作 |
matched | S→C | opponent_name, duration, session_id, player_id, token | 匹配成功 / 重连恢复 |
message | S→C | text, sender, side | 对手消息(旁观者含 side) |
system | S→C | text | 系统提示 |
judge_notify | S→C | judger_name, timeout | 对方已判定 |
judged | S→C | ... | 判定结果 |
timeout | S→C | reason, opponent_truth, session_id, opponent_name | 超时/异常结束 |
sticker | S→C | id, name | 对手表情(不含 URL) |
spectate_message | S→C | text, sender, side | 旁观者聊天流 |
spectate_sticker | S→C | id, name | 旁观者表情流 |
spectate_system | S→C | text | 旁观者系统提示 |
spectate_ended | S→C | ... | 旁观结束 |
report_result | S→C | success, message | 举报结果 |
save_history_status | S→C | ok, message | 保存记录结果 |
leave_message_status | S→C | ok, message | 留言结果 |
update_nickname_result | S→C | success, nickname, error | 改昵称结果 |
change_password_result | S→C | success, message | 改密码结果 |
set_password_result | S→C | success, message | 设密码结果 |
share_record_status | S→C | ok, message | 分享结果 |
record | S→C | ... | 战绩数据 |
banned | S→C | reason | 已被封禁 |
admin_config | S→C | ... | 管理员配置下发 |
pong | S→C | — | 心跳响应 |
online_count | S→C | count | 在线人数(按 IP 去重) |
1.3 公共聊天室(/ws/lobby,前缀 lobby_)
客户端 → 服务端
| type | 参数 | 说明 |
|---|---|---|
lobby_join | nickname, password?, player_token?, bot_player_id? | 加入聊天室(BOT 网关直绑身份时用 bot_player_id) |
lobby_chat | content, reply_to_id?, reply_to_name?, reply_to_text? | 发送消息(含特殊语法时解析为结构化 blocks) |
lobby_sticker | id | 发送表情 |
lobby_image | key(32位一次性凭据), client_id? | 发送图片(先用一次性 key 换出图床 URL) |
lobby_revoke | message_id | 撤回本人消息(限 3 分钟内) |
lobby_report | message_id, reason? | 举报消息 |
lobby_nudge | target_fd, target_nickname | 拍一拍 |
lobby_card_share | — | 分享战绩卡片 |
lobby_set_fp | fingerprint | 上报浏览器指纹 |
lobby_song_search | keyword | 搜索歌曲(传入分享链接/纯 ID 时直接点歌) |
lobby_song_request | song_id, nickname | 点歌 |
lobby_song_vote | song_id | 投票晋升 |
lobby_song_remove_vote | song_id | 投移除票 |
lobby_song_admin_remove | song_id | 管理员移除歌曲 |
lobby_song_import | ... | 导入歌单 |
lobby_song_rcmd | — | 获取推荐 |
lobby_song_list | — | 请求歌单 |
lobby_song_current | — | 请求当前播放 |
lobby_song_finished | — | 本地播完通知(加速切歌) |
lobby_btn_click | key, userName, rule | 按钮点击次数限制校验 |
lobby_poll_vote | message_id, vote_id, options[] | MD 投票(实时,不写历史) |
lobby_admin_verify | token | 管理员身份验证 |
lobby_mute | target_fd, minutes | 禁言(管理员) |
lobby_unmute | target_fd | 解除禁言(管理员) |
lobby_ban | target_fd, reason | 封禁(管理员) |
lobby_kick | target_fd | 踢出(管理员) |
lobby_isolate | target_fd, minutes | 孤立(管理员,消息不广播) |
lobby_unisolate | target_fd | 解除孤立(管理员) |
lobby_delete | message_id | 管理员删除消息 |
get_stickers | — | 获取表情列表 |
ping | — | 心跳 |
服务端 → 客户端
| type | 参数 | 说明 |
|---|---|---|
lobby_joined | nickname, player_id, token, sender_titles, sender_special_titles | 加入成功快照 |
lobby_history | messages[] | 最近 100 条历史 |
lobby_online_count | players[] | 在线列表 |
lobby_chat | id, sender_name, sender_id, content, msg_type, is_bot, sender_titles, sender_special_titles, reply_to, mentions, time, created_at | 消息广播(详见第 04 篇) |
sticker | id, sticker_id, sticker_name, sticker_url, sender_name, sender_id, is_bot, time, created_at | 表情广播 |
image | content(图片URL), sender_name, sender_id, sender_titles, sender_special_titles, time, created_at, client_id? | 图片广播 |
lobby_system | text | 系统提示 |
lobby_error | text | 错误提示 |
lobby_revoke | message_id, sender_name | 消息被撤回 |
lobby_message_deleted | message_id | 消息被删除 |
lobby_report_ok | message | 举报成功 |
lobby_mentioned | message_id, sender_name, content | 被 @ 提醒 |
lobby_nudged | sender_name | 被拍一拍 |
lobby_btn_click_result | key, allowed, remaining | 按钮点击结果 |
lobby_poll_update | vote_key, counts | 投票票数更新 |
lobby_admin_verified | is_admin, username, role | 管理员验证结果 |
lobby_kicked | ... | 被踢出 |
lobby_song_search_result | keyword, songs[], direct_requested?, song?, error? | 搜索结果 |
lobby_song_requested | song | 点歌成功 |
lobby_vote_update / lobby_remove_vote_update | song_id, votes | 投票更新 |
lobby_song_list / list_update | playlist[], pool[], playing? | 歌单同步/更新 |
lobby_song_current | song | 当前播放 |
lobby_song_import_result / lobby_song_import_progress / lobby_song_rcmd_result | ... | 导入结果/进度、推荐结果 |
pong | — | 心跳响应 |
1.4 五子棋(/ws/board/gomoku,前缀 board_gomoku_)
棋类由公共基类 AbstractBoardGameHandler 统一处理,客户端发送的 type 需带前缀(如 board_gomoku_join);服务端下发的 type 同样带前缀。
客户端 → 服务端(公共动作)
| type | 参数 | 说明 |
|---|---|---|
board_gomoku_join | fp, nickname, password?, player_token? | 声明身份(进入棋局前必须先发) |
board_gomoku_create_room | boardSize, firstMove(host/guest), mode?, timeLimit? | 创建房间(firstMove 决定房主执黑/白;其余字段原样存入对局 settings) |
board_gomoku_join_room | roomId | 加入指定房间(座位已满则成为观战者) |
board_gomoku_cancel_wait | — | 取消等待 |
board_gomoku_surrender | — | 认输 |
board_gomoku_timeout | — | 超时结算 |
board_gomoku_request_rematch | — | 请求再来一局 |
board_gomoku_chat_message | msg | 房间聊天 |
board_gomoku_share_invite | — | 分享邀请到聊天室 |
board_gomoku_open_lobby_chat / board_gomoku_close_lobby_chat | — | 打开/关闭聊天室浮层 |
board_gomoku_place_piece | r, c | 落子(五子棋专属,0-based 行列) |
get_stickers / ping | — | 通用(无前缀) |
服务端 → 客户端
| type | 说明 |
|---|---|
board_gomoku_connected | 连接就绪 |
board_gomoku_joined | 加入成功 |
board_gomoku_room_created | 房间创建成功 |
board_gomoku_lobby_chat_result | 聊天室浮层操作结果 |
board_gomoku_invite_result | 分享邀请结果 |
board_gomoku_error | 错误提示 |
board_gomoku_spectate_start | 开始观战 |
board_gomoku_game_start | 对局开始 |
board_gomoku_game_over | 对局结束 |
board_gomoku_opponent_disconnected | 对手断开 |
board_gomoku_chat_message | 房间聊天广播 |
board_gomoku_piece_placed | 落子广播(五子棋专属) |
棋盘类下发消息普遍把负载放在
data字段内,例如:{"type":"board_gomoku_piece_placed","data":{"r":7,"c":7,"color":1,"nextTurn":2}}、{"type":"board_gomoku_room_created","data":{"roomId":"A1B2C","color":1,"player_id":"..."}}。
1.5 围棋(/ws/board/go,前缀 board_go_)
公共动作与五子棋一致(board_go_join、board_go_create_room、board_go_join_room、board_go_cancel_wait、board_go_surrender、board_go_timeout、board_go_request_rematch、board_go_chat_message、board_go_share_invite、board_go_open_lobby_chat、board_go_close_lobby_chat),并额外支持:
客户端 → 服务端(围棋专属)
| type | 参数 | 说明 |
|---|---|---|
board_go_place_stone | r, c | 落子 |
board_go_pass | — | 虚手 |
board_go_request_resume | — | 请求续弈 |
服务端 → 客户端(围棋专属)
| type | 说明 |
|---|---|
board_go_stone_placed | 落子广播 |
board_go_passed | 虚手广播 |
board_go_move_rejected | 落子被拒(含 reason) |
board_go_resume_requested | 收到续弈请求 |
board_go_resumed | 续弈成功 |
其余公共下发类型(
board_go_connected、board_go_joined、board_go_room_created、board_go_game_start、board_go_game_over等)与五子棋同名,仅前缀不同。
1.6 海龟汤(/ws/soup,前缀 soup_)
| type | 方向 | 说明 |
|---|---|---|
soup_lobby | C→S | 进入大厅/刷新房间列表 |
soup_create | C→S | 创建房间(选汤面) |
soup_join_room | C→S | 加入房间 |
soup_pick | C→S | 选汤面 |
soup_ready | C→S | 准备 |
soup_ask | C→S | 提问 |
soup_ai_suggest | C→S | 请求 AI 判定建议(出题人侧) |
soup_answer | C→S | 出题人作答(yes/no/unrelated/close/correct) |
soup_guess | C→S | 猜题 |
soup_giveup | C→S | 放弃 |
soup_hint | C→S | 请求提示 |
soup_next | C→S | 下一题 |
soup_leave | C→S | 离开房间 |
get_stickers / ping | C→S | 通用 |
soup_connected | S→C | 连接就绪 |
soup_room_list | S→C | 房间列表 |
soup_room_created | S→C | 房间创建成功 |
soup_room | S→C | 房间状态 |
soup_round | S→C | 回合信息 |
soup_joined | S→C | 加入成功 |
soup_question | S→C | 提问广播 |
soup_verdict | S→C | 作答结果 |
soup_guess_result | S→C | 猜题结果 |
soup_ai_suggested | S→C | AI 建议 |
soup_hint | S→C | 提示内容 |
soup_won | S→C | 猜中 |
soup_over | S→C | 本题结束 |
soup_system | S→C | 系统提示 |
soup_left | S→C | 已离开 |
soup_error | S→C | 错误提示 |
pong | S→C | 心跳响应 |
出题人的作答取值(VERDICTS):
yes/no/unrelated/close/correct。
1.7 缘分(默契测试)(/ws/fate,前缀 fate.)
| type | 方向 | 说明 |
|---|---|---|
fate.accept | C→S | 接受邀请 |
fate.decline | C→S | 拒绝邀请 |
fate.submit | C→S | 提交答案 |
fate.publish | C→S | 官宣到聊天室 |
fate.history | C→S | 查询历史 |
fate.connected | S→C | 连接就绪 |
fate.accepted | S→C | 邀请已接受 |
fate.invite | S→C | 收到邀请 |
fate.declined | S→C | 邀请被拒绝 |
fate.submitted | S→C | 答案已提交 |
fate.opponent_done | S→C | 对方已完成 |
fate.start | S→C | 开始答题 |
fate.report | S→C | 生成报告 |
fate.published | S→C | 已官宣 |
fate.history_list | S→C | 历史列表 |
fate.error | S→C | 错误提示 |
1.8 方块世界(/ws/blockworld,前缀 bw_)
| type | 方向 | 说明 |
|---|---|---|
bw_join | C→S | 加入世界 |
bw_move | C→S | 移动 |
bw_dig | C→S | 挖掘 |
bw_place | C→S | 放置 |
bw_chat | C→S | 聊天 |
bw_respawn | C→S | 重生 |
get_stickers / ping | C→S | 通用 |
bw_connected | S→C | 连接就绪 |
bw_joined | S→C | 加入成功 |
bw_player_info | S→C | 玩家信息 |
bw_pid_map | S→C | 玩家 ID 映射 |
bw_chunk | S→C | 区块数据 |
bw_block | S→C | 方块变更广播 |
bw_correct | S→C | 位置校正(反作弊) |
bw_chat | S→C | 聊天广播 |
bw_leave | S→C | 玩家离开 |
bw_error | S→C | 错误提示 |
bw_pack | S→C | 世界快照打包 |
pong | S→C | 心跳响应 |
1.9 临时聊天(/ws/tempchat,前缀 temp_)
临时聊天(1v1 私密房),支持邀请制、断线重连、举报。
| type | 方向 | 参数 | 说明 |
|---|---|---|---|
temp_join | C→S | nickname, password?, player_token? | 加入临时聊天(需登录账号) |
temp_search | C→S | keyword | 搜索在线用户 |
temp_invite | C→S | target_player_id | 发起邀请 |
temp_invite_resp | C→S | invite_id, accept | 回应邀请 |
temp_rejoin | C→S | room_id, nickname, player_token | 断线重连 |
temp_history | C→S | offset | 向上滚动加载历史 |
temp_chat | C→S | content, sticker_id?, sticker_url? | 发送消息 |
temp_exit | C→S | — | 退出房间 |
temp_report | C→S | reason | 举报 |
temp_ping | C→S | — | 心跳 |
get_stickers | C→S | — | 获取表情 |
temp_joined | S→C | nickname, has_identity | 加入成功 |
temp_search_result | S→C | users[] | 搜索结果 |
temp_invite | S→C | invite_id, from_name, from_player_id, timeout | 收到邀请 |
temp_invite_sent | S→C | ok, invite_id, error | 邀请发送结果 |
temp_invite_result | S→C | ok, error | 邀请处理结果 |
temp_invite_expired | S→C | ... | 邀请过期 |
temp_invite_dismissed | S→C | — | 邀请被撤回 |
temp_room_created | S→C | room_id, peer_name, peer_player_id, rejoined?, history[]?, pending_join? | 进入房间/重连 |
temp_chat | S→C | sender_name, content, sticker_id?, sticker_url?, time | 聊天消息广播 |
temp_history | S→C | messages[], offset, has_more | 历史消息 |
temp_system | S→C | text | 系统提示 |
temp_closed | S→C | reason, text | 房间关闭 |
temp_report_result | S→C | ok, message, error | 举报结果 |
temp_error | S→C | text | 错误提示 |
temp_pong | S→C | — | 心跳响应 |
1.10 BOT 网关(/bot)
BOT 网关是开放给第三方 BOT 客户端的 WebSocket 入口,连接后需先鉴权,成功后自动加入聊天室,复用 lobby_* 全部消息能力(无需再发 lobby_join)。
鉴权流程:
客户端 → 服务端: 连接 /bot
服务端 → 客户端: {"type":"bot_wait_auth"}
客户端 → 服务端: {"type":"bot_auth","player_id":"xx","key":"xx"}
服务端 → 客户端: {"type":"bot_auth_ok","nickname":"xx"} 或 {"type":"bot_error","message":"..."}| type | 方向 | 参数 | 说明 |
|---|---|---|---|
bot_auth | C→S | player_id, key | 鉴权 |
bot_ping | C→S | — | 心跳 |
bot_wait_auth | S→C | — | 等待鉴权 |
bot_auth_ok | S→C | nickname | 鉴权成功 |
bot_pong | S→C | — | 心跳响应 |
bot_error | S→C | message | 鉴权失败/错误 |
鉴权失败文案:
BOT 鉴权失败:玩家ID或KEY不正确;未鉴权即发其它消息时提示请先发送鉴权消息 bot_auth。
1.11 管理后台(/{Admin.Path}/ws,前缀 admin_)
管理后台 WS 地址由 Admin.Path 决定(默认 /admin/ws)。连接建立后需发送 admin_connect 进行 JWT 鉴权。
客户端 → 服务端
| type | 说明 |
|---|---|
admin_connect | 连接(token 认证,onMessage 特判优先处理) |
admin_sessions | 活跃对局列表 |
admin_spectate / admin_unspectate | 观战/停止观战 |
admin_reports / admin_report_detail / admin_mark_reviewed | 举报审核 |
admin_ban_player / admin_ban_by_info | 封禁 |
admin_broadcast / admin_room_broadcast | 全服/房间广播 |
admin_sticker_upload / admin_sticker_add / admin_sticker_batch_add | 上传/新增表情 |
admin_sticker_delete / admin_sticker_batch_delete | 删除表情 |
admin_sticker_list | 表情列表 |
admin_sticker_review_list / admin_sticker_approve / admin_sticker_batch_approve / admin_sticker_reject / admin_sticker_batch_reject | 表情审核 |
admin_list / admin_add / admin_delete / admin_change_password | 管理员管理 |
admin_own_password | 修改本人密码 |
admin_my_logs / admin_all_logs | 审计日志 |
admin_lobby_players / admin_lobby_messages / admin_lobby_delete | 聊天室管理 |
admin_lobby_ban / admin_lobby_announce / admin_lobby_rate_limit | 聊天室封禁/公告/限速 |
admin_lobby_batch_delete / admin_lobby_batch_ban | 批量删除/封禁 |
admin_user_search / admin_user_ban / admin_user_unban / admin_user_list_banned | 用户管理 |
community_posts / community_post_detail / community_post_review / community_post_batch_review / community_post_pin | 社区帖子管理 |
community_comments / community_comment_review | 社区评论管理 |
admin_user_get_tags / admin_user_set_special / admin_user_add_tag / admin_user_delete_tag | 用户标签管理 |
admin_bot_list / admin_bot_add / admin_bot_set_status / admin_bot_delete | BOT 管理 |
admin_announce_list | 公告列表 |
admin_bot_apply_list / admin_bot_apply_review | BOT 申请审核 |
admin_soup_rooms / admin_soup_dissolve | 海龟汤房间管理 |
admin_soup_puzzles / admin_soup_puzzle_status / admin_soup_puzzle_delete | 海龟汤汤面管理 |
服务端 → 客户端
| type | 说明 |
|---|---|
admin_connected | 连接鉴权成功 |
sessions_list | 活跃对局列表 |
need_admin_login | 需要管理员登录 |
各管理命令的响应沿用对应业务 type(如
reports_list、sticker_list、admin_list等),此处不逐一枚举。
二、HTTP 接口
源码:路由定义见 Router.php,控制器实现见 Controllers 目录。
2.1 GET 页面
| 路径 | 说明 |
|---|---|
/ | 游戏中心首页(XQFGameHub) |
/turing | 经典 1v1(图灵测试)页面 |
/lobby | 聊天室页面 |
/temp-chat | 临时聊天页面 |
/board/gomoku | 五子棋页面 |
/board/go | 围棋页面 |
/soup | 海龟汤页面 |
/blockworld | 方块世界页面 |
/community | 交流社区列表页 |
/community/post/{id} | 社区帖子详情页 |
/account | 账号中心页面 |
/song-history | 点歌回顾页面 |
/weekly-report | 周报页面 |
/agreement | 用户协议 |
/privacy | 隐私政策 |
/player/{nickname} | 玩家主页(由 turingIndex 渲染) |
/collection/{token} | 公开收藏页 |
/oauth/login/{provider} | 发起 OAuth 登录(302 跳转) |
/oauth/callback/{provider} | OAuth 回调 |
/oauth/complete | OAuth 完成页面 |
2.2 GET API
| 路径 | 说明 |
|---|---|
/api/community/posts | 社区帖子列表 |
/api/community/search | 社区搜索 |
/api/community/post | 帖子详情 |
/api/community/comments | 评论列表 |
/api/community/comment-locate | 评论定位 |
/api/community/my | 我的帖子 |
/api/bot/panel | 获取 BOT 信息 |
/api/account/overview | 账号概览 |
/api/account/bot-access | BOT 访问权限 |
/api/generate-player-id | 生成玩家 ID |
/api/player-stats | 玩家数据统计 |
/api/chat-history | 对局记录列表 |
/api/chat-history/detail | 对局记录详情 |
/api/player-profile | 玩家资料 |
/api/player-collections | 玩家收藏 |
/api/collection/detail | 收藏详情 |
/api/collection/by-token | 按 token 查收藏 |
/api/player-messages | 我的留言 |
/api/player/tags | 获取玩家标签 |
/api/macros | 宏列表 |
/api/temp/users | 在线用户列表 |
/api/sticker/list | 表情列表 |
/api/soup/my-puzzles | 我的汤面列表 |
/api/soup/public-puzzles | 公开汤面列表 |
/api/bot/stickers | BOT 表情列表 |
/api/weekly-report | 获取周报数据 |
/api/song-history | 点歌回顾列表 |
/api/song-history/detail | 点歌回顾详情 |
/api/oauth/providers | OAuth 提供商列表 |
/api/oauth/bindings | OAuth 绑定列表 |
/api/oauth/pending-info | 待绑定信息 |
/api/avatar/{player_id} | 玩家头像 |
2.3 POST API
| 路径 | 说明 |
|---|---|
/api/player-message/hide | 隐藏留言 |
/api/player-message/settings | 留言设置 |
/api/player/worn-tags | 设置佩戴标签 |
/api/chat-history/collect | 收藏记录 |
/api/collection/like | 点赞收藏 |
/api/sticker/upload | 上传表情 |
/api/image/upload | 上传图片(返回一次性 key) |
/api/sticker/delete | 删除表情 |
/api/sticker/add-to-mine | 添加表情到我的 |
/api/macros | 保存宏(新建/更新) |
/api/macros/delete | 删除宏 |
/api/soup/my-puzzles | 创建汤面 |
/api/soup/my-puzzles/{id}/share | 分享汤面 |
/api/soup/public-puzzles/{id}/copy | 复制公开汤面 |
/api/temp/invite | 发起临时聊天邀请 |
/api/temp/invite/decline | 拒绝邀请 |
/api/bot/apply | 申请 BOT |
/api/account/nickname | 修改昵称 |
/api/account/avatar | 上传头像 |
/api/account/password | 修改密码 |
/api/account/email | 绑定邮箱 |
/api/email/send-code | 发送邮箱验证码 |
/api/email/auth | 邮箱验证 |
/api/bot/panel/nickname | 更新 BOT 昵称 |
/api/bot/panel/key | 轮换 BOT KEY |
/api/community/post/save | 保存帖子 |
/api/community/post/delete | 删除帖子 |
/api/community/like | 帖子点赞 |
/api/community/favorite | 帖子收藏 |
/api/community/comment | 发表评论 |
/api/community/comment/delete | 删除评论 |
/api/community/report | 举报帖子 |
/oauth/login/{provider} | 绑定模式发起 OAuth(form POST) |
/api/oauth/unbind | 解绑 OAuth |
/api/oauth/sync-avatar | 立即同步头像 |
/api/oauth/confirm-create | 确认创建 OAuth 账号 |
/api/oauth/cancel | 取消 OAuth 绑定 |
2.4 PUT / DELETE API
| 方法 | 路径 | 说明 |
|---|---|---|
| PUT | /api/soup/my-puzzles/{id} | 更新我的汤面 |
| DELETE | /api/soup/my-puzzles/{id} | 删除我的汤面 |
2.5 管理后台 HTTP
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /{Admin.Path}(默认 /admin) | 管理后台页面 |
| POST | /{Admin.Path}/api/login(默认 /admin/api/login) | 管理员登录 |
管理后台路径与账号由
Config/App.php的Admin.Path/Admin.Username/Admin.Password配置,首次启动自动创建超级管理员。
2.6 静态资源
以下路径由 GameController::STATIC_RESOURCES 白名单提供:
/script.js、/style.css、/favicon.svg、/shared.js、/shared/md-renderer.js、/shared/md-renderer.css、 /admin/admin.js、/admin/admin_mdv3.js、/admin/admin.css、/admin/favicon.svg、 /lobby/lobby.css、/lobby/lobby.js、/lobby/lobby-bot.js、 /board/board-game.css、/board/gomoku/gomoku.css、/board/gomoku/gomoku.js、 /board/go/go.css、/board/go/go.js、/board/go/go-chat.js、 /weekly-report/weekly-report.css、/weekly-report/weekly-report.js、 /temp-chat/temp-chat.css、/temp-chat/temp-chat.js、/temp-invite.js、 /soup/soup.css、/soup/soup.js、/soup/index.html、 /agreement/index.html、/privacy/index.html、/turing/index.html、 /hub.css、/hub.js、/hub-nav.js、/comment-widget.js、 /account/account.css、/account/account.js、/account/sticker-manager.js、/account/index.html、 /blockworld/blockworld.css、/blockworld/blockworld.js、/blockworld/index.html、 /community/community.css、/community/community.js、/community/post.js、/community/index.html、/community/post.html、 /song-history/song-history.css、/song-history/song-history.js
三、通用说明
- 身份:玩家通过
player_token或player_id+ 密码验证;聊天室同时使用nickname。BOT 使用独立账户 ID(bot_account_id,复用玩家身份体系)并需player_id+key鉴权。 - 管理员:登录
/{Admin.Path}获取 JWT token(HMAC-SHA256),聊天室通过lobby_admin_verify、管理后台通过admin_connect验证。 - 心跳:
ping/pong(BOT 为bot_ping/bot_pong,临时聊天为temp_ping/temp_pong),超时自动清理连接。 - 路由:WS 连接按路径分派 Handler;消息按
type前缀匹配(空前缀兜底)。admin_connect、ping、pong在分发前被特判处理。 - 权限:管理员操作(ban/mute/isolate/kick/delete 等)服务端强制校验
isAdmin。 - 封禁:IP + 指纹 + player_id 三维,所有模式接入检查(含图片上传接口)。
- 防刷:同 IP/指纹最多 3 账号,创建频率 10 分钟限 1 次;聊天室发言有频率限制,图片上传 60 秒内最多 10 次。
- 时间字段:全站统一为 Unix 秒级时间戳(
time/created_at),展示格式由消费端自行解析。 - 开关配置:海龟汤、缘分、方块世界分别受
Soup.Enabled、Fate.Enabled、BlockWorld.Enabled控制;关闭时不注册对应路由。