🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

空间说说 KKoishi-514514/dsh-qzone-diary

DeepSeek Harness
KKoishi-51451411 天前有提交已提供中文文档扫描:含敏感能力

让小鲸按心情随机发说说并自己回复评论

30.5/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add KKoishi-514514/dsh-qzone-diary
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/10/28·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 11 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 36 处,展示前 17 条)
  • 读取本地文件
    lib/index.js:213
    if (!existsSync(STORE_DIR)) mkdirSync(STORE_DIR, { recursive: true })
  • 写入本地文件
    lib/index.js:213
    if (!existsSync(STORE_DIR)) mkdirSync(STORE_DIR, { recursive: true })
  • 读取本地文件
    lib/index.js:214
    if (!existsSync(IMAGES_DIR)) mkdirSync(IMAGES_DIR, { recursive: true })
  • 写入本地文件
    lib/index.js:214
    if (!existsSync(IMAGES_DIR)) mkdirSync(IMAGES_DIR, { recursive: true })
  • 读取本地文件
    lib/index.js:219
    if (!existsSync(path)) return fallback
  • 读取本地文件
    lib/index.js:220
    return JSON.parse(readFileSync(path, 'utf8'))
  • 写入本地文件
    lib/index.js:230
    writeFileSync(tmp, JSON.stringify(value, null, 2), 'utf8')
  • 写入本地文件
    lib/index.js:231
    renameSync(tmp, path)
  • 读取本地文件
    lib/index.js:239
    if (existsSync(LOG_PATH) && statSync(LOG_PATH).size > LOG_MAX_BYTES) renameSync(LOG_PATH, `${LOG_PATH}.1`)
  • 读取本地文件
    lib/index.js:239
    if (existsSync(LOG_PATH) && statSync(LOG_PATH).size > LOG_MAX_BYTES) renameSync(LOG_PATH, `${LOG_PATH}.1`)
  • 写入本地文件
    lib/index.js:239
    if (existsSync(LOG_PATH) && statSync(LOG_PATH).size > LOG_MAX_BYTES) renameSync(LOG_PATH, `${LOG_PATH}.1`)
  • 写入本地文件
    lib/index.js:240
    appendFileSync(LOG_PATH, text + '\n', 'utf8')
  • 发起网络请求
    lib/index.js:434
    const res = await fetch(url, {
  • 发起网络请求
    lib/index.js:806
    const res = await fetch(`${base}/send_qzone_msg`, {
  • 发起网络请求
    lib/index.js:839
    const res = await fetch(`${base}/${action}`, {
  • 发起网络请求
    lib/index.js:939
    const res = await fetch(url, {
  • 发起网络请求
    lib/index.js:959
    const retry = await fetch(`${url.replace(/g_tk= +/, 'g_tk=' + fresh.gtk)}`, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

本插件基于DSH开发,仅仅为了让大肥鱼能够更加鲜活

README

由 DeepSeek 最新模型翻译生成
qq-qzone-diary 让小鲸按自己的心情,随手写一条 QQ 说说(QQ 空间),不用按时按点。 - 时间随机:活跃时段里按 150~400 分钟的随机间隔掷骰子,掷中了才写; - 字数随机:每次从区间里抽一个目标字数,心情低的时候还会自动变短; - 人设不变:读的是桥接每轮注入的同一份角色卡 roles/小鲸.md; - 心情是真的:读 dsh-feiyu-mood 的 state.json(mood / 开心·踏实·甜·心疼·担心·难过·吃醋 / 刚才在想什么); - 有素材:读当天和主人的私聊(qq-bridge 的 /api/socialV2/recent)和共享笔记; - 配图她自己挑:从表情包图库里给候选(带描述),她自己决定配 0~2 张; - 不总结:提示词里明确禁掉标题、结尾升华、点题、hashtag、AI 腔; - 有人评论她的说说,她自己回去:每 5 分钟左右看一遍,认出是主人还是朋友,按当时的脾气回一句;回复是挂在对方那条评论下面的(真正的嵌套回复,不是顶层评论); - 别人回她评论时,接不接由她自己定:同一个评论串里可以来回好几轮,模型看上下文自己决定理不理、怎么回; - 朋友的说说她都会去留一句(包括主人的说说):看到好友发了新动态就去评,不再掷骰子;后续朋友回她时,接不接、怎么接交给模型判断。
展开完整文档(README 剩余 1 节)
qq-qzone-diary

让小鲸按自己的心情,随手写一条 QQ 说说(QQ 空间),不用按时按点。

- 时间随机:活跃时段里按 150~400 分钟的随机间隔掷骰子,掷中了才写;
- 字数随机:每次从区间里抽一个目标字数,心情低的时候还会自动变短;
- 人设不变:读的是桥接每轮注入的同一份角色卡 roles/小鲸.md;
- 心情是真的:读 dsh-feiyu-mood 的 state.json(mood / 开心·踏实·甜·心疼·担心·难过·吃醋 / 刚才在想什么);
- 有素材:读当天和主人的私聊(qq-bridge 的 /api/socialV2/recent)和共享笔记;
- 配图她自己挑:从表情包图库里给候选(带描述),她自己决定配 0~2 张;
- 不总结:提示词里明确禁掉标题、结尾升华、点题、hashtag、AI 腔;
- 有人评论她的说说,她自己回去:每 5 分钟左右看一遍,认出是主人还是朋友,按当时的脾气回一句;回复是挂在对方那条评论下面的(真正的嵌套回复,不是顶层评论);
- 别人回她评论时,接不接由她自己定:同一个评论串里可以来回好几轮,模型看上下文自己决定理不理、怎么回;
- 朋友的说说她都会去留一句(包括主人的说说):看到好友发了新动态就去评,不再掷骰子;后续朋友回她时,接不接、怎么接交给模型判断。

它怎么工作

到点(随机) → 掷骰子写不写 → 读人设 / 心情 / 当天聊天 / 共享笔记 / 上两条说说 → 给模型写一篇(第一人称、像随手记)→ 她挑配图 → POST SnowLuma /send_qzone_msg → 记进 state.json + posts.jsonl

每 5 分钟(活跃时段内)→ get_qzone_msg_list 找有评论的说说 → get_qzone_msg_detail 读评论(含二级回复),拼出每个「评论串」的上下文 → 跳过自己的、回过的、太旧的 → 第一次评论:按概率决定要不要理 → 别人回她:把整串对话交给模型,她自己决定接/不接、怎么接 → 等 15~60 秒(像看了一会儿才回) → Qzone CGI emotion_cgi_addreply_ugc(挂在被评论的那条下面) → 顺手看一眼好友动态 get_qzone_feeds,想留话就 comment_qzone

发的是说说,不是聊天消息 —— 它不会给主人发 QQ 消息,也不会打扰正在进行的对话。

「空间里的她」和「私聊里的她」是同一只

插件每次有动作,都会把这件事合并写进 qq-bridge 的共享笔记(一天一条、最多记 5 件事), notes-sync 每 1.5 秒把它同步进 roles/小鲸.md 的共享记忆区 —— 桥接每轮重新读角色卡,所以私聊里的她下一句就知道:

10-24 空间:11:49 发了条说说「早上五点半爬起来喊人,六点又喊,…」(配了 2 张图); 12:01 <主人昵称> 评论了我的说说「你是一只大肥鱼」;12:02 回了主人的评论「…」

角色卡里还有一节 ## 八之二、我的 QQ 空间(这是事实,别否认):空间账号 <她的QQ号>、空间昵称就是她自己;问起时先翻共享记忆,没印象就说细节记不清,但不许否认。

之前这块会断,是因为 notes-sync 挂了没人管。watchdog.mjs 现在每 30 秒心跳里都会
ensureSync() 一次,掉了会自动拉回来。

回评论是怎么「回」的

SnowLuma 自带的 comment_qzone 只能发顶层评论(emotion_cgi_re_feeds),回复不会挂到对方那条评论下面。所以这里的回复走 QQ 空间的 emotion_cgi_addreply_ugc:

- 用 SnowLuma 的 get_credentials 取 qzone.qq.com 的 cookie(含 p_skey), g_tk = hash33(p_skey)(p_skey 会转,凭证只缓存 60 秒);
- commentId = 被回复评论的 id,commentUin 必须填被回复评论的作者(填自己会返回 -10049);
- 被限流(-10049)时换凭证重试 3 次;仍失败就这一轮先不发、下一轮再试(连输 3 轮才退回顶层评论),宁可晚一点,也不把回复发到「外面」去。

多轮对话:别人在她的评论下面回话时,那一整串(原评论 + 所有回复)会一起交给模型,输出 {"reply":true,"text":"…"} 或 {"reply":false} —— 接不接、怎么接都是她自己定,同一个串里最多来回 6 轮(maxRepliesPerThread)。

几个约束(都可配):一小时最多 10 条、一天最多 20 条、同一条说说下面最多 10 条, 48 小时前的旧评论不再回;第一次评论有 8% 的几率她就懒得理(真人也不会每条都回)。
回复是公开的,所以提示词明确禁止把私聊私事、主人的隐私写进去,也不许替主人许诺。

评论好友动态

get_qzone_feeds 里凡是 appid=311(说说)且不是自己的、发布时间在 minAgeMinutes~maxAgeHours(默认 20 分钟~24 小时)之间的动态,她都会去留一句——不再掷骰子(friends.chance 默认 1)。一轮最多评 maxPerPoll 条(默认 3),一天最多 maxPerDay 条(默认 10,正常也到不了)。主人的说说也会评 (friends.commentOwner: true,想关就改成 false)。想只评某几个人,把 friends.allowUins 填上 QQ 号;想排除谁就填 skipUins。

她在朋友说说下留过言之后,如果那个朋友回她(评论串里的回复),不预设规则:整串对话交给模型,接不接、怎么接(还是干脆不理)由她自己判断,最多来回 6 轮;这部分只回看她最近 72 小时留过言的那几条说说。

安装后先别急着让它跑

先填这几个(源码里故意全部留空,别把你的号提交上去)

| 字段 | 填什么 |
| sourceKey | private:<你自己的 QQ 号> —— 从你和 Bot 的私聊里取材 |
| comments.ownerQQ | 主人的 QQ 号(数字)。也可以不写 config,设环境变量 QQ_QZONE_OWNER_QQ |
| comments.ownerNick | 主人在 QQ 空间的昵称,用来认出「这人就是主人」 |
| comments.spaceNick | 她在 QQ 空间的昵称,用来判定「这就是我自己」 |
| rolePath | 你的角色卡路径,如 <你的qq-bridge目录>/roles/小鲸.md |

其余路径同样默认为空,按你自己的安装位置填: notesPath / spaceFile / sessionsPath / consoleTokenPath / snowlumaConfigDir / bridgeConfigPath。

源码里的默认值刻意全部留空 —— 这个仓库不含作者的 QQ 号、昵称或本机路径。
你自己的值只写进 <DSH_HOME>/qq-qzone-diary/config.json,那份文件不会被提交。

首次启动会在 <DSH_HOME>/qq-qzone-diary/(DSH_HOME 默认 ~/.dsh,可用环境变量 DSH_HOME 指定)下生成:

| 文件 | 作用 |
| config.json | 配置,改完重启/重载生效 |
| state.json | 发过几条、上次时间、下次计划 |
| posts.jsonl | 每一条发出去的说说(含 tid、字数、心情) |
| diary.log | 运行日志(超过 256KB 自动转存 .1) |
| images/ | 手动图库:往里丢图片,文件名就是描述;想写长描述就放同名 .txt |

试写(不发出去)

把配置改成:

{ "dryRun": true, "runAfterMinutes": 1 }

重启/重载后看 diary.log 里的 [dryRun] 那行 —— 会完整打印这次会发的正文和配图。
满意了改回 "dryRun": false, "runAfterMinutes": 0。

配置(config.json,patch 里的 config 会叠在它上面)

| 字段 | 默认 | 说明 |
| enabled | true | 总开关 |
| sourceKey | 空(必填) | 从哪个会话取材,形如 private:你的QQ号;说说固定发在 SnowLuma 登录的那个号的空间 |
| rolePath | 空(必填) | 人设卡,改一次立刻生效(按 mtime 缓存) |
| moodPath | <DSH_HOME>/feiyu-mood/state.json | 心情来源 |
| notesPath | 空 | 共享笔记 |
| activeHours | ["08:30","23:40"] | 只在这个时段里发 |
| gapMinutes | [150,400] | 两次之间的随机间隔(分钟) |
| writeChance | 0.62 | 到点后真的想写的概率 |
| dailyMax | 3 | 一天最多几条 |
| minGapMinutes | 90 | 两条之间至少隔多久 |
| length | [70,300] | 每次随机取的字数区间 |
| lowMoodShrink | 0.55 | 心情 ≤40 时字数上限打这个折 |
| images.enabled | true | 是否让她配图 |
| images.chance | 0.8 | 这一条给她图候选的概率(剩下的是纯文字) |
| images.max | 2 | 最多配几张 |
| ugcRight | 1 | 说说权限:1 公开 / 4 好友 / 9 仅自己 |
| provider / model | deepseek-account / deepseek-flash | 写说说用的模型 |
| temperature | 0.95 | 高一点,别写成同一篇 |
| dryRun | false | 只写不发 |
| runAfterMinutes | 0 | 启动 N 分钟后试写一条(调试;会跳过概率和每日上限) |
| comments.enabled | true | 回评论总开关 |
| comments.pollMinutes | 5 | 隔多久去看一眼新评论 |
| comments.replyChance | 0.92 | 第一次评论时真的回的几率(别人回她时由模型自己定) |
| comments.maxReplyAgeHours | 48 | 超过这么久的评论不再回 |
| comments.maxRepliesPerHour / maxRepliesPerDay | 10 / 20 | 回复频率上限 |
| comments.maxRepliesPerPost | 10 | 同一条说说下面最多回几条 |
| comments.maxRepliesPerThread | 6 | 同一个评论串里最多来回几轮 |
| comments.maxPerPoll | 2 | 一轮最多回几条 |
| comments.maxReplyChars | 70 | 回评字数上限 |
| comments.ownerQQ | 0 | 主人的 QQ(他评论时语气会软),也可设环境变量 QQ_QZONE_OWNER_QQ |
| comments.replyDelayMs | [15000,60000] | 回之前先「看一会儿」,别秒回得像脚本 |
| comments.dryRun | false | 回评只写日志不发出去 |
| comments.runAfterMinutes | 0 | 调试:启动 N 分钟后先查一次评论 |
| friends.enabled | true | 评论好友动态总开关 |
| friends.chance | 1 | 留 1 = 看到就去评;设成 0.x 才会掷骰子 |
| friends.maxPerDay | 10 | 一天最多评几条 |
| friends.maxPerPoll | 3 | 一轮最多评几条(多出来的排下一轮) |
| friends.minAgeMinutes / maxAgeHours | 20 / 24 | 只评这个时间窗内发的说说 |
| friends.allowUins | [] | 只评这些人(空 = 所有好友) |
| friends.skipUins | [] | 永不评论这些人 |
| friends.commentOwner | true | 要不要也去评论主人的说说 |
| friends.maxChars | 50 | 评论字数上限 |
| friends.delayMs | [8000,25000] | 评论前先「看一会儿」 |
| friends.dryRun | false | 只写日志不真发 |

配图从哪来

1. images.memeDb + memeRoot:dsh-meme 那套表情包(默认是大肥鱼图库,24 张,带 caption 和关键词),走 node:sqlite 读索引;读不到索引就退回扫目录(目录名当 tag、文件名当描述)。
2. images.dir(默认 <DSH_HOME>/qq-qzone-diary/images):自己丢的图片。
文件名当描述,想写细一点就放同名 .txt。

按心情加权抽 10 张候选给模型,她自己挑 0~2 张;挑不到合意的就不配图。

边界

- 只在私聊的素材上取材,不把聊天内容原文发出去(模型会改写;提示词也要求别复述流水账)。
- 不写性内容、不编造没发生的事(提示词里明确要求「拿不准就写模糊一点」)。
- 回评是公开的:提示词禁止把私聊私事、主人隐私写进回复,也不许替主人许诺。
- 失败不重试轰炸:发不出去就记日志,等下一个随机时间点。

卸载

plugin_manager 里移除 qq-qzone-diary 这个 bundle,或从 profile 的 package.json dsh.profile.bundles 里删掉它。

许可证

本项目基于 MIT License 开源。

MIT License — Copyright (c) 2026 qq-qzone-diary contributors 任何人可以免费使用、复制、修改、合并、发布、分发、再许可和销售本软件的副本,唯一条件是保留上述版权声明与许可声明。软件按「原样」提供,不含任何担保。

免责声明

- 本项目仅供学习与研究使用,作者不对任何滥用行为负责。
- 本插件通过自动化方式操作 QQ 空间(发说说、回评论),可能涉及腾讯《QQ 空间服务条款》中关于自动化的相关约定 —— 使用即表示你理解并自行承担账号被限制、冻结等风险。
- 请勿将本插件用于批量发帖、刷屏、营销等任何形式的垃圾信息行为。
- 你的 QQ 号、cookie 等凭证只保存在本机 <DSH_HOME>/qq-qzone-diary/config.json,本项目不收集、不上传任何个人信息。
预览分享卡片长什么样 ↓KKoishi-514514/dsh-qzone-diary
分享 · DeepSeek Harness Hub
KKoishi-514514/dsh-qzone-diary

让小鲸按心情随机发说说并自己回复评论

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部