community-engagement
# 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` 并完成发帖或评论动作,就不要声称任务完成。
标签
skill
ai