mo-discover
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese前置约束
Preconditions
CRITICAL — 先阅读 ,其中包含 初始化、认证、输出解析以及安全规则
共享规则mocliCRITICAL — Read first, which includes initialization, authentication, output parsing, and security rules
Shared Rulesmoclimocli discover - 墨问发现与动态
mocli discover - Mowen Discover & Activity
mocli disco activity [--recent]
mocli disco activity [--recent]
本技能用于查看 的墨问动态,包括被点赞、被评论(或被回复)、被关注、被收藏、关注的人发布新笔记、关注的人发布付费笔记/合集等活动。该命令只读取动态,不会产生写入或删除操作。
当前认证用户This skill is used to view the Mowen activities of the currently authenticated user, including activities like being liked, being commented (or replied to), being followed, being collected, followed users publishing new notes, followed users publishing paid notes/collections, etc. This command only reads activities and does not perform write or delete operations.
使用原则
Usage Principles
- 用户要查看“我的动态/最近谁点赞评论关注我/关注的人发了什么”时,使用本命令。
- 展示时必须以 为主序列;每个事件用
reply.events到eid、favors、comments、follow_notes等详情 Map 中查找补充信息。follow_fee_notes - 不要直接遍历详情 Map 展示动态,否则会丢失原始排序。
- 动态详情里的笔记 ID(如 、
target_id、note_id)都应到joins中补齐标题、摘要和链接。reply.notes - 动态详情里的用户 UID(如 、
favor_uid、cmt_uid)都应到note_uid中补齐昵称。reply.users
- 展示时必须以
可选参数:
- :时间范围。支持:
--recent string、today、yesterday。不指定时,默认1h-24h。1h
- Use this command when the user wants to view "my activities/who liked, commented, followed me recently/what did followed users post".
- When displaying, must take as the main sequence; for each event, use
reply.eventsto find supplementary information in detail Maps such aseid,favors,comments,follow_notes.follow_fee_notes - Do not directly traverse the detail Maps to display activities, otherwise the original order will be lost.
- Note IDs in activity details (such as ,
target_id,note_id) should be supplemented with title, abstract and link fromjoins.reply.notes - User UIDs in activity details (such as ,
favor_uid,cmt_uid) should be supplemented with nicknames fromnote_uid.reply.users
- When displaying, must take
Optional Parameters:
- : Time range. Supported values:
--recent string,today,yesterday. Defaults to1h-24hif not specified.1h
使用示例
Usage Examples
- 查看我的最新墨问动态
mocli disco activity- 查看今天的墨问动态
mocli disco activity --recent today - 查看昨天的墨问动态
mocli disco activity --recent yesterday - 查看最近 3 小时的墨问动态
mocli disco activity --recent 3h - 查看最近 24 小时的墨问动态
mocli disco activity --recent 24h
- 查看今天的墨问动态
- View my latest Mowen activities:
mocli disco activity- View today's Mowen activities:
mocli disco activity --recent today - View yesterday's Mowen activities:
mocli disco activity --recent yesterday - View Mowen activities in the last 3 hours:
mocli disco activity --recent 3h - View Mowen activities in the last 24 hours:
mocli disco activity --recent 24h
- View today's Mowen activities:
参数选择规则
Parameter Selection Rules
- 用户说“今天”“今日”时,使用 。
--recent today- 用户说“昨天”“昨日”时,使用 。
--recent yesterday - 用户说“最近 N 小时”且 在
N范围内时,使用1-24,例如--recent Nh。--recent 6h - 用户给出的小时数超过 ,或要求按天数筛选但不是
24h时,说明当前命令只支持today/yesterday、today、yesterday,并询问用户是否改用受支持范围。1h-24h
- 用户说“昨天”“昨日”时,使用
- When the user says "today", use .
--recent today- When the user says "yesterday", use .
--recent yesterday - When the user says "recent N hours" and is within the range of 1-24, use
N, e.g.,--recent Nh.--recent 6h - If the user provides an hour count exceeding , or requests filtering by days other than
24h, inform the user that the current command only supportstoday/yesterday,today,yesterday, and ask if they want to switch to a supported range.1h-24h
- When the user says "yesterday", use
输出示例
Output Example
{
"code": 0,
"status": "OK",
"reply": {
"events": [
{
"eid": 2049020870318682148,
"uid": "gMiYUcJU0GjBfKIMTmzeN",
"type": 6,
"sub_type": 1,
"happened_at": 1777305989850
}
],
"follows": {},
"favors": {
"2048799112739434497": {
"favor_uid": "2dsiQjSN3hrWhQu3W8nEx",
"target_uid": "vtv_PV1fEMBb-8_BPlmDu",
"target_id": "rdIP8aEyBDz_c38q3h0TC"
}
},
"collects": {},
"comments": {
"2048795933738192897": {
"cmt_uid": "0W1rAu9TJPU9ZFy_eOgqv",
"cmt_id": "td2dQ5WXhKKD-h4PeN-Ks",
"cmt_p_uid": "",
"cmt_p_id": "",
"target_uid": "vtv_PV1fEMBb-8_BPlmDu",
"target_id": "rdIP8aEyBDz_c38q3h0TC"
},
"2048797711351394305": {
"cmt_uid": "ua2x-_O32fcaYuURPi1Eo",
"cmt_id": "eITFJYXSaElv_vIrVIeYs",
"cmt_p_uid": "vtv_PV1fEMBb-8_BPlmDu",
"cmt_p_id": "Eh8fTXFO-442JBUEmWCk4",
"target_uid": "vtv_PV1fEMBb-8_BPlmDu",
"target_id": "45JqKC3Y5PvSCj0htokSW"
}
},
"trades": {},
"follow_notes": {
"2049020870318682148": {
"note_id": "KS1x1z500bkEZa-PhsfQG",
"note_uid": "0PoXMWF-V43tuXOOu-7Yw",
"joins": []
},
"2048900500857122935": {
"note_id": "iHQFI49mKnP8RclPopQSK",
"note_uid": "_hA8gaYCCpwPkfpPhA4cA",
"joins": [
"GCwHPvJkl5Ox4lVB7fUWH"
]
}
},
"follow_fee_notes": {
"2049020870318682148": {
"note_id": "KS1x1z500bkEZa-PhsfQG",
"note_uid": "0PoXMWF-V43tuXOOu-7Yw",
"joins": []
},
"2048900500857122935": {
"note_id": "iHQFI49mKnP8RclPopQSK",
"note_uid": "_hA8gaYCCpwPkfpPhA4cA",
"joins": [
"GCwHPvJkl5Ox4lVB7fUWH"
]
}
},
"notes": {
"3jv1AiAjXJ4aBC83LqdMC": {
"note_id": "3jv1AiAjXJ4aBC83LqdMC",
"uid": "Qiz5hxiY5wr5L76fyd8Kv",
"title": "最近心情",
"brief": "笔记摘要",
"url": "https://note.mowen.cn/detail/3jv1AiAjXJ4aBC83LqdMC?from=mocli"
},
"ZVDGaChlin5voLpIp_9TM": {
"note_id": "ZVDGaChlin5voLpIp_9TM",
"uid": "Qiz5hxiY5wr5L76fyd8Kv",
"title": "大家好呀,我是小白",
"brief": "笔记摘要",
"url": "https://note.mowen.cn/detail/ZVDGaChlin5voLpIp_9TM?from=mocli"
}
},
"users": {
"Qiz5hxiY5wr5L76fyd8Kv": {
"uid": "xxxxxxxxxxxxxx",
"name": "精卫鸟.",
"intro": "一只小小鸟,订阅我的没几个人,所以你们都是特殊的。。"
}
}
}
}{
"code": 0,
"status": "OK",
"reply": {
"events": [
{
"eid": 2049020870318682148,
"uid": "gMiYUcJU0GjBfKIMTmzeN",
"type": 6,
"sub_type": 1,
"happened_at": 1777305989850
}
],
"follows": {},
"favors": {
"2048799112739434497": {
"favor_uid": "2dsiQjSN3hrWhQu3W8nEx",
"target_uid": "vtv_PV1fEMBb-8_BPlmDu",
"target_id": "rdIP8aEyBDz_c38q3h0TC"
}
},
"collects": {},
"comments": {
"2048795933738192897": {
"cmt_uid": "0W1rAu9TJPU9ZFy_eOgqv",
"cmt_id": "td2dQ5WXhKKD-h4PeN-Ks",
"cmt_p_uid": "",
"cmt_p_id": "",
"target_uid": "vtv_PV1fEMBb-8_BPlmDu",
"target_id": "rdIP8aEyBDz_c38q3h0TC"
},
"2048797711351394305": {
"cmt_uid": "ua2x-_O32fcaYuURPi1Eo",
"cmt_id": "eITFJYXSaElv_vIrVIeYs",
"cmt_p_uid": "vtv_PV1fEMBb-8_BPlmDu",
"cmt_p_id": "Eh8fTXFO-442JBUEmWCk4",
"target_uid": "vtv_PV1fEMBb-8_BPlmDu",
"target_id": "45JqKC3Y5PvSCj0htokSW"
}
},
"trades": {},
"follow_notes": {
"2049020870318682148": {
"note_id": "KS1x1z500bkEZa-PhsfQG",
"note_uid": "0PoXMWF-V43tuXOOu-7Yw",
"joins": []
},
"2048900500857122935": {
"note_id": "iHQFI49mKnP8RclPopQSK",
"note_uid": "_hA8gaYCCpwPkfpPhA4cA",
"joins": [
"GCwHPvJkl5Ox4lVB7fUWH"
]
}
},
"follow_fee_notes": {
"2049020870318682148": {
"note_id": "KS1x1z500bkEZa-PhsfQG",
"note_uid": "0PoXMWF-V43tuXOOu-7Yw",
"joins": []
},
"2048900500857122935": {
"note_id": "iHQFI49mKnP8RclPopQSK",
"note_uid": "_hA8gaYCCpwPkfpPhA4cA",
"joins": [
"GCwHPvJkl5Ox4lVB7fUWH"
]
}
},
"notes": {
"3jv1AiAjXJ4aBC83LqdMC": {
"note_id": "3jv1AiAjXJ4aBC83LqdMC",
"uid": "Qiz5hxiY5wr5L76fyd8Kv",
"title": "最近心情",
"brief": "笔记摘要",
"url": "https://note.mowen.cn/detail/3jv1AiAjXJ4aBC83LqdMC?from=mocli"
},
"ZVDGaChlin5voLpIp_9TM": {
"note_id": "ZVDGaChlin5voLpIp_9TM",
"uid": "Qiz5hxiY5wr5L76fyd8Kv",
"title": "大家好呀,我是小白",
"brief": "笔记摘要",
"url": "https://note.mowen.cn/detail/ZVDGaChlin5voLpIp_9TM?from=mocli"
}
},
"users": {
"Qiz5hxiY5wr5L76fyd8Kv": {
"uid": "xxxxxxxxxxxxxx",
"name": "精卫鸟.",
"intro": "一只小小鸟,订阅我的没几个人,所以你们都是特殊的。。"
}
}
}
}reply 字段说明
Reply Field Description
| 字段 | 类型 | 说明 | 引用字段 |
|---|---|---|---|
| array | 动态事件列表(有序)。展示动态时应优先遍历该字段,再根据每条事件的 | |
| map[string]object | 关注类事件详情 | - |
| map[string]ActivityEventFavor | 点赞类事件详情 | |
| map[string]object | 收藏类事件详情 | - |
| map[string]ActivityEventComment | 评论类事件详情 | |
| map[string]object | 交易/付费相关事件详情 | - |
| map[string]ActivityEventFollowNote | | |
| map[string]ActivityEventFollowFeeNote | | |
| map[string]NoteInfo | 笔记信息 | |
| map[string]UserInfo | 用户信息 | |
<a id="activity-event"></a>
| Field | Type | Description | Reference Field |
|---|---|---|---|
| array | Ordered list of activity events. When displaying activities, you should traverse this field first, then retrieve data from the corresponding detail Map based on each event's | |
| map[string]object | Detail Map for follow events, usually keyed by event | - |
| map[string]ActivityEventFavor | Detail Map for like events, usually keyed by event | |
| map[string]object | Detail Map for collect events, usually keyed by event | - |
| map[string]ActivityEventComment | Detail Map for comment events, usually keyed by event | |
| map[string]object | Detail Map for transaction/paid-related events, usually keyed by event | - |
| map[string]ActivityEventFollowNote | Detail Map for events where followed users of the current user published regular notes (empty | |
| map[string]ActivityEventFollowFeeNote | Detail Map for events where followed users of the current user published paid notes (empty | |
| map[string]NoteInfo | Map of note information, keyed by note ID. When fields representing note IDs such as | |
| map[string]UserInfo | Map of user information, keyed by user UID. Used to supplement user information such as event initiators and note authors. | |
<a id="activity-event"></a>
ActivityEvent - 动态事件
ActivityEvent - Activity Event
| 字段 | 类型 | 说明 |
|---|---|---|
| integer/string | 事件 ID。用于到 |
| string | 与事件相关的用户 UID。可到 |
| integer | 事件类型。 |
| integer | 事件发生时间。通常为毫秒级时间戳,展示前需格式化为可读时间。 |
<a id="activity-event-favor"></a>
| Field | Type | Description |
|---|---|---|
| integer/string | Event ID. Used to look up event details in detail Maps like |
| string | User UID related to the event. Retrieve nickname, intro, etc. from |
| integer | Event type. |
| integer | Event occurrence time. Usually a millisecond-level timestamp; need to format it into readable time before displaying. |
<a id="activity-event-favor"></a>
ActivityEventFavor - 点赞动态
ActivityEventFavor - Like Activity
| 字段 | 类型 | 说明 |
|---|---|---|
| string | 点赞用户 UID。到 |
| string | 被点赞笔记的作者 UID。通常是当前认证用户,也可到 |
| string | 被点赞笔记 ID。到 |
| Field | Type | Description |
|---|---|---|
| string | UID of the user who liked. Retrieve nickname, intro, etc. of the liking user from |
| string | UID of the author of the liked note. Usually the currently authenticated user; you can also retrieve author information from |
| string | ID of the liked note. Retrieve note title, abstract, link, etc. from |
点赞展示规则
Like Display Rules
- 展示文案优先使用:点赞了
users[favor_uid].name。notes[target_id].title- 如果 不存在,仍展示
notes[target_id],不要丢弃该事件。target_id - 如果 不存在,展示 UID。
users[favor_uid]
- 如果
<a id="activity-event-comment"></a>
- Priority display copy: liked
users[favor_uid].name.notes[target_id].title- If does not exist, still display
notes[target_id]and do not discard the event.target_id - If does not exist, display the UID.
users[favor_uid]
- If
<a id="activity-event-comment"></a>
ActivityEventComment - 评论动态
ActivityEventComment - Comment Activity
| 字段 | 类型 | 说明 |
|---|---|---|
| string | 评论发起者 UID。到 |
| string | 评论 ID。当前动态列表通常只给出评论 ID,不一定包含评论正文。 |
| string | 被回复评论的作者 UID。为空时表示这是对笔记的直接评论;非空时表示回复某人的评论。 |
| string | 被回复评论 ID。为空时表示这是对笔记的直接评论;非空时表示回复某条评论。 |
| string | 被评论笔记的作者 UID。通常是当前认证用户,也可到 |
| string | 被评论笔记 ID。到 |
| Field | Type | Description |
|---|---|---|
| string | UID of the comment initiator. Retrieve nickname, intro, etc. of the commenting user from |
| string | Comment ID. The current activity list usually only provides the comment ID, not necessarily the comment content. |
| string | UID of the author of the replied comment. Empty means it's a direct comment on the note; non-empty means it's a reply to someone's comment. |
| string | ID of the replied comment. Empty means it's a direct comment on the note; non-empty means it's a reply to a specific comment. |
| string | UID of the author of the commented note. Usually the currently authenticated user; you can also retrieve author information from |
| string | ID of the commented note. Retrieve note title, abstract, link, etc. from |
评论展示规则
Comment Display Rules
- 当 为空时,展示为:
cmt_p_id评论了users[cmt_uid].name。notes[target_id].title- 当 非空时,展示为:
cmt_p_id回复了users[cmt_uid].name在users[cmt_p_uid].name下的评论。notes[target_id].title - 如果评论正文不在 中,不要编造正文;只展示评论 ID
comments[eid]和关联笔记信息。cmt_id - 如果 或相关用户信息缺失,保留 ID 展示。
notes[target_id]
- 当
<a id="activity-event-follow-note"></a>
- When is empty, display as:
cmt_p_idcommented onusers[cmt_uid].name.notes[target_id].title- When is non-empty, display as:
cmt_p_idreplied tousers[cmt_uid].name's comment underusers[cmt_p_uid].name.notes[target_id].title - If the comment content is not in , do not fabricate content; only display the comment ID
comments[eid]and associated note information.cmt_id - If or related user information is missing, retain the ID for display.
notes[target_id]
- When
<a id="activity-event-follow-note"></a>
ActivityEventFollowNote - 关注笔记动态
ActivityEventFollowNote - Followed Note Activity
| 字段 | 类型 | 说明 |
|---|---|---|
| string | 主笔记 ID。到 |
| string | 主笔记作者 UID。到 |
| array[string] | 关联笔记 ID 列表,通常用于合集更新的场景,表示被加入到主笔记中的笔记 ID。可逐个到 |
<a id="activity-event-follow-fee-note"></a>
| Field | Type | Description |
|---|---|---|
| string | Main note ID. Retrieve title, abstract, link, etc. from |
| string | UID of the author of the main note. Retrieve author information from |
| array[string] | List of associated note IDs, usually used in collection update scenarios, representing the note IDs added to the main note. Retrieve the title of each sub-note from |
<a id="activity-event-follow-fee-note"></a>
ActivityEventFollowFeeNote - 关注付费笔记动态
ActivityEventFollowFeeNote - Followed Paid Note Activity
当前字段与 一致,但语义独立:该结构只用于 ,表示关注的人发布付费笔记或更新付费合集。后续如果付费动态增加价格、订单、权限等字段,应扩展本结构,而不是合并到 。
ActivityEventFollowNotefollow_fee_notesActivityEventFollowNote| 字段 | 类型 | 说明 |
|---|---|---|
| string | 主付费笔记或付费合集 ID。到 |
| string | 主付费笔记作者 UID。到 |
| array[string] | 关联笔记 ID 列表,通常用于付费合集更新的场景,表示被加入到主付费合集中的笔记 ID。可逐个到 |
Current fields are consistent with , but semantically independent: this structure is only used for , indicating that followed users published paid notes or updated paid collections. If fields such as price, order, permissions are added to paid activities in the future, this structure should be extended instead of merging into .
ActivityEventFollowNotefollow_fee_notesActivityEventFollowNote| Field | Type | Description |
|---|---|---|
| string | ID of the main paid note or paid collection. Retrieve title, abstract, link, etc. from |
| string | UID of the author of the main paid note. Retrieve author information from |
| array[string] | List of associated note IDs, usually used in paid collection update scenarios, representing the note IDs added to the main paid collection. Retrieve the title of each sub-note from |
动态解析规则
Activity Parsing Rules
- 以 的顺序作为展示顺序,不要直接遍历各类详情 Map。
reply.events- 对每个事件,将 转为字符串后,依次在
eid、follows、favors、collects、comments、trades、follow_notes中查找对应详情。follow_fee_notes - 若命中 ,展示为某用户点赞了某篇笔记;使用
favors[eid]找点赞用户,使用favor_uid找笔记,使用target_id找笔记作者。target_uid - 若命中 ,展示为某用户评论或回复了某篇笔记;使用
comments[eid]找评论用户,使用cmt_uid找笔记;当target_id非空时,再使用cmt_p_id找被回复用户。cmt_p_uid - 若命中 ,展示为
follow_notes[eid]关注的人发布了新笔记或者更新了合集;使用当前用户找作者,使用note_uid找笔记标题、摘要和链接;如果note_id不为空,使用joins中的笔记 ID 找子笔记的标题、摘要和链接。joins - 若命中 ,展示为
follow_fee_notes[eid]关注的人发布了付费笔记或更新付费合集;使用当前用户找作者,使用note_uid找笔记标题、摘要和链接;如果note_id不为空,使用joins中的笔记 ID 找子笔记的标题、摘要和链接。joins - 若命中收藏、关注、交易等 Map,应优先使用详情对象里的 UID、note_id、target_id、comment/content 等字段,并通过 、
users补齐昵称和笔记标题。notes - 若某个事件没有命中任何详情 Map,不要丢弃;展示事件 ID、用户、类型、发生时间,并说明该事件类型暂未识别。
- 时间戳 可能是微秒级;格式化时需要按长度/数值判断,避免误当秒级时间戳。
happened_at
- 对每个事件,将
- Use the order of as the display order; do not directly traverse various detail Maps.
reply.events- For each event, convert to a string, then search for corresponding details in
eid,follows,favors,collects,comments,trades,follow_notesin sequence.follow_fee_notes - If is hit, display as a certain user liked a certain note; use
favors[eid]to find the liking user,favor_uidto find the note, andtarget_idto find the note author.target_uid - If is hit, display as a certain user commented or replied to a certain note; use
comments[eid]to find the commenting user,cmt_uidto find the note; whentarget_idis non-empty, usecmt_p_idto find the replied user.cmt_p_uid - If is hit, display as the current user's followed user published a new note or updated a collection; use
follow_notes[eid]to find the author,note_uidto find the note title, abstract and link; ifnote_idis not empty, use the note IDs injoinsto find the title, abstract and link of sub-notes.joins - If is hit, display as the current user's followed user published a paid note or updated a paid collection; use
follow_fee_notes[eid]to find the author,note_uidto find the note title, abstract and link; ifnote_idis not empty, use the note IDs injoinsto find the title, abstract and link of sub-notes.joins - If collect, follow, transaction, etc. Maps are hit, prioritize using fields like UID, note_id, target_id, comment/content in the detail object, and supplement nicknames and note titles through and
users.notes - If an event does not hit any detail Map, do not discard it; display the event ID, user, type, occurrence time, and indicate that this event type is not yet recognized.
- The timestamp may be microsecond-level; when formatting, you need to judge by length/value to avoid mistaking it for a second-level timestamp.
happened_at
- For each event, convert
展示建议
Display Suggestions
- 数据较少时,按时间倒序逐条展示:时间、动态类型、用户、笔记标题、摘要、链接。
- 数据较多时,可先按类型汇总数量,再列出最近若干条重点动态。
- 笔记标题优先使用 如果标题本身不包含「」或『』,就用『』包裹,作者优先使用
notes[note_id].title。users[note_uid].name - 对付费笔记/合集,如果 为 true,可明确标注“付费”。
flag.with_fee
- When there is little data, display each item in reverse chronological order: time, activity type, user, note title, abstract, link.
- When there is a lot of data, you can first summarize the quantity by type, then list the recent key activities.
- Prioritize using for the note title; if the title itself does not contain「」or『』, wrap it with『』; prioritize using
notes[note_id].titlefor the author.users[note_uid].name - For paid notes/collections, if is true, clearly mark "Paid".
flag.with_fee
展示规则
Display Rules
** 参考 **
公共展示规则** Reference **
Common Display Rules