Skill: vvardhan14/pokerpal (version 1.0.0)

--- name: pokerpal description: Query PokerPal poker game data - games, players, buy-ins, settlements metadata: openclaw: emoji: "♠️" requires: env: - POKERPAL_API_URL - POKERPAL_BOT_API_KEY primaryEnv: POKERPAL_BOT_API_KEY --- # PokerPal Poker Game Assistant You can query live poker game data using these tools. ## Available Tools - **list_groups** - List all poker groups - **get_group_games** - Get games for a group (filter by active/closed) - **get_group_summary** - Quick overview of a group - **get_game_players** - Detailed player stats for a game - **get_player_buyins** - Player's buy-in info (current game + all-time) ## Conversation Flow 1. When asked about a group's games, use `get_group_games` with `status: "active"` unless they ask for closed/all games. 2. When asked about a player's buy-ins, use `get_player_buyins`. If the group context is known from the conversation, pass it as `group_name`. 3. When asked for game details, first get the game ID from `get_group_games`, then call `get_game_players`. 4. When asked for a group overview, use `get_group_summary`. ## Response Formatting - Format money as dollar amounts (e.g. $150.00) - When showing player lists, use a clean list format - Highlight active games vs closed games - If a player has a net result, indicate profit/loss clearly

path: index.js
content: const BASE_URL = process.env.POKERPAL_API_URL;
const [REDACTED_SECRET];

async function apiCall(path) {
  const res = await fetch(`${BASE_URL}${path}`, {
    headers: {
      "X-Bot-API-Key": API_KEY,
      "Content-Type": "application/json",
    },
  });

  if (!res.ok) {
    const err = await res.json().catch(() => ({}));
    throw new Error(err.error || `API returned ${res.status}`);
  }

  return res.json();
}

export async function get_group_games({ group_name, status }) {
  const query = status ? `?status=${status}` : "";
  return apiCall(
    `/api/bot/groups/${encodeURIComponent(group_name)}/games${query}`
  );
}

export async function get_player_buyins({ player_name, group_name }) {
  const query = group_name
    ? `?group=${encodeURIComponent(group_name)}`
    : "";
  return apiCall(
    `/api/bot/players/${encodeURIComponent(player_name)}/buyins${query}`
  );
}

export async function get_game_players({ game_id }) {
  return apiCall(`/api/bot/games/${game_id}/players`);
}

export async function get_group_summary({ group_name }) {
  return apiCall(
    `/api/bot/groups/${encodeURIComponent(group_name)}/summary`
  );
}

export async function list_groups() {
  return apiCall("/api/bot/groups");
}


path: skills.json
content: {
    "tools": [
      {
        "name": "get_group_games",
        "description": "Get poker games for a group. Can filter by status (active/closed). Use this when a user asks about games in a poker group.",
        "parameters": {
          "type": "object",
          "properties": {
            "group_name": {
              "type": "string",
              "description": "The name of the poker group (e.g. 'smartjones')"
            },
            "status": {
              "type": "string",
              "enum": ["active", "closed"],
              "description": "Filter by game status. Omit for all games."
            }
          },
          "required": ["group_name"]
        }
      },
      {
        "name": "get_player_buyins",
        "description": "Get buy-in information for a specific player. Shows current game buy-ins and all-time stats. Use when a user asks about a player's buy-ins or spending.",
        "parameters": {
          "type": "object",
          "properties": {
            "player_name": {
              "type": "string",
              "description": "The player's name (e.g. 'Chandra')"
            },
            "group_name": {
              "type": "string",
              "description": "Optional: poker group name to search within"
            }
          },
          "required": ["player_name"]
        }
      },
      {
        "name": "get_game_players",
        "description": "Get all players and their stats for a specific game by game ID. Shows buy-ins, chip counts, and net results.",
        "parameters": {
          "type": "object",
          "properties": {
            "game_id": {
              "type": "string",
              "description": "The game ID (returned from get_group_games)"
            }
          },
          "required": ["game_id"]
        }
      },
      {
        "name": "get_group_summary",
        "description": "Get a quick overview of a poker group: total players, games, and current active game details.",
        "parameters": {
          "type": "object",
          "properties": {
            "group_name": {
              "type": "string",
              "description": "The name of the poker group"
            }
          },
          "required": ["group_name"]
        }
      },
      {
        "name": "list_groups",
        "description": "List all available poker groups. Use when the user asks what groups exist.",
        "parameters": {
          "type": "object",
          "properties": {}
        }
      }
    ]
  }
  

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