聊天与 AI
POST /cm/ai/live
播放页「问AI」:SSE(start/delta/done/error)流式回答 {question≤500字, song:{type:'song',id,name,sub?,pic?}, reset?:bool};delta.text 为累计文本;scope=player 与公共 Chat 隔离,reset=true 先清空播放页上下文
权限:Bearer。
参数校验与业务错误
| HTTP | 服务端校验说明 |
|---|---|
| 400 | '缺少歌曲信息' |
说明中的变量表达式表示运行时值;另有统一的认证、频控和上游错误。
请求模板
将 {id} 等占位符和字段值替换为实际数据,令牌只使用你自己的 CurrentMusic 会话。
curl --request POST 'https://music.20110208.xyz/cm/ai/live' \
--header 'Authorization: Bearer YOUR_CURRENTMUSIC_TOKEN'
返回类型
此分支使用专用处理器、文件或事件流响应,或在共享分支中组装 JSON。具体结构见对应专题;文件流不能按 JSON 解析。
实现定位:backend/cm_server.py:4145。接口参数和返回条件均来自该路由分支。
POST /cm/chat/image
上传聊天图片 {file: base64, filename, contentType}(魔法字节校验,≤1.5MB,5s 频控)
权限:Bearer。
参数校验与业务错误
| HTTP | 服务端校验说明 |
|---|---|
| 400 | '图片数据非法(base64 解码失败)' |
| 400 | str(e) |
| 429 | '图片传得太频繁,稍后再试' |
说明中的变量表达式表示运行时值;另有统一的认证、频控和上游错误。
请求模板
将 {id} 等占位符和字段值替换为实际数据,令牌只使用你自己的 CurrentMusic 会话。
curl --request POST 'https://music.20110208.xyz/cm/chat/image' \
--header 'Authorization: Bearer YOUR_CURRENTMUSIC_TOKEN'
返回结构
以下是实现中直接返回的字段与取值表达式,不是一次真实请求的响应示例。条件分支可能返回不同结构。
HTTP 200
| 字段 | 取值/生成逻辑 |
|---|---|
image | name |
url | f'/cm/chat/image/{name}' |
实现定位:backend/cm_server.py:4229。接口参数和返回条件均来自该路由分支。
GET /cm/chat/image/{filename}
聊天与 AI · /chat/image/{filename}
权限:路由未直接调用登录检查;委托处理器可能另行校验,见说明。
请求参数
| 位置 | 字段 | 默认/读取方式 |
|---|---|---|
| path | filename | 路径占位符;按业务替换 |
表格列出实际代码读取的字段;get 的默认值不等于业务可省略。必填、长度和取值约束见下方校验及关联专题。
参数校验与业务错误
| HTTP | 服务端校验说明 |
|---|---|
| 404 | '图片不存在' |
说明中的变量表达式表示运行时值;另有统一的认证、频控和上游错误。
请求模板
将 {id} 等占位符和字段值替换为实际数据,令牌只使用你自己的 CurrentMusic 会话。
curl --request GET 'https://music.20110208.xyz/cm/chat/image/{filename}' \
--header 'Authorization: Bearer YOUR_CURRENTMUSIC_TOKEN'
返回类型
此分支使用专用处理器、文件或事件流响应,或在共享分支中组装 JSON。具体结构见对应专题;文件流不能按 JSON 解析。
实现定位:backend/cm_server.py:4246。接口参数和返回条件均来自该路由分支。
GET /cm/chat/live
聊天实时流:?sse=1 走 SSE(message/delete/edit 事件,id=seq 断线续传;edit.payload={id,content,atts,streaming},AI 流式回答用同一 id 反复更新);不带则返回 JSON 增量
权限:公开。
请求参数
| 位置 | 字段 | 默认/读取方式 |
|---|---|---|
| query | since | 0(空值时回退) |
| query | sse | 未在 get 中指定 |
表格列出实际代码读取的字段;get 的默认值不等于业务可省略。必填、长度和取值约束见下方校验及关联专题。
请求模板
将 {id} 等占位符和字段值替换为实际数据,令牌只使用你自己的 CurrentMusic 会话。
curl --request GET 'https://music.20110208.xyz/cm/chat/live?sse=<sse>&since=<since>'
返回结构
以下是实现中直接返回的字段与取值表达式,不是一次真实请求的响应示例。条件分支可能返回不同结构。
HTTP 200
| 字段 | 取值/生成逻辑 |
|---|---|
events | cm_chat.events_since(since) |
latestSeq | cm_chat.latest_seq() |
实现定位:backend/cm_server.py:4264。接口参数和返回条件均来自该路由分支。
GET /cm/chat/members
聊天成员:?q= 实时搜索昵称/用户名(@ 提及选择器,最多 20,前缀命中优先;无 q 返回近期活跃;尊重广场公开开关,AI 账号始终可搜到)
权限:公开。
请求参数
| 位置 | 字段 | 默认/读取方式 |
|---|---|---|
| query | limit | 8(空值时回退) |
| query | q | ''(空值时回退) |
表格列出实际代码读取的字段;get 的默认值不等于业务可省略。必填、长度和取值约束见下方校验及关联专题。
请求模板
将 {id} 等占位符和字段值替换为实际数据,令牌只使用你自己的 CurrentMusic 会话。
curl --request GET 'https://music.20110208.xyz/cm/chat/members?q=<q>&limit=<limit>'
返回结构
以下是实现中直接返回的字段与取值表达式,不是一次真实请求的响应示例。条件分支可能返回不同结构。
HTTP 200
| 字段 | 取值/生成逻辑 |
|---|---|
members | cm_chat.recent_members(limit=int(q.get('limit') or 20)) |
HTTP 200
| 字段 | 取值/生成逻辑 |
|---|---|
members | cm_chat.search_members(term, limit=int(q.get('limit') or 8)) |
实现定位:backend/cm_server.py:4254。接口参数和返回条件均来自该路由分支。
GET /cm/chat/messages
公共聊天室:最近消息(含 atts 引用卡片;?before=
权限:公开。
请求参数
| 位置 | 字段 | 默认/读取方式 |
|---|---|---|
| query | before | 0(空值时回退) |
| query | limit | 30(空值时回退) |
表格列出实际代码读取的字段;get 的默认值不等于业务可省略。必填、长度和取值约束见下方校验及关联专题。
请求模板
将 {id} 等占位符和字段值替换为实际数据,令牌只使用你自己的 CurrentMusic 会话。
curl --request GET 'https://music.20110208.xyz/cm/chat/messages?before=<before>&limit=<limit>'
返回结构
以下是实现中直接返回的字段与取值表达式,不是一次真实请求的响应示例。条件分支可能返回不同结构。
HTTP 200
| 字段 | 取值/生成逻辑 |
|---|---|
messages | cm_chat.list_messages(before=int(q.get('before') or 0), limit=int(q.get('limit') or 30)) |
实现定位:backend/cm_server.py:4196。接口参数和返回条件均来自该路由分支。
POST /cm/chat/messages
发送消息 {content≤500字, image?: 图片文件名, mentions?: [@用户id], atts?: [{type: song|album|artist|playlist, id, name, sub?, pic?}]≤5}(1.5s 频控)。@CurrentMusicAI 可提问(卡片可选);按用户保存近 6 轮上下文,服务端异步联网检索后以 AI 账号回复:先发空消息占位,再经 /chat/live 的 edit 事件流式更新(streaming=true),最终内容为 Markdown,可带 ≤3 张 atts 卡片;消息带 image 时图片会作为视觉输入发送给 AI
权限:Bearer。
请求参数
| 位置 | 字段 | 默认/读取方式 |
|---|---|---|
| JSON body | atts | 未在 get 中指定 |
表格列出实际代码读取的字段;get 的默认值不等于业务可省略。必填、长度和取值约束见下方校验及关联专题。
参数校验与业务错误
| HTTP | 服务端校验说明 |
|---|---|
| 400 | '图片引用非法' |
| 400 | '说点什么、带张图,或引用一首歌吧' |
| 429 | '发言太快啦,歇一下' |
说明中的变量表达式表示运行时值;另有统一的认证、频控和上游错误。
请求模板
将 {id} 等占位符和字段值替换为实际数据,令牌只使用你自己的 CurrentMusic 会话。
curl --request POST 'https://music.20110208.xyz/cm/chat/messages' \
--header 'Authorization: Bearer YOUR_CURRENTMUSIC_TOKEN' \
--header 'Content-Type: application/json' \
--data '{"atts": "<atts>"}'
返回结构
以下是实现中直接返回的字段与取值表达式,不是一次真实请求的响应示例。条件分支可能返回不同结构。
HTTP 200
| 字段 | 取值/生成逻辑 |
|---|---|
响应体 | sent |
实现定位:backend/cm_server.py:4200。接口参数和返回条件均来自该路由分支。
DELETE /cm/chat/messages/{id}
删除消息(本人或管理员/超管/站长,软删)
权限:Bearer。
请求参数
| 位置 | 字段 | 默认/读取方式 |
|---|---|---|
| path | id | 路径占位符;按业务替换 |
表格列出实际代码读取的字段;get 的默认值不等于业务可省略。必填、长度和取值约束见下方校验及关联专题。
参数校验与业务错误
| HTTP | 服务端校验说明 |
|---|---|
| 403 | '只能删除自己的消息(管理员可删任何人的)' |
说明中的变量表达式表示运行时值;另有统一的认证、频控和上游错误。
请求模板
将 {id} 等占位符和字段值替换为实际数据,令牌只使用你自己的 CurrentMusic 会话。
curl --request DELETE 'https://music.20110208.xyz/cm/chat/messages/{id}' \
--header 'Authorization: Bearer YOUR_CURRENTMUSIC_TOKEN'
返回结构
以下是实现中直接返回的字段与取值表达式,不是一次真实请求的响应示例。条件分支可能返回不同结构。
HTTP 200
| 字段 | 取值/生成逻辑 |
|---|---|
ok | True |
实现定位:backend/cm_server.py:4223。接口参数和返回条件均来自该路由分支。