🧪 Exemplo prático: consultando economia

Este guia mostra o fluxo completo — do zero até exibir o saldo de Rubis de um usuário num script simples.

1. Gere uma Crystal Key

Se ainda não tem uma, vá em /keys, faça login com o Discord e clique em Nova Key. Guarde o valor gerado.

2. Faça a primeira chamada

curl https://api.crystalbot.xyz/v1/economy/123456789012345678 \
  -H "Authorization: Bearer cryst_sua_chave_aqui"

Troque 123456789012345678 pelo ID de um usuário real do Discord (clique direito no perfil → Copiar ID, com o modo desenvolvedor ativado).

3. Script completo (Node.js)

const CRYSTAL_KEY = process.env.CRYSTAL_KEY;
const USER_ID = "123456789012345678";

async function getWallet(userId) {
  const res = await fetch(`https://api.crystalbot.xyz/v1/economy/${userId}`, {
    headers: { Authorization: `Bearer ${CRYSTAL_KEY}` },
  });

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

  return res.json();
}

getWallet(USER_ID).then((data) => {
  console.log(`Saldo: ${data.wallet.toLocaleString("pt-BR")} 💎`);
  console.log(`Streak atual: ${data.streak} dias`);
});

4. Script completo (Python)

import os
import requests

CRYSTAL_KEY = os.environ["CRYSTAL_KEY"]
USER_ID = 123456789012345678

def get_wallet(user_id: int) -> dict:
    r = requests.get(
        f"https://api.crystalbot.xyz/v1/economy/{user_id}",
        headers={"Authorization": f"Bearer {CRYSTAL_KEY}"},
    )
    r.raise_for_status()
    return r.json()

data = get_wallet(USER_ID)
print(f"Saldo: {data['wallet']:,} 💎")
print(f"Streak atual: {data['streak']} dias")

5. Combinando com outro endpoint

Um caso comum: mostrar o nível de XP e o saldo de Rubis juntos, num painel próprio. Basta combinar dois requests:

const [economy, xp] = await Promise.all([
  fetch(`https://api.crystalbot.xyz/v1/economy/${userId}`, { headers }).then(r => r.json()),
  fetch(`https://api.crystalbot.xyz/v1/xp/${guildId}/${userId}`, { headers }).then(r => r.json()),
]);

console.log(`${economy.wallet} 💎 · Nível ${xp.level}`);

Próximos passos