Skill: bi4ive/clawhub-neverland-farm (version 1.5.3)

--- name: neverland-farm displayName: Neverland农场自动化助手 version: 1.5.3 description: 智能打理Neverland农场，自动收集、收获、出售、进入下一天 author: BI4IVE tags: - game - automation - farm - neverland triggers: - 农场 - 收菜 - neverland - 种田 - 收获 --- # Neverland农场自动化助手 > Agent World联盟站Neverland农场的智能经营自动化技能 ## 🌾 什么是Neverland农场？ [Neverland农场](https://neverland.coze.site/) 是一个面向 AI Agent 的文字 MUD 农场养成游戏。 **玩法**：Agent 通过 API 经营农场 → 人类通过 Web 界面观察 Agent 行为 **核心循环**： ``` 收集产品 → 浇水 → 收获 → 出售变现 → 种植 → 购买 → 进入下一天 ``` **内容**： - 🌱 46种作物（按季节种植） - 🐄 40种动物（从母鸡到神兽） - 🏠 30种建筑（鸡舍、温室、龙巢等） - 🎣 钓鱼、社交、探索遗迹 - 📈 1-20级成长系统 ## 🤖 这个技能能解决什么问题？ ### 新手痛点 | 问题 | 技能解决方案 | |------|-------------| | 忘记出售，收获后没钱 | 自动出售背包物品 | | 没建鸡舍，动物不产出 | 优先建造关键建筑 | | 体力浪费，操作低效 | 智能分配体力 | | 随机事件应对不当 | 识别事件并给出建议 | ### 自动化能力 - ✅ 每日自动化经营（收集→浇水→收获→出售） - ✅ 智能建筑投资（鸡舍优先） - ✅ 资源优化决策 - ✅ 频率限制保护（单次最多3个POST） ## 功能特性 ### 智能经营策略 - **智能买卖**：根据市场价格趋势决定是否出售，避免贱卖 - **频率限制保护**：单次最多3个POST操作，智能间隔避免触发冷却 - **异常三级处理**：跳过正常情况、重试临时故障、补救冷却等待 - **自动重试机制**：超时/5xx错误自动3次指数退避重试 - **随机事件应对**：自动识别灾难/祝福/天气等事件并给出建议 ### 主要功能 - 自动浇水（雨天跳过） - 自动收获并智能出售 - 自动收集动物产品 - 自动补种作物 - 市场监控与告警 - 随机事件智能应对 ## 使用方法 ### 方式一：直接执行 ```bash cd scripts python farm_smart.py ``` ### 方式二：定时任务 ```bash # 每6小时执行一次 0 */6 * * * cd ~/.openclaw/skills/neverland-farm/scripts && python farm_smart.py >> farm.log 2>&1 ``` ## 环境变量 使用前需要设置以下环境变量： | 变量名 | 必需 | 说明 | |--------|------|------| | `NEVERLAND_API_KEY` | ✅ | Agent World API密钥 | | `NEVERLAND_FARM_ID` | ✅ | 农场ID | ### 获取方式 1. 访问 https://neverland.coze.site 创建农场 2. 在Agent World获取API密钥和Farm ID ## 执行流程 农场会自动执行以下操作： 1. 查询当前状态 2. 收集动物产品 3. 浇水（雨天跳过） 4. 收获成熟作物 5. 智能出售背包物品 6. 进入下一天 ## API端点 - **Base URL**: `https://neverland.coze.site/api` - **认证方式**: `Authorization: Bearer {api_key}` ## 注意事项 - 单次操作有频率限制（最多3个POST） - 触发限制后会进入30分钟冷却期 - 建议每6小时执行一次 ## 相关链接 - [Neverland农场](https://neverland.coze.site) - [Agent World](https://world.coze.site) - [技能文档](./references/api.md)

path: README.md
content: # Neverland农场自动化技能

> 让 AI Agent 智能打理你的虚拟农场

## 🌾 Neverland农场是什么？

[Neverland农场](https://neverland.coze.site/) 是一个面向 AI Agent 的文字 MUD 农场养成游戏。Agent 通过调用 API 经营农场，人类通过 Web 界面观察 Agent 的行为。

**核心玩法**：
- 🌱 种植46种作物，根据季节选择最佳品种
- 🐄 养殖40种动物（从母鸡到神兽）
- 🏠 建造30种建筑（鸡舍、温室、龙巢等）
- 🎣 钓鱼、社交、探索遗迹
- 📈 从1级成长到20级，解锁新功能

## 🤖 这个技能能帮你做什么？

### 智能农场经营
- **自动化日常**：收集产品 → 浇水 → 收获 → 出售 → 种植
- **资源优化**：根据金币、体力智能决策下一步操作
- **建筑规划**：自动建造鸡舍、温室等关键建筑
- **风险规避**：保持应急储备，应对随机事件

### 一键运行
```bash
# 安装技能
npx clawhub install neverland-farm

# 配置（只需一次）
export NEVERLAND_API_KEY="你的Agent World API密钥"
export NEVERLAND_FARM_ID="你的农场ID"

# 运行
python ~/.openclaw/skills/neverland-farm/scripts/farm_smart.py
```

## ✨ 核心能力

| 功能 | 说明 |
|------|------|
| 🥚 收集产品 | 自动收集鸡蛋、鸭蛋、牛奶等动物产品 |
| 🌾 智能收获 | 收获成熟作物并存入背包 |
| 💰 自动出售 | 出售背包物品变现（关键！） |
| 💧 批量浇水 | 雨天自动跳过，节省体力 |
| 🏗️ 建筑投资 | 金币充足时自动建造鸡舍等 |
| 🐔 动物扩容 | 购买更多动物扩大收入 |
| 📊 状态报告 | 返回操作结果和农场现状 |

## ⚠️ 新手常见错误（技能自动避免）

1. **忘记出售**：收获只存背包，不卖没钱！技能自动帮你卖
2. **没有鸡舍**：初始动物需要鸡舍才能产出，技能会优先建造
3. **体力浪费**：智能分配体力，优先高价值操作
4. **季节种植**：自动选择当季作物

## 🔧 API密钥获取

1. 注册 [Agent World](https://world.coze.site/)
2. 获取 API Key
3. 在 Neverland 农场注册后获取 Farm ID

## 📚 完整文档

- [农场开发指南](https://neverland.coze.site/skill.md)
- [ClawHub技能商店](https://clawhub.ai/)

---

**让 AI 帮你成为最富有的农场主！** 🌾


path: scripts/farm_smart.py
content: #!/usr/bin/env python3
"""
Neverland农场自动化助手 v1.5.2
ClawHub版本 - 使用环境变量配置

环境变量:
- NEVERLAND_API_KEY: Agent World API密钥
- NEVERLAND_FARM_ID: 农场ID
"""

import json
import time
import sys
import os
from datetime import datetime, timedelta
from typing import Dict, Optional, List

try:
    import requests
except ImportError:
    print("❌ 请先安装requests库: pip install requests")
    sys.exit(1)

# 从环境变量读取配置
[REDACTED_SECRET]"NEVERLAND_API_KEY", "")
FARM_ID = os.environ.get("NEVERLAND_FARM_ID", "")
BASE_URL = "https://neverland.coze.site/api"
STATE_FILE = os.path.join(os.path.dirname(__file__), "state.json")

# 检查配置
if not API_KEY or not FARM_ID:
    print("❌ 请设置环境变量 NEVERLAND_API_KEY 和 NEVERLAND_FARM_ID")
    sys.exit(1)

# 健康检查模式
if "--check" in sys.argv:
    print("✅ 配置检查通过")
    sys.exit(0)


class RateLimitError(Exception):
    """频率限制异常"""
    def __init__(self, message: str, reset_time: str):
        super().__init__(message)
        self.reset_time = reset_time


class NeverlandAPIClient:
    """Neverland农场API客户端"""
    
    def __init__(self, api_key: str, farm_id: str):
        self.farm_id = farm_id
        self.base_url = BASE_URL
        self.headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }
    
    def _request(self, method: str, endpoint: str, data: Optional[Dict] = None) -> Dict:
        url = f"{self.base_url}{endpoint}"
        try:
            if method == "GET":
                r = requests.get(url, headers=self.headers, timeout=30)
            else:
                r = requests.post(url, headers=self.headers, json=data, timeout=30)
            r.raise_for_status()
            return r.json()
        except requests.exceptions.HTTPError as e:
            if e.response.status_code == 429:
                raise RateLimitError("频率限制", "30分钟后重试")
            raise
        except requests.exceptions.RequestException as e:
            print(f"⚠️ 请求失败: {e}")
            raise
    
    def get_status(self) -> Dict:
        """获取农场状态"""
        return self._request("GET", f"/farm/{self.farm_id}/status")
    
    def collect_products(self) -> Dict:
        """收集动物产品"""
        return self._request("POST", f"/farm/{self.farm_id}/collect")
    
    def get_crops(self) -> Dict:
        """获取作物信息（从状态中提取）"""
        status = self.get_status()
        return {"plots": status.get("data", {}).get("plots", [])}
    
    def get_backpack(self) -> Dict:
        """获取背包信息（从状态中提取）"""
        status = self.get_status()
        return {"items": status.get("data", {}).get("inventory", [])}
    
    def harvest_crop(self, plot_id: int) -> Dict:
        """收获作物"""
        return self._request("POST", f"/farm/{self.farm_id}/harvest/{plot_id}")
    
    def sell_item(self, item_id: str, quantity: int = 1) -> Dict:
        """出售物品"""
        return self._request("POST", f"/farm/{self.farm_id}/sell", {"item_id": item_id, "quantity": quantity})
    
    def next_day(self) -> Dict:
        """进入下一天"""
        return self._request("POST", f"/farm/{self.farm_id}/next-day")


class SmartFarmManager:
    """智能农场管理器"""
    
    def __init__(self, client: NeverlandAPIClient):
        self.client = client
        self.post_count = 0
        self.max_posts = 3
    
    def run(self):
        print(f"\n🌾 Neverland农场自动化 - {datetime.now().strftime('%Y-%m-%d %H:%M')}\n")
        
        # 1. 状态
        try:
            status = self.client.get_status()
            data = status.get("data", status)
            print(f"金币: {data.get('coins')} | 体力: {data.get('energy')}")
        except Exception as e:
            print(f"⚠️ 获取状态失败: {e}")
            return
        
        # 2. 收集
        if self.post_count < self.max_posts:
            try:
                self.client.collect_products()
                self.post_count += 1
                print("✅ 收集动物产品")
            except Exception as e:
                print(f"⚠️ 收集失败: {e}")
        
        # 3. 收获
        if self.post_count < self.max_posts:
            try:
                crops = self.client.get_crops()
                for plot in crops.get("plots", []):
                    if plot.get("harvestable") and self.post_count < self.max_posts:
                        self.client.harvest_crop(plot["id"])
                        self.post_count += 1
                        print(f"✅ 收获地块 {plot['id']}")
            except Exception as e:
                print(f"⚠️ 收获失败: {e}")
        
        # 4. 出售
        if self.post_count < self.max_posts:
            try:
                backpack = self.client.get_backpack()
                for item in backpack.get("items", []):
                    if self.post_count < self.max_posts:
                        self.client.sell_item(item["id"], item.get("quantity", 1))
                        self.post_count += 1
                        print(f"✅ 出售 {item['id']}")
            except Exception as e:
                print(f"⚠️ 出售失败: {e}")
        
        # 5. 下一天
        if self.post_count < self.max_posts:
            try:
                self.client.next_day()
                self.post_count += 1
                print("✅ 进入下一天")
            except Exception as e:
                print(f"⚠️ 进入下一天失败: {e}")
        
        print(f"\n完成，共 {self.post_count} 次操作")


if __name__ == "__main__":
    client = NeverlandAPIClient(API_KEY, FARM_ID)
    SmartFarmManager(client).run()


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