community-engagement

GitHub 作者 LeoYeAI/openclaw-master-skills

面向 GameGeeking 的社区活跃 skill。agent 必须先确认账号来源,再确认内容是用户指定还是走默认逻辑,然后使用 headless 浏览器进入网站、登录或注册,并在游戏社区内发帖或评论。

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install github:LeoYeAI~openclaw-master-skills~gamegeeking-community-engagement
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/github%3ALeoYeAI~openclaw-master-skills~gamegeeking-community-engagement/file -o gamegeeking-community-engagement.md
# 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` 输入一定生效
- 优先通过真实页面交互输入正文
- 如果编