diff --git a/docs/message/private_msg.md b/docs/message/private_msg.md
index 811375f..d0b68a7 100644
--- a/docs/message/private_msg.md
+++ b/docs/message/private_msg.md
@@ -4,7 +4,42 @@
### 会话对象
-待补充……
+| 字段 | 类型 | 内容 | 备注 |
+| -------------------- | ---- | -------------- | -------------------------------------------------------------- |
+| talker_id | num | 聊天对象的id | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
+| session_type | num | 聊天对象的类型 | 1:用户
2:粉丝团 |
+| at_seqno | num | 最近一次未读at自己的消息的序列号 | 在粉丝团时有效,若没有未读的at自己的消息则为`0` |
+| top_ts | num | | |
+| group_name | str | 粉丝团名称 | 在粉丝团时有效 |
+| group_cover | str | 粉丝团头像 | 在粉丝团时有效 |
+| is_follow | num | 是否已关注对方 | 在用户会话中有效 |
+| is_dnd | num | 是否设置了免打扰 | |
+| ack_seqno | num | 最近一次已读的消息序列号 | |
+| ack_ts | num | 最近一次已读时间 | 微秒级时间戳|
+| session_ts | num | 会话时间 | 微秒级时间戳|
+| unread_count | num | 未读消息数 | |
+| last_msg | obj | 最近的一条消息 | 详见[私信主体对象](#私信主体对象) |
+| group_type | num | 粉丝团类型 | 在粉丝团时有效
0:应援团
2:官方群 |
+| can_fold | num | | |
+| status | num | 会话状态 | |
+| max_seqno | num | 最近一条消息的序列号 | |
+| new_push_msg | num | 是否有新推送的消息 | |
+| setting | num | | |
+| is_guardian | num | | |
+| is_intercept | num | 是否被拦截 | |
+| is_trust | num | 是否不拦截此会话 | |
+| system_msg_type | num | 系统消息类型 | 0:不是系统消息
7:UP主小助手 |
+| account_info | obj | 会话信息 | 仅在系统消息中出现 |
+| live_status | num | 是否正在直播 | |
+| biz_msg_unread_count | num | 未读推送消息数 | |
+| user_label | null | | |
+
+`account_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| name | str | 会话名称 | |
+| pic_url | str | 会话头像 | |
### 私信主体对象
@@ -14,7 +49,7 @@
| ---------------- | ---- | -------------- | -------------------------------------------------------------- |
| sender_uid | num | 发送者mid | |
| receiver_type | num | 接收者类型 | 1:用户
2:粉丝团 |
-| receiver_id | num | 接收者id | `receiver_type` 为 `1` 时表示用户 mid,为 `2` 时表示应援团 id |
+| receiver_id | num | 接收者id | `receiver_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
| msg_type | num | 消息类型 | 详见[私信消息类型、内容说明](private_msg_content.md) |
| content | str | 消息内容 | [私信内容对象](private_msg_content.md)经过 JSON 序列化后的文本 |
| msg_seqno | num | 消息序列号 | 按照时间顺序从小到大 |
@@ -52,7 +87,7 @@
| 10 | 自动回复 - 关键词回复 | |
| 11 | 自动回复 - 大航海上船回复 | |
| 12 | 自动推送 - UP 主赠言 | 在以前稿件的自动推送与其附带的 UP 主赠言是 2 条不同的私信(其中 UP 主赠言的消息来源代码为 12),现在 UP 主赠言已被合并成为稿件自动推送的一部分 |
-| 13 | 应援团系统提示 | 如:应援团中的提示信息“欢迎xxx入群” |
+| 13 | 粉丝团系统提示 | 如:粉丝团中的提示信息“欢迎xxx入群” |
| 16 | (?) | **作用尚不明确** |
| 17 | 互相关注 | 互相关注时自动发送的私信“我们已互相关注,开始聊天吧~” |
| 18 | 系统提示 | 如:“对方主动回复或关注你前,最多发送1条消息” |
@@ -138,7 +173,7 @@ curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread' \
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ----------------- | ---- | ---------------- | ------ | ------------------------------------------------------ |
-| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示应援团 id |
+| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
| session_type | num | 聊天对象的类型 | 必要 | 1:用户
2:粉丝团 |
| size | num | 返回消息数量 | 非必要 | 默认为 20,最大为 200 |
| begin_seqno | num | 开始的序列号 | 非必要 | 提供本参数时返回以本序列号开始(不包括本序列号)的消息 |
@@ -284,7 +319,7 @@ curl -G 'https://api.vc.bilibili.com/svr_sync/v1/svr_sync/fetch_session_msgs' \
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| --------------------- | ---- | ------------------------ | ------ | ---------------------------------------------------- |
| msg[sender_uid] | num | 发送者mid | 必要 | 必须为自己的 mid |
-| msg[receiver_id] | num | 接收者id | 必要 | `msg[receiver_type]` 为 `1` 时表示用户 mid,为 `2` 时表示应援团 id |
+| msg[receiver_id] | num | 接收者id | 必要 | `msg[receiver_type]` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
| msg[receiver_type] | num | 接收者类型 | 必要 | 1:用户
2:粉丝团 |
| msg[msg_type] | num | 消息类型 | 必要 | 详见[私信消息类型、内容说明](private_msg_content.md) |
| msg[msg_status] | num | 消息状态 | 非必要 | 恒为 `0` |
diff --git a/docs/message/private_msg_content.md b/docs/message/private_msg_content.md
index fb33b9e..584bbf2 100644
--- a/docs/message/private_msg_content.md
+++ b/docs/message/private_msg_content.md
@@ -28,6 +28,8 @@
在发送私信时,请确保下面的对象合法且 `url` 项的值为 B 站的图床 url,否则会报 21037 `图片格式不合法,不要调戏接口啦` 错误
+建议设置 `height` 与 `width` 属性,否则可能会导致消息显示异常
+
根对象:
| 字段 | 类型 | 内容 | 备注 |
@@ -58,7 +60,7 @@
内容为目标私信的 `msg_key`
-请确保目标私信存在、在撤回有效期(120 秒)里,且与发送的私信在同一会话内;成功发送此私信后,目标私信的 `msg_status` 会变成 `1`
+请确保目标私信存在、在撤回有效期(120 秒)里,且与发送的私信在同一会话内;成功发送此私信后,目标私信的 `msg_status` 会变成 `1`(在前端会显示目标消息被撤回)
**示例:**
@@ -68,7 +70,7 @@
7345551441311046575
```
-若发送成功,则私信 A 会被撤回,并且其 `msg_status` 也会变成 `1`
+若发送成功,则私信 A 会被撤回(在前端显示该消息被撤回),并且其 `msg_status` 也会变成 `1`
## 自定义表情消息(`msg_type=6`)
@@ -83,7 +85,7 @@
| author | str | 分享内容作者 | 此项不实时更新,在发送私信时设置(非必要) |
| headline | str | 分享内容主标题 | 比 `title` 更突出;此项不实时更新,在发送私信时设置(非必要) |
| id | num | 分享内容id | |
-| source | num | 分享内容类型 | ~~1:小视频~~(已弃用)
2:相簿
3:纯文字
4:直播
5:视频
6:专栏
7:番剧(`id` 为 season_id)
8:音乐
9:国产动画(`id` 为 AV 号)
10:图片
11:动态
16:番剧(`id` 为 epid)
17:番剧 |
+| source | num | 分享内容类型 | ~~1:小视频~~(已弃用)
2:相簿
3:纯文字
4:直播(此类型不常用,见[分享其他内容消息](#分享其他内容消息msg_type14))
5:视频
6:专栏
7:番剧(`id` 为 season_id)
8:音乐
9:国产动画(`id` 为 AV 号)
10:图片
11:动态
16:番剧(`id` 为 epid)
17:番剧 |
| source_desc | str | 分享内容类型说明 | 仅当 `source` 值为 `16` 时有此项 |
| thumb | str | 分享内容封面 | 此项不实时更新,在发送私信时设置 |
| title | str | 分享内容标题 | 此项不实时更新,在发送私信时设置 |
@@ -92,6 +94,8 @@
**示例:**
+分享 UP 主 “社会易姐QwQ” 的视频 av246551172
+
```json
{
"author": "社会易姐QwQ",
@@ -106,6 +110,8 @@
### 小程序消息(`msg_type=9`)
+由于 B 站并没有对外公开小程序,此消息类型不常用
+
根对象:
| 字段 | 类型 | 内容 | 备注 |
@@ -121,6 +127,8 @@
**示例:**
+分享 “主站测试专用小程序”
+
```json
{
"avatar": "http://i0.hdslb.com/bfs/mall/mall/7b/dd/7bdd072290de017593791b52e937ca29.png",
@@ -138,27 +146,80 @@
此类型消息仅可接收,不可直接发送
+**按钮显示逻辑说明:**
+
+- **按钮的url:**首先尝试读取 `jump_uri_*_config` 对象中表示当前设备类型的 url(如 `web_uri`、`android_uri` 等);若为空值,则尝试读取 `jump_uri_*_config` 对象中 `all_uri` 的值;若仍为空值,则读取根对象中 `jump_uri_*` 的值;若仍为空值,则不显示该按钮(无论 `jump_text_*` 或 `jump_uri_*_config` 中的 `text` 是否为非空值)
+- **按钮提示文字:**若按钮是可见的,则先尝试读取 `jump_uri_*_config` 对象中 `text` 的值;若为空值,则读取根对象中 `jump_text_*` 的值;若仍为空值,则提示文字为 `查看详情`
+
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------------- | ----- | ------------- | ------------------------- |
| title | str | 通知标题 | |
| text | str | 通知内容 | |
-| jump_text | str | 按钮1提示文字 | |
-| jump_uri | str | 按钮1跳转链接 | |
-| modules | array | 详细信息 | |
-| jump_text_2 | str | 按钮2提示文字 | |
-| jump_uri_2 | str | 按钮2跳转链接 | |
-| jump_text_3 | str | 按钮3提示文字 | |
-| jump_uri_3 | str | 按钮3跳转链接 | |
-| notifier | obj | 发送者信息 | |
+| jump_text | str | 按钮1提示文字 | 若按钮1不存在则为空;若按钮1存在此项也可能为空,此时前端显示文字为 `查看详情` |
+| jump_uri | str | 按钮1跳转链接 | 若按钮1不存在则为空 |
+| modules | 有效时:array
无效时:null | 详细信息 | |
+| jump_text_2 | str | 按钮2提示文字 | 若按钮2不存在则为空;若按钮2存在此项也可能为空,此时前端显示文字为 `查看详情` |
+| jump_uri_2 | str | 按钮2跳转链接 | 若按钮2不存在则为空 |
+| jump_text_3 | str | 按钮3提示文字 | 若按钮3不存在则为空;若按钮3存在此项也可能为空,此时前端显示文字为 `查看详情` |
+| jump_uri_3 | str | 按钮3跳转链接 | 若按钮3不存在则为空 |
+| notifier | 有效时:obj
无效时:null | 发送者信息 | |
| jump_uri_config | obj | 按钮1配置 | |
| jump_uri_2_config | obj | 按钮2配置 | |
| jump_uri_3_config | obj | 按钮3配置 | |
-| biz_content | obj | 扩展信息 | |
+| biz_content | 有效时:obj
无效时:null | 扩展信息 | |
+
+`modules`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---- |
+| 0 | obj | 详细信息1 | |
+| n | obj | 详细信息(n+1) | |
+| …… | obj | …… | …… |
+
+`modules`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | ---- | ---- |
+| title | str | 标题 | |
+| detail | str | 内容 | |
+
+`notifier`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ---------- | ------ |
+| avatar_url | str | 发送者头像 | |
+| nickname | str | 发送者名称 | |
+| jump_url | str | 发送者链接 | 可为空 |
+
+`jump_uri_config`、`jump_uri_2_config`、`jump_uri_3_config`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ----------------------- | -------------------- |
+| all_uri | str | 所有设备的跳转链接 | 若按钮不存在则无此项 |
+| android_uri | str | Android客户端的跳转链接 | 若按钮不存在则无此项 |
+| iphone_uri | str | iPhone客户端的跳转链接 | 若按钮不存在则无此项 |
+| ipad_uri | str | iPad客户端的跳转链接 | 若按钮不存在则无此项 |
+| web_uri | str | 网页上的跳转链接 | 若按钮不存在则无此项 |
+| text | str | 按钮提示文字 | 若按钮不存在则为空 |
+
+`biz_content`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ----------- | ---------------- |
+| cover | str | 封面url | |
+| backup_cover | str | 备用封面url | |
+| refresh_type | num | (?) | **作用尚不明确** |
+| biz_type | num | (?) | **作用尚不明确** |
+| biz_id1 | str | (?) | **作用尚不明确** |
+| biz_id2 | str | (?) | **作用尚不明确** |
+| biz_status | num | (?) | **作用尚不明确** |
**示例:**
+直播开始提醒
+
```json
{
"title": "直播开始提醒",
@@ -222,8 +283,17 @@
| pub_date | num | 视频发布时间 | 秒级时间戳,若视频失效则为 `0` |
| attach_msg | 有效时:obj
无效时:null | UP主赠言 | |
+`attach_msg`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------------------------- |
+| id | num | 赠言id | |
+| content | str | 赠言内容 | 会自动加上 `UP主赠言:` 前缀,可能包含私信表情 |
+
**示例:**
+推送视频 av740817783/BV1Dk4y1E7MZ
+
```json
{
"title": "【2023嵌入式大赛】浅浅测试一下龙芯开发板",
@@ -260,8 +330,17 @@
| attach_msg | 有效时:obj
无效时:null | UP主赠言 | |
| pub_date | num | 专栏发布时间 | 秒级时间戳,若专栏失效则为 `0` |
+`attach_msg`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------------------------- |
+| id | num | 赠言id | |
+| content | str | 赠言内容 | 会自动加上 `UP主赠言:` 前缀,可能包含私信表情 |
+
**示例:**
+推送专栏 cv18275013
+
```json
{
"rid": 18275013,
@@ -303,8 +382,71 @@
}
```
+### 分享其他内容消息(`msg_type=14`)
+
+常见于分享直播
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | ---------------- | -------------------------------- |
+| author | str | 分享内容作者 | 此项不实时更新,在发送私信时设置 |
+| cover | str | 分享内容封面 | 此项不实时更新,在发送私信时设置 |
+| desc | str | 分享内容简介 | 此项不实时更新,在发送私信时设置 |
+| source | str | 分享内容类型说明 | 常见的值为 `直播` |
+| title | str | 分享内容标题 | 此项不实时更新,在发送私信时设置 |
+| url | str | 分享内容url | |
+
+**示例:**
+
+分享直播 ID 21738461
+
+```json
+{
+ "author": "哔哩哔哩晚会",
+ "cover": "https://i1.hdslb.com/bfs/face/1b593d28fcd0cf63837c3ea80ac96d01bb85ec3b.jpg",
+ "desc": "主播:哔哩哔哩晚会 https://live.bilibili.com/21738461",
+ "source": "直播",
+ "title": "2023最美的夜 bilibili晚会",
+ "url": "https://live.bilibili.com/21738461?broadcast_type=0&is_room_feed=1&live_from=41000&share_medium=android&share_source=bili_message&bbid=XU8CE838022AF6625C64B2153A3EF1E571AFF&ts=1704038936971"
+}
+```
+
### 被关注时的自动推送消息(`msg_type=16`)
+一般仅在开启了 B 站的 “被关注回复” 功能与勾选 “被关注后,向关注我的人推送我的往期作品” 选项(仅部分用户会显示此选项)时才会发送此类型消息,紧接在自动发送的文字消息其后
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ----- | ---------------- | ------------------------------------ |
+| main_title | str | 主标题 | 一般为 `更多宝藏内容` |
+| reply_content | str | 自动回复文字内容 | 仅显示在聊天列表,在私信内容中不显示 |
+| sub_cards | array | 推送的作品列表 | 一般为3个 |
+
+`sub_cards`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 作品1 | |
+| n | obj | 作品(n+1) | |
+| …… | obj | …… | …… |
+
+`sub_cards`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | -------------------------------------------------------------- |
+| card_id | num | 作品id | 当作品为视频时:表示AV号
当作品为专栏时:表示CV号 |
+| card_type | num | 作品类型 | 1:视频 |
+| jump_url | str | 作品链接 | |
+| cover_url | str | 作品封面url | |
+| field1 | str | 作品标题 | |
+| field2 | str | 作品发布时间 | 格式:`YYYY-MM-DD` |
+| field3 | str | 字段3 | 当作品为视频时:表示作品播放量
当作品为专栏时:表示阅读量 |
+| icon3 | num | 图标3类型 | 1:播放量 |
+| field4 | str | 字段4 | 当作品为视频时:表示作品弹幕数
当作品为专栏时:表示评论数 |
+| icon4 | num | 图标4类型 | 3:弹幕数 |
+
**示例:**
```json
@@ -350,7 +492,7 @@
### 系统提示消息(`msg_type=18`)
-此类型消息仅可接收,不可直接发送
+此类型消息仅可接收,不可直接发送;由系统自动发送,但仅自己可见
根对象:
@@ -376,6 +518,8 @@
**示例:**
+若自己与对方从未聊过天,且对方未关注自己,则会有系统提示
+
```json
{
"content": "[{\"text\":\"对方主动回复或关注你前,最多发送1条消息\",\"color_day\":\"#9499A0\",\"color_nig\":\"#9499A0\"}]"
@@ -386,4 +530,43 @@
以下消息类型仅常见于粉丝团中的系统消息(`receiver_type` 为 `2` 且 `sender_uid` 为 `0`)
+### 成员入群消息(`msg_type=301`)
+### 成员退群消息(`msg_type=302`)
+
+### 粉丝团冻结消息(`msg_type=303`)
+
+### 粉丝团解散消息(`msg_type=304`)
+
+### 粉丝团开通消息(`msg_type=305`)
+
+### 成员入群消息(`msg_type=306`)
+
+以上6种消息类型均为以下数据类型结构
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | -------- | ---- |
+| group_id | num | 粉丝团id | |
+| content | str | 提示文字 | |
+
+**示例:**
+
+`社会易姐QwQ的应援团` 开通的消息
+
+```json
+{
+ "group_id": 221082140,
+ "content": "社会易姐QwQ的应援团开通啦 (>▽<)"
+}
+```
+
+成员 `wuziqian211` 进入 `社会易姐QwQ的应援团` 的消息
+
+```json
+{
+ "group_id": 221082140,
+ "content": "欢迎wuziqian211入群"
+}
+```