欢迎使用 QQ空间助手插件!本插件可以让你的 AI 机器人拥有完整的 QQ 空间管理能力:自动/手动发布说说、评论、点赞、回复评论、查看动态、删除说说,并且能与 KiraOS 记忆系统无缝结合,让 AI 像记住聊天一样记住自己在空间的活动。最重要的是,定时发布、评论、回复任务通过群聊/私聊指令触发,由 AI 自主生成内容,自然又智能。
- ✅ 全功能 QQ 空间操作:发说说、看说说、点赞、评论、回复评论、删除说说,一应俱全。
- ✅ 自然语言触发:AI 能听懂你的指令,如“发个说说配这张图”。
- ✅ 智能定时任务:每天/每小时定时向指定群聊/私聊发送指令,AI 根据聊天内容生成说说、评论或回复,并由 AI 自主决定是否记入记忆。
- ✅ 记忆系统集成:通过 KiraOS或任何调用memory update的记忆工具,AI 能记住自己发过什么,后续对话可以自然提起。
- ✅ 自动配图:发说说时如果未指定图片,插件会自动从当前会话的最近图片中挑选一张。
- ✅ 全自动 Cookie 管理:彻底废弃手动复制 Cookie 的方式,仅需配置适配器名称,插件自动从 LLOneBot/NapCat 获取最新 Cookie,配合后台保活机制可长期稳定运行。
- ✅ 仅需 WebSocket:不再依赖 OneBot HTTP 服务,只需 WebSocket 连接即可正常工作(KiraAI 默认)。
- ✅ 兼容 LLOneBot 与 NapCat:代码已合并通用部分,适配器名称正确即可自动适应。
- ✅ 灵活的任务目标:定时任务可以从多个群聊或私聊中随机选择一个执行,避免单一目标。
- ✅ 时间感知:AI 查看说说时会看到每条动态的发布时间,能生成更真实的回复(如“刚刚”、“昨天”)。
- ✅ 纯小白友好:所有配置都在 WebUI 完成,无需修改代码即可使用。
| 功能 | 说明 | 触发方式 |
|---|---|---|
| 发说说 | 发布文字+图片到自己的空间 | 用户指令 / 定时任务 |
| 看说说 | 查看好友或指定用户的说说 | 用户指令 |
| 点赞 | 给指定说说点赞 | 用户指令 / 定时任务 |
| 评论 | 评论指定说说 | 用户指令 / 定时任务 |
| 回复评论 | 回复别人在你说说下的评论 | 用户指令 / 定时任务 |
| 删除说说 | 删除自己发布的一条说说 | 用户指令 |
| 记忆记录 | 发布/评论后 AI 可主动调用记忆工具记录 | AI 自主 |
- 已成功运行 KiraAI 机器人(能正常聊天)。
- Python 3.10+ 且已安装依赖库(见下文)。
- OneBot 协议实现(如 LLOneBot 或 NapCat)已正确配置并连接到 KiraAI(通常使用WebSocket,KiraAI 默认配置即可)。无需额外开启 HTTP 服务。
- 你的 QQ 号(用于登录 OneBot)以及一个或多个用于接收定时任务的群聊/私聊。
将插件文件夹 qzone_plugin 放入 KiraAI 主目录下的 data/plugins/ 中。最终目录结构应为:
KiraAI-main/
data/
plugins/
qzone_plugin/
__init__.py (空文件)
manifest.json
schema.json
main.py
qzone/ (从原项目复制的核心模块)
...(一堆 .py 文件)
本插件需要一些额外的 Python 库,请在 KiraAI 的虚拟环境中安装。打开命令行,进入 KiraAI 主文件夹,激活虚拟环境后执行以下命令:
cd C:\Users\你的用户名\Desktop\KiraAI-main(请根据自己的kira项目主目录修改!)
.venv\Scripts\activate
pip install apscheduler beautifulsoup4 json5 httpx aiohttp说明:v1.30 已彻底移除旧的无用依赖(如 selenium),仅保留必要的库。
各依赖的作用:
apscheduler:定时任务管理beautifulsoup4:解析 HTML,用于获取说说详情json5:解析非标准 JSON 响应httpx:异步 HTTP 请求(仅用于保活任务,与 OneBot 通信已改用 WebSocket)
重启机器人,插件会自动加载。观察控制台日志,应看到类似:
QQ空间插件初始化完成,当前账号: 12345678
成功从 LLOneBot 获取 Cookie
登录保持成功
如果没有也不用担心,可实际命令ai执行QQ空间操作(例如跟她说“看看你最近的几条说说”),成功执行即正常。
插件的大部分配置项都可以在 WebUI 中直接修改。访问 http://127.0.0.1:5267,进入插件管理页面,找到“QQ空间助手”,点击“配置”。
以下是各配置项的含义(基于 v1.30):
| 配置项 | 类型 | 必填 | 说明 |
|---|---|---|---|
cookies_str |
text | 否 | QQ空间登录 Cookie(如果启用自动刷新则无需填写)。v1.30 推荐使用自动刷新。 |
qq_ada |
string | 否 | QQ 适配器名称。如果你的 KiraAI 有多个适配器(例如同时连接 LLOneBot 和 NapCat),请指定平台为 QQ 的适配器名称;留空则插件自动查找第一个平台为 QQ 的适配器。 |
auto_refresh_cookie |
boolean | 否 | 是否启用自动刷新 Cookie(通过已连接的适配器获取),默认 true。建议开启。 |
master_ids |
string | 否 | 主人QQ号,多个用英文逗号分隔。只有这些QQ号才能使用QQ空间敏感工具(发说说、评论、点赞等)。查看空间默认所有用户可用 |
timeout |
int | 否 | HTTP请求超时时间(秒),默认10。 |
temp_dir |
string | 否 | 临时文件存放目录,默认data/temp。 |
auto_publish_schedule |
string | 否 | 自动发布说说定时。支持两种格式:Cron表达式(如 0 8 * * *)或间隔表达式(如 2h、2h/30m)。留空则禁用。 |
auto_comment_schedule |
string | 否 | 自动评论定时,格式同上。 |
auto_reply_schedule |
string | 否 | 自动回复评论定时,格式同上。 |
auto_reply_enabled |
boolean | 否 | 是否开启自动回复评论(需配置 auto_reply_schedule)。 |
task_group_ids |
string | 否 | 通用任务指令群号列表(多个用英文逗号分隔)。用于发布、评论、回复。 |
task_private_ids |
string | 否 | 通用任务指令个人QQ号列表(多个用英文逗号分隔)。 |
task_message_style |
enum | 否 | 通用任务消息样式:silent=不保留(无痕),notify=保留消息。 |
auto_publish_group_id |
string | 否 | (后台模式)用于获取聊天话题和图片的群号。 |
auto_publish_user_id |
string | 否 | (后台模式)用于获取聊天话题和图片的个人QQ号。 |
auto_publish_image_prob |
float | 否 | 后台模式自动发布时配图的概率(0-1),默认0.5。 |
max_comments_per_cycle |
int | 否 | 每次自动评论最多评论多少条说说(后台模式有效,指令模式下由AI自主决定)。 |
max_replies_per_cycle |
int | 否 | 每次自动回复最多处理多少条新评论(后台模式有效)。 |
like_when_comment |
boolean | 否 | 自动评论时是否同时点赞,默认false。 |
注意:v1.30 已移除
llonebot_host、llonebot_port、access_token等配置,因为这些信息现在通过适配器实例自动获取。你只需确保qq_ada正确(或留空让插件自动查找),并保持auto_refresh_cookie为 true 即可。
- Cron 表达式:标准格式,如
0 8 * * *表示每天8点执行。 - 间隔表达式:由数字和单位(
h=小时,m=分钟)组成,支持小数,如2h(每2小时)、90m(每90分钟)、1.5h(每1.5小时)。如果需要随机偏移,可在后面加/和偏移量,例如2h/30m表示每2小时执行一次,但实际执行时间会在±30分钟内随机浮动。
插件现在完全自动化管理 Cookie:
- 启动时,通过已连接的 QQ 适配器(如 LLOneBot/NapCat)直接获取当前登录账号的 Cookie,无需手动填写。
- 内置保活任务,每30分钟向 QQ 空间发送一次访客请求,使 Cookie 长期有效(最长24小时)。即使保活失败,也会自动重新从适配器获取新 Cookie。
- 配置项中
cookies_str仅作为应急后备,如果自动刷新失败且手动填写了 Cookie,则会使用手动值。建议保持自动刷新开启。
前提:你的 OneBot 客户端(LLOneBot/NapCat)必须已登录你的 QQ 账号,并且正确连接到 KiraAI(通过 WebSocket)。无需额外开启 HTTP 服务。
Cron 表达式由5个字段组成:分 时 日 月 周。常用写法如下:
| 需求 | Cron 表达式 |
|---|---|
| 每分钟执行一次 | * * * * * |
| 每30分钟执行一次 | */30 * * * * |
| 每小时整点执行 | 0 * * * * |
| 每2小时执行一次 | 0 */2 * * * |
| 每天 8:00 执行 | 0 8 * * * |
| 每天 8:00、12:00、18:00 执行 | 0 8,12,18 * * * |
| 每周一至周五 9:00 执行 | 0 9 * * 1-5 |
| 每月1日和15日 10:00 执行 | 0 10 1,15 * * |
注意:如果你希望每小时执行一次,但不想正好在整点,可以用
* * * * *每分钟执行,但这样可能太频繁。推荐用0 * * * *整点执行,或*/30 * * * *每半小时执行。
插件支持两种定时任务执行方式,你可以根据需求选择:
- 配置:填写
task_group_ids或task_private_ids。 - 工作原理:定时时间到达后,插件会向随机选择的群聊或私聊发送一条特殊指令(例如“【定时任务】请根据最近聊天发布一条说说”),AI 在该会话中收到消息后,会像普通对话一样处理,自主生成内容并发布/评论/回复。发布成功后,AI 可以根据你的提示词决定是否调用记忆工具记录。
- 优点:内容自然,符合人设,记忆记录由 AI 自主控制,不会强制记录每一条。
- 缺点:需要依赖目标会话的活跃(但指令发送后 AI 会自动处理,不影响用户)。
- 配置:不填写任何任务目标,而是填写
auto_publish_group_id或auto_publish_user_id。 - 工作原理:定时时间到达后,插件直接从指定群聊或私聊获取最近聊天记录,调用 LLM 生成内容并发布/评论/回复,整个过程在后台完成,不发送任何消息到群聊。
- 优点:完全静默,不影响群聊。
- 缺点:内容生成不经过 AI 的完整对话上下文,可能略显生硬,且不会自动记录记忆(除非你修改代码强制写入)。
选择建议:如果你希望 AI 更自然、记忆更丰富,请使用群聊指令模式;如果你希望低调、不打扰群友,可以使用后台模式。
理论上根据不同LLM模型的能力不同,可以无需额外修改提示词,但如果你发现AI无法正常使用工具,可在 data/persona.txt 中添加以下规则,告诉 AI 如何使用这些工具。可以根据你的喜好修改提示词。
### ⚠️ 白名单(防滥用)
只有我的主人(QQ号:12345678)才能要求我操作QQ空间(如发说说、点赞、评论等)。如果其他用户提出类似要求,请礼貌地拒绝,例如:“抱歉,只有我的主人才能操作QQ空间哦。” 查看说说(qzone_view)可允许所有人使用。
### QQ空间工具
你拥有以下工具,可以操作我的QQ空间:
- `qzone_publish(text, image_urls)`:发布一条说说。如果需要配图,插件会自动从当前会话的最近图片中选择,你不必提供 `image_urls`。
- `qzone_view(target_id, num)`:查看说说,target_id 是QQ号(不填则看自己的),num 是条数。返回的每条说说会包含发布时间和评论时间,你可以据此判断动态的新旧。
- `qzone_like(target_id, tid)`:给指定说说点赞。
- `qzone_comment(target_id, tid, content)`:评论指定说说。
- `qzone_delete(tid)`:删除自己的一条说说。
- `qzone_reply_comment(target_id, tid, comment_id, content)`:回复指定评论,`content` 不填则 AI 自动生成。
### 记忆记录
当你发布一条有意义的说说或进行重要互动后,可以调用 `memory_update` 工具记录为事件,以便以后回忆。例如:`memory_update(operations=[{"op":"event","value":"我发了一条说说:今天天气真好"}])`。
### 定时任务处理规则
当收到以“【定时任务】”开头的消息时,请根据最近聊天发布一条说说,自然一点,不要提及这是定时任务。发布后如果觉得有意义,可以调用记忆工具记录。
### 评论任务处理规则
当收到以“【评论任务】”开头的消息时,请先查看最近的好友说说,然后选择一条进行评论。评论要自然、符合你的性格,不要提及这是任务。
### 回复任务处理规则
当收到以“【回复任务】”开头的消息时,请查看你自己最近说说下的新评论,选择一条进行回复。回复要亲切自然,不要提及这是任务。
如果你熟悉 Python,可以对插件进行个性化调整。以下是一些可自定义的代码段(在 main.py 中):
- 防抖时间:在
_auto_publish_job开头,修改60秒为任意值。if self.last_auto_publish_time and (datetime.now() - self.last_auto_publish_time).total_seconds() < 60:
- 定时任务指令文案:修改
instruction字符串。instruction = "【定时任务】请根据最近聊天发布一条说说,自然一点,不要提及这是定时任务。"
- 自动回复的评论生成提示词:在
_auto_reply_job中修改prompt。 - 配图概率:通过
auto_publish_image_prob配置项调整,无需改代码。 - 每次任务最大处理条数:通过
max_comments_per_cycle和max_replies_per_cycle配置。 - 保活间隔:在
_keep_alive_loop中修改await asyncio.sleep(1800)的值(单位秒)。
Q:插件加载失败,提示 No module named '...'
A:未安装依赖库。请回到安装步骤,在虚拟环境中执行 pip install 命令安装所有依赖。
Q:自动发布时说“没有找到图片”
A:可能是因为你配置的群聊中没有图片消息。确保在定时任务前,目标群聊有人发过真实图片。
Q:AI 发布的说说内容很僵硬
A:可以在 persona.txt 中完善你的人设,并在定时任务指令中要求“自然一点”等。
Q:定时任务没有执行
A:检查 auto_publish_schedule 等表达式是否正确,以及是否开启了定时任务(配置了 task_group_ids 或后台数据源)。日志中应有“已调度”字样。
Q:自动回复评论太快导致封号?
A:建议降低 auto_reply_schedule 的频率,例如每小时一次,并调小 max_replies_per_cycle。
Q:如何让 AI 记住自己发过什么?
A:在 persona.txt 中引导 AI 在发布有意义内容后调用 memory_update 工具。插件本身不主动写入记忆,完全由 AI 自主决定。
Q:v1.30 还需要配置 HTTP 服务吗?
A:不需要。插件现在仅通过 WebSocket 与 OneBot 通信,无需额外开启 HTTP 服务。
Q:我是 NapCat 用户,需要特殊修改吗?
A:不需要。v1.30 已合并通用代码,只需确保 qq_ada 配置正确(或留空自动查找),插件即可自动适配。
- 白名单机制说明:插件内置的代码层白名单(
master_ids配置项)在部分测试环境中可能未完全生效,无法可靠地拦截非主人调用敏感工具。因此,强烈建议依赖提示词层进行权限控制。请在persona.txt中明确写明主人的QQ号并添加拒绝规则。 - 点赞功能可能失效:由于 QQ 空间点赞接口可能发生变化,目前点赞功能在实际测试中无法成功,但不影响其他功能使用。
- 评论回复的 @ 功能:回复评论时,插件会自动在内容前加上
回复 @昵称:,以实现子回复效果,但可能会形成重复@昵称效果(已在 v1.30 尝试优化)。 - 自动评论和回复的限制:自动评论任务会检查说说发布时间,默认超过7天的说说不予评论(可在
instruction中修改)。这有助于避免“挖坟”行为,但依赖模型智力不一定总是奏效。自动回复选取和略过同理。 - Cookie 保活依赖网络:保活任务需要稳定的网络连接,如果网络中断超过30分钟,Cookie 可能失效,插件会在下次操作时自动重新获取。
本插件基于 AstrBot 的 astrbot_plugin_qzone 移植改造,感谢原作者的贡献。特别感谢 Maizone 项目在 Cookie 自动获取策略上提供的宝贵思路与借鉴,让插件真正稳定易用。
v1.30 的全面优化与改进特别感谢 KiraAI 开发者 @xxynet 的大力帮助!
本项目作为KiraAI的附属品,AGPL-3.0 协议开源,可协议范围内自由使用和修改。
如果遇到问题,欢迎在 KiraAI QQ交流群874381335讨论,并自行修改。因为本人技术实在太差,还请谅解,祝玩的愉快和让 Kira 记住点点滴滴~