game-market

Query YY game trading marketplace listings by game and category; guides users to the website for actual buy/sell actions

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "game-market" with this command: npx skills add arc-lin/game-market-skill

Game Market Skill

Query YY game trading marketplace listings directly in chat. Browse by game → category → listings → paginate. When the user wants to actually buy or sell, confirm then open the browser.

No login required. The API uses a front-end signature (MD5-based) that is self-contained.


When to Activate

Activate when the user:

  • Runs /game-market manually
  • Mentions game trading keywords: game account, buy/sell account, boosting, coaching, game currency, game items
  • Mentions specific game names: 王者荣耀, 英雄联盟, 三角洲行动, 和平精英, 穿越火线, 无畏契约, 绝地求生, 崩坏, 原神, CSGO
  • Mentions YY marketplace: YY交易, YY商城, mall.yy.com

Workflow

Step 1 — Intent Recognition

Extract from user input:

  • Game namecategoryId
  • Sub-categorysubCategoryId
Sub-categorysubCategoryId
账号 (Account)5
代练 (Boosting)1
陪练 (Coaching)2
道具 (Items)3
游戏币 (Currency)4

If intent is unclear (game mentioned but no category, or vice versa), go to Step 2.

Step 2 — Category Selection (when intent is unclear)

Run this Python snippet to fetch and display categories:

import hashlib, uuid, time, requests

APPID  = "market_app"
SECRET = "ixlOJVDwdOm5rGdudhEywwK6"
HDID   = "38e6a82f5f724517d6cbe82cde56e846690afcb0"
BASE   = "https://gamemarket.yy.com"

def sign(uri):
    nonce = str(uuid.uuid4())
    ts    = str(int(time.time() * 1000))
    raw   = f"appId={APPID}&nonce={nonce}&timestamp={ts}&uri={uri}&secret={SECRET}"
    sig   = hashlib.md5(raw.encode()).hexdigest()
    return {
        "accept": "application/json, text/plain, */*",
        "origin": "https://mall.yy.com",
        "referer": "https://mall.yy.com/",
        "user-agent": "Mozilla/5.0",
        "x-appid": APPID, "x-nonce": nonce, "x-timestamp": ts, "x-signature": sig,
    }

uri  = "/category/queryShowCategories"
resp = requests.get(BASE + uri, params={"sid": "", "hdid": HDID}, headers=sign(uri), timeout=15)
cats = resp.json()["data"]

for c in cats:
    subs = ", ".join(s["name"] for s in c.get("subCategories", []))
    print(f"  {c['id']:>2}. {c['name']}  ({subs})")

Present the list to the user and ask them to choose game and sub-category.

Step 3 — Query Listings

Run this Python snippet with the resolved category_id and sub_category_id:

import hashlib, uuid, time, requests

APPID  = "market_app"
SECRET = "ixlOJVDwdOm5rGdudhEywwK6"
HDID   = "38e6a82f5f724517d6cbe82cde56e846690afcb0"
BASE   = "https://gamemarket.yy.com"

def sign(uri):
    nonce = str(uuid.uuid4())
    ts    = str(int(time.time() * 1000))
    raw   = f"appId={APPID}&nonce={nonce}&timestamp={ts}&uri={uri}&secret={SECRET}"
    sig   = hashlib.md5(raw.encode()).hexdigest()
    return {
        "accept": "application/json, text/plain, */*",
        "origin": "https://mall.yy.com",
        "referer": "https://mall.yy.com/",
        "user-agent": "Mozilla/5.0",
        "x-appid": APPID, "x-nonce": nonce, "x-timestamp": ts, "x-signature": sig,
    }

# ---- Set these before running ----
category_id     = 5    # None = all games
sub_category_id = 5
page_num        = 1
# ----------------------------------

uri    = "/goods/v2/search"
params = {
    "pageNum": str(page_num), "pageSize": "20",
    "requestSource": "HOME", "withRegionServer": "true",
    "hdid": HDID, "subCategoryId": str(sub_category_id),
    "searchDistChannelGoods": "false",
}
if category_id is not None:
    params["categoryId"] = str(category_id)

resp   = requests.get(BASE + uri, params=params, headers=sign(uri), timeout=15)
result = resp.json()["data"]
goods  = result.get("goodsList", [])
total  = result.get("totalCount", 0)

print(f"Total: {total} listings  |  Page {page_num}\n")
for i, g in enumerate(goods, 1):
    price  = g["salePrice"] / 100
    name   = g["goodsName"].replace("\r\n", " ").replace("\n", " ")[:80]
    labels = "  ".join(lb["labelName"] for lb in g.get("goodsLabels", []))
    gid    = g["goodsId"]
    cat    = g.get("categoryName", "")
    sub    = g.get("subCategoryName", "")
    url    = f"https://mall.yy.com/?pageId=20000#/shop/detail/{gid}"
    print(f"[{i:02d}] ¥{price:.0f}  {cat} · {sub}")
    print(f"     {name}")
    if labels:
        print(f"     【{labels}】")
    print(f"     🔗 {url}\n")

Step 4 — Follow-up Interaction

After displaying results, keep listening:

User saysAction
"next page" / "more" / "下一页"Increment page_num, re-run Step 3
"item N" / "open #3" / "第N条"Open that item's detail URL in browser
"change game" / "换个游戏"Back to Step 1
"buy" / "purchase" / "想买"→ Buy/Sell flow
"sell" / "want to sell" / "想卖"→ Buy/Sell flow

Buy / Sell Flow

When the user expresses intent to buy or sell:

  1. Reply with confirmation prompt:

    To buy or sell, you'll need to use the YY marketplace website. Open it now?

  2. If user confirms, run:

# Open YY marketplace homepage
open "https://mall.yy.com/?pageId=20000"

If the user was interested in a specific item, open its detail page instead:

open "https://mall.yy.com/?pageId=20000#/shop/detail/{goodsId}"

Error Handling

SituationResponse
API request fails / timeout"Query failed. Visit https://mall.yy.com/?pageId=20000 directly."
Game has no such sub-category"This game doesn't have that category. Available: [list sub-categories]"
Empty goods list"No listings found for this selection."
Ambiguous game nameList similar game names and ask user to confirm

Out of Scope

  • Login / authentication (not needed for queries)
  • Placing orders or payments (redirect to website instead)
  • Price sorting / filtering (future iteration)
  • Favorites / comparison

Examples

User: show me 王者荣耀 accounts
→ Queries categoryId=5, subCategoryId=5, displays 20 listings

User: I want to look at boosting services
→ Game unclear → shows game list for selection

User: next page
→ Increments to page 2, same category

User: open item 3
→ Opens https://mall.yy.com/?pageId=20000#/shop/detail/{goodsId}

User: I want to buy this
→ "To buy, you'll need the YY website. Open it now?"
→ Confirmed → open "https://mall.yy.com/?pageId=20000#/shop/detail/{goodsId}"

User: I want to sell my account
→ "To sell, you'll need the YY website. Open it now?"
→ Confirmed → open "https://mall.yy.com/?pageId=20000"

API Reference

FieldValue
Base URLhttps://gamemarket.yy.com
Categories endpointGET /category/queryShowCategories?sid=&hdid={HDID}
Listings endpointGET /goods/v2/search
SignatureMD5("appId={APPID}&nonce={nonce}&timestamp={ts}&uri={uri}&secret={SECRET}")
APPIDmarket_app
SECRETixlOJVDwdOm5rGdudhEywwK6
HDID38e6a82f5f724517d6cbe82cde56e846690afcb0
Detail URL patternhttps://mall.yy.com/?pageId=20000#/shop/detail/{goodsId}
Buy/Sell URLhttps://mall.yy.com/?pageId=20000

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Debugging R Environment And Dependencies

Diagnose and fix R environment issues, including package installation failures, dependency conflicts, system library problems, renv errors, and Bioconductor...

Registry SourceRecently Updated
General

Sci Data Extractor

AI-powered tool for extracting structured data from scientific literature PDFs

Registry SourceRecently Updated
General

MoreLogin

Manage MoreLogin anti-detect browser profiles and cloud phones through the official Local API (http://127.0.0.1:40000), including browser profile lifecycle,...

Registry SourceRecently Updated
General

realtime-interact-overlay

实时交互浮窗技能。在需要用户确认、输入或交互的场景中,通过浮窗方式在当前操作界面旁边进行交互, 而不是回到OpenClaw聊天窗口。适用于:(1) 评论内容需要用户确认后执行,(2) 删除文件前需要用户确认, (3) 购物付款时需要输入密码,(4) 任何需要即时交互的场景。支持系统级浮窗和浏览器内浮窗。

Registry SourceRecently Updated