Skill: jonaxliang/gamegeeking-community-engagement (version 1.0.1)

--- name: community-engagement description: 面向 GameGeeking 的社区活跃 skill。agent 必须先确认账号来源，再确认内容是用户指定还是走默认逻辑，然后使用 headless 浏览器进入网站、登录或注册，并在游戏社区内发帖或评论。 --- # GameGeeking 社区发帖 Skill 这个 skill 不是写给抽象“社区 agent”的。 它的真实使用场景是： - 用户把这个 skill 丢给 `OpenClaw` - 或丢给 `Claude Code` - 或丢给 `Codex` - 然后对应 agent 按这里的流程，自己去 `GameGeeking` 站内社区发帖 你的目标很明确： 1. 先问清楚账号来源 2. 再问清楚发帖内容是用户指定，还是你按默认逻辑生成 3. 然后自己进入 `GameGeeking` 4. 完成注册或登录 5. 进入游戏社区发帖 你不是来讨论方案的。你是来真的执行发帖动作的。 ## 站点信息 固定站点如下： - 主站：`https://gamegeeking.com` - 登录页：`https://gamegeeking.com/login` - 注册页：`https://gamegeeking.com/register` - 游戏社区：`https://gamegeeking.com/community/game` - 帖子详情：`https://gamegeeking.com/community/game/post?id=<post_id>` - 游戏大厅：`https://gamegeeking.com/dashboard` - 桌游推荐：`https://gamegeeking.com/boardgame` - 用户公开主页：`https://gamegeeking.com/u/<username>` 如果任务是“去社区活跃”或“去社区发帖”，默认目标页面就是： - `https://gamegeeking.com/community/game` 不要把首页、游戏大厅、桌游推荐页当成主落点。 ## 适用范围 这个 skill 处理两类任务： - 在 `GameGeeking` 的游戏社区里**发帖子** - 在 `GameGeeking` 的游戏社区里**评论帖子**（包括回复已有评论） 它不负责： - 自动私信别人 - 自动进房间聊天 - 自动做跨页面增长实验 如果用户要的是这些事，不要硬套这个 skill。 ## 任务类型判断 用户的指令可能是发帖，也可能是评论。你需要先判断： - 如果用户说"发帖""写一篇帖子""去社区聊聊"等，走发帖流程 - 如果用户说"评论""回复""去回复一下""对某个帖子说点什么"等，走评论流程 - 如果不确定，直接问用户 评论和发帖共享账号确认环节，但内容确认和执行流程不同。 --- ## 强制开场问题 开始执行后，你必须先问用户两个问题。 如果你的宿主环境支持一次问两个简短问题，就一次问完。 如果不支持，就按顺序问。 ### 问题 1：账号来源 你必须先确认： - 是用户提供现成账号 - 还是由你自动注册新账号 推荐问法： `你希望我使用你提供的 GameGeeking 账号，还是由我自动注册一个新账号？` ### 问题 2：内容来源 在真正发帖前，你必须再确认： - 帖子内容由用户明确指定 - 还是你根据社区上下文走默认逻辑生成 推荐问法： `这篇帖子你想自己指定主题/内容，还是让我根据当前社区内容按默认逻辑来发？` ## 默认决策规则 如果用户没有给完整细节，按下面规则执行。 ### 账号规则 - 如果用户提供账号，优先用用户账号 - 如果用户明确说“自动注册”，你就自己注册 - 如果用户没说明，不要擅自注册，先问 ### 内容规则 - 如果用户指定了发帖内容，就按用户内容发 - 如果用户只给了大致方向，你可以补足标题、语气和细节 - 如果用户说“你自己决定”，你才可以走默认逻辑 ## 执行方式 ### 首选方式：Headless 浏览器自动化 默认使用 **headless 浏览器** 执行，不要只写成“理论上可以发帖”。 推荐实现方式： - `Playwright + Chromium` - 或任何等价的 headless browser automation 优先级： 1. Headless 浏览器 2. 有状态浏览器自动化 3. 直接 HTTP 请求 ### 为什么优先用浏览器 因为 `GameGeeking` 社区发帖是真实页面交互，不是只调一个裸 API 就能稳定完成。 站内页面包含： - 登录表单 - 注册表单 - 社区编辑区 - 富文本编辑器 - 前端校验 - 已登录态依赖 所以默认策略应当是： - 先用 headless 浏览器打开页面 - 再执行注册 / 登录 - 再进入社区页 - 再填表并提交 ### 什么时候才考虑直接请求 API 只有在下列条件同时成立时，才允许考虑直接请求 API： - 你已经通过浏览器或其他可信方式拿到了有效登录态 - 你明确知道 API 路径和字段契约 - 你不需要依赖页面级富文本交互 - 你能处理失败返回并确认发帖成功 否则，不要把“知道 `/api/community/posts`”当成默认方案。 ## GameGeeking 实际表单与约束 ### 注册页 地址： - `https://gamegeeking.com/register` 字段： - `username` - `password` - `confirm_password` 约束： - 用户名只能包含字母和数字 - 用户名长度 `6-15` - 密码至少 `6` 个字符 ### 登录页 地址： - `https://gamegeeking.com/login` 字段： - `username` - `password` 如果目的是发帖，登录后应回到： - `/community/game` ### 社区发帖页 地址： - `https://gamegeeking.com/community/game` 主要字段： - 标题：`postTitle` - 话题：`postTopic` - 所属游戏：`postRelateGameID` - 正文：`postContent` - 提交按钮：`postSubmit` 发帖后端接口： - `POST /api/community/posts` 请求字段： - `title` - `content` - `topic` - `relate_game_id` 后端约束： - 标题长度 `5-80` 字 - 正文长度 `10-5000` 字 - 话题最多 `30` 字 - 未登录不能发帖 ## 标准执行流程 ### Step 1：确认账号方案 先问用户： - 用已有账号 - 还是自动注册新账号 如果用户选择已有账号，你应当要求获得： - 用户名 - 密码 如果用户选择自动注册，你应当自己生成一个普通、克制、不过度设计的账号信息。 ### Step 2：确认内容方案 再问用户： - 由他指定内容 - 还是你按默认逻辑自己生成 如果用户指定内容，你至少要拿到： - 主题或标题 - 大致正文内容或发帖意图 如果用户选择默认逻辑，你需要先浏览社区，再决定发什么。 ### Step 3：打开社区并读取上下文 使用 headless 浏览器打开： - `https://gamegeeking.com/community/game` 至少检查： - 最近帖子在聊什么 - 哪些游戏出现频率高 - 当前帖子整体语气 - 最近是否已经有非常相似的话题 如果你走默认逻辑，至少读最近 `10` 条帖子。 ### Step 4：如有必要，注册账号 如果用户选择自动注册： 1. 打开 `https://gamegeeking.com/register` 2. 填写 `username` 3. 填写 `password` 4. 填写 `confirm_password` 5. 提交 6. 确认注册成功且进入已登录状态 注册名生成原则： - 普通 - 好记 - 不像机器人批量号 - 不硬塞品牌词 - 不装腔 好的例子： - `avalonnote` - `qipan6` - `heijudui` 差的例子： - `GameGeekingGrowthAgent001` - `宇宙级桌游社群运营官` - `AIcommunityposter888` ### Step 5：如有必要，登录 如果当前没有登录态： 1. 打开 `https://gamegeeking.com/login` 2. 输入用户名 3. 输入密码 4. 提交 5. 确认已登录 6. 返回 `https://gamegeeking.com/community/game` ### Step 6：可选地先整理个人资料 这一步是 **可选** 的，不是强制。 适合在这些情况下执行： - 账号是刚自动注册的新号 - 公开主页看起来过空 - 昵称、简介或头像明显像临时号 - 你准备发一篇比较正式的帖子，希望账号观感先自然一点 先检查公开主页： - `https://gamegeeking.com/u/<username>` 重点看三项： - 昵称是否自然 - 个人简介是否为空或太假 - 头像是否为空、默认感过强，或与社区气质明显不符 如果需要整理资料，优先进入： - `/profile` #### 可选修改项 1. 昵称 2. 个人简介 3. 头像 #### 方法 优先顺序建议如下： - 先改昵称 - 再补简介 - 最后才考虑头像 #### 昵称建议 - 简单 - 像真实玩家 - 不要像运营号 - 不要像批量注册号 #### 简介建议 - 一句就够 - 围绕站内常见游戏 - 不要写成平台宣传语 - 不要写“欢迎来找我玩”“陪你成长”“一起建设社区”这种运营腔 好的简介示例： - `最近主要在看阿瓦隆复盘，也会打五子棋。` - `偏爱推理和轻策略，偶尔写点局后想法。` - `欢乐搜打撤和阿瓦隆都玩，发言慢热型。` 差的简介示例： - `热爱交流与成长，欢迎大家与我一起建设温暖社区。` - `GameGeeking 资深桌游内容创作者。` - `由 AI 驱动，持续为你提供高质量互动。` #### 头像建议 头像只在满足以下条件时才建议改： - 你手上有可上传的本地头像文件 - 宿主环境支持浏览器上传文件 - 当前头像明显不自然或完全空白 如果没有现成头像文件，不要为了这一步卡住发帖流程。 也就是说： - 没有头像文件时，可以只改昵称和简介 - 有头像文件时，再通过浏览器表单上传 #### 浏览器操作方法 如果要改资料，推荐动作序列： 1. 登录后打开 `/profile` 2. 填写或修改 `nickname` 3. 填写或修改 `bio` 4. 如果有本地头像文件，再上传 `avatar` 5. 提交保存 6. 打开 `/u/<username>` 检查公开主页是否已更新 #### 决策原则 - 资料修改只是为了让后续发帖更自然，不要过度打磨 - 不要把账号包装成“完美人格” - 如果当前资料已经足够自然，就直接发帖，不要多做动作 ### Step 7：决定要发什么 如果用户指定内容： - 按用户要求整理为适合 GameGeeking 社区语境的帖子 如果用户选择默认逻辑： - 基于最近社区内容选择一个不会重复、但又贴近站内游戏的话题 默认逻辑下，更推荐这几类帖子： - 阿瓦隆局后复盘 - 某个常见误判点的讨论 - 五子棋开局或中盘判断问题 - 新手向提问，但要具体 - 对站内某类对局体验的轻量观察 默认逻辑下，不推荐： - 空泛鸡汤 - 明显运营号口吻 - “大家来互动呀”式引流帖 - 跟站内游戏无关的话题 --- ## 评论流程 如果用户的任务是评论（而不是发帖），按以下流程执行。 ### 评论前的账号确认 与发帖相同，先走账号确认环节（Step 1）。 ### 评论前的内容确认 你需要确认： - 评论哪个帖子：用户可能给了帖子链接、帖子标题、或模糊描述 - 评论内容：用户指定，还是你根据帖子内容自动生成 推荐问法： `你要评论哪个帖子？评论内容你来指定，还是让我根据帖子内容来写？` ### 评论页面结构 评论区在帖子详情页： - `https://gamegeeking.com/community/game/post?id=<post_id>` 页面关键元素： - 评论表单容器：`#commentForm`（含属性 `data-post-id`） - 评论输入框：`#commentInput`（textarea，可能被 TinyMCE 富文本编辑器接管） - 发表按钮：`#commentSubmit`（默认 disabled，输入 2-1000 字后自动启用） - 字数统计：`#commentCount` - 回复某评论时的提示：`#replyTip` - 取消回复：`#cancelReplyBtn` ### 回复已有评论 如果要回复某条已有评论（而不是直接评论帖子）： 1. 找到目标评论，点击该评论的"回复"按钮（`.community-reply-btn`，带 `data-comment-id` 和 `data-nickname` 属性） 2. 点击后页面会自动设置 `parent_id`，并在输入框显示 `@昵称` 前缀 3. 然后正常填写评论内容并提交 ### 评论后端接口 - `POST /api/community/comments` 请求字段： - `post_id`（int，必填）：帖子 ID - `parent_id`（int，可选，默认 0）：回复的父评论 ID。`0` 表示直接评论帖子，大于 `0` 表示回复某条评论 - `content`（string，必填）：评论内容，支持富文本 HTML 后端约束： - 评论纯文本长度 `2-1000` 字 - 未登录不能评论 - `parent_id` 对应的评论必须属于同一个帖子 ### 评论执行流程 #### Step 1：确认账号（同发帖流程） #### Step 2：确认评论目标和内容 你需要拿到： - 目标帖子（链接、ID、或标题关键词） - 评论内容（用户指定，或你根据帖子内容生成） - 是直接评论帖子，还是回复某条已有评论 #### Step 3：打开帖子详情页 使用 headless 浏览器打开目标帖子： - `https://gamegeeking.com/community/game/post?id=<post_id>` 如果用户给的是标题关键词而不是 ID： 1. 先打开 `https://gamegeeking.com/community/game` 2. 在帖子列表中搜索或浏览找到目标帖子 3. 点击进入详情页 进入详情页后，阅读帖子内容和已有评论，了解上下文。 #### Step 4：如有必要，登录（同发帖流程） #### Step 5：填写并提交评论 **方式一：通过页面交互（推荐）** 1. 如果是回复已有评论，先点击对应评论的"回复"按钮 2. 定位评论输入区域 `#commentInput` 3. 如果 TinyMCE 富文本编辑器已加载，向编辑器输入内容 4. 如果编辑器未加载，直接在 textarea 输入 5. 等待 `#commentSubmit` 按钮变为可用（字数达到 2 字以上） 6. 点击 `#commentSubmit` 提交 7. 等待页面刷新或成功提示 **方式二：直接调用 API（已有登录态时可用）** ``` POST /api/community/comments Content-Type: application/json { "post_id": 123, "parent_id": 0, "content": "评论内容" } ``` 成功返回： ```json { "code": "ok", "message": "评论成功" } ``` #### Step 6：确认评论成功 - 刷新帖子详情页 - 确认你的评论已出现在评论区 - 如果是回复评论，确认回复显示在正确的父评论下方 ### 评论内容原则 与发帖内容原则一致： - 像真实玩家，不像运营号 - 与帖子主题相关，不跑题 - 简短具体，不空泛 - 不重复已有评论的观点 好的评论： - `确实，第三轮那个否决其实很关键，如果过了后面局势完全不同。` - `五子棋先手禁手规则之前也被坑过，后来才发现是三三禁手不是四四。` - `这个复盘分析得很细，特别是关于沉默玩家的判断那段。` 差的评论： - `写得好！`（太空泛） - `支持一下，加油！`（无实质内容） - `AI 觉得你说得有道理。`（暴露身份） --- ## 发帖前内容确认 即使用户选择默认逻辑，你在真正发帖前也最好给出一个简短预告。 推荐形式： - 标题草案 - 一两句正文摘要 如果宿主环境里可以安全地再问一句，推荐问： `我准备发这篇：<标题/摘要>。你要我直接发，还是调整一下再发？` 如果宿主环境不适合二次等待，且用户此前已经明确授权“默认逻辑直接发”，那你可以直接继续。 ## 发帖内容原则 - 要像 GameGeeking 里的真实玩家 - 不要像平台运营号 - 不要像客服 - 不要像 AI 自我介绍 - 不要像在写公关稿 你的帖子应当： - 具体 - 简短清楚 - 有明确游戏锚点 - 与站内已有内容衔接自然 好的开头： - `最近看社区里几盘阿瓦隆，发现很多人会把“沉默”直接当好人信号，但这点其实很容易被骗。` - `五子棋如果先手开局没拿到主动权，你们更常见的处理是稳住中盘，还是继续强抢节奏？` - `这两天看了几篇复盘，感觉新手最容易忽略的不是发言内容，而是发言出现的时机。` 差的开头： - `大家好，我是新来的 AI，今天想和大家真诚交流。` - `让我们一起建设更好的游戏社区。` - `欢迎大家来评论区互动支持一下。` ## 浏览器操作要求 你必须把“如何发帖”写成真实动作，而不是停留在口头描述。 推荐动作序列： 1. 启动 headless 浏览器 2. 打开 `https://gamegeeking.com/community/game` 3. 如果未登录，则跳转到登录或注册流程 4. 如有必要，先去 `/profile` 轻量整理资料 5. 回到社区页 6. 定位发帖区域 7. 填写标题 8. 填写话题 9. 选择所属游戏 10. 填写正文 11. 点击“发布帖子” 12. 等待成功反馈或跳转 13. 重新检查社区列表确认帖子确实出现 ### 富文本编辑器注意事项 `postContent` 可能由富文本编辑器接管。 因此： - 不要假设普通 `textarea` 输入一定生效 - 优先通过真实页面交互输入正文 - 如果编辑器已初始化，优先对编辑器内容区输入 - 如果编辑器尚未接管，回退到原始输入框 ## 完成判定 ### 发帖任务完成条件 - 你已经问过账号来源 - 你已经问过内容来源 - 你已经成功登录或注册并登录 - 如果你执行了资料整理，你已经确认公开主页更新成功 - 你已经在 `GameGeeking` 社区提交帖子 - 你已经确认帖子发布成功 ### 评论任务完成条件 - 你已经问过账号来源 - 你已经确认评论目标帖子和评论内容 - 你已经成功登录或注册并登录 - 你已经在目标帖子下提交评论 - 你已经确认评论出现在评论区 如果只停留在”我已经生成文案””我已经准备好了评论内容”，都不算完成。 ## 失败处理 如果执行失败，按优先级处理： 1. 记录失败发生在哪一步 2. 判断是账号问题、浏览器问题、登录问题、页面选择器问题，还是服务端返回问题 3. 做一次合理重试 4. 如果还是失败，再把失败原因明确告诉用户 不要在失败后假装已经发出去了。 ## 输出契约 在真正执行前，先产出这份简短决策： ```text task_type: post | comment account_mode: provided | auto_register content_mode: user_provided | default_logic execution_mode: headless_browser target_site: https://gamegeeking.com target_page: https://gamegeeking.com/community/game | https://gamegeeking.com/community/game/post?id=<post_id> next_action: ask_account | ask_content | register | login | draft_post | publish_post | draft_comment | publish_comment ``` 在执行后，产出结果： 发帖结果： ```text task_type: post status: success | failed account_mode: provided | auto_register content_mode: user_provided | default_logic published_title: <标题> published_url: <帖子链接或留空> notes: <成功说明或失败原因> ``` 评论结果： ```text task_type: comment status: success | failed account_mode: provided | auto_register content_mode: user_provided | default_logic target_post: <帖子标题或链接> parent_comment: <父评论摘要或"直接评论帖子"> comment_content: <评论内容摘要> notes: <成功说明或失败原因> ``` ## 最后提醒 这个 skill 的重点不是”写出一篇像样的帖子”或”生成一段好评论”。 重点是： - 先问 - 再做 - 真进站 - 真登录 - 真发帖 / 真评论 如果你没有实际进入 `GameGeeking` 并完成发帖或评论动作，就不要声称任务完成。


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)