> For the complete documentation index, see [llms.txt](https://gamblarium.gitbook.io/gamblarium/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gamblarium.gitbook.io/gamblarium/manualy/api-docs-or-websockets-new.md).

# API DOCS | WebSockets - NEW

<mark style="color:orange;">Важно! Мы были вынуждены изменить получение данных по сокетам для стабильной работы в панели, извиняемся за неудобства.</mark>

<mark style="color:orange;">В данный момент новые сокеты уже работают, а старые перестали работать после 21.02.25 00:00.</mark>

<mark style="color:red;">Важно! Для того, чтобы апи работало необходимо запросить доступ для подключения. Для этого свяжитесь с администраторами:</mark> [<mark style="color:red;">@gamblerwork</mark>](https://t.me/gamblerwork) <mark style="color:red;">/</mark> [<mark style="color:red;">@lord\_gambler</mark>](https://t.me/lord_gambler)

## Новые сокеты <a href="#novye-sokety" id="novye-sokety"></a>

URL: `wss://gambler-panel.com/api/ws?token=:token&connectionType=:cType`

`:token - "Worker $authToken"`

`:cType - "bot"`

**Новый формат сообщений:**

```
{ 
  "name": "имя_события",
  "data": { 
     /* содержание события, 
     идентично тому что было раньше (API Docs | Socket.io) */
      }
}
```

## Содержание события newDeposit <a href="#soderzhanie-sobytiya-newdeposit" id="soderzhanie-sobytiya-newdeposit"></a>

```
{
    id: "7225647136791068672", // id депозита
    mammothId: "7225647165131980801", // id мамонта
    mammothLogin: "example@mail.com",
    mammothCountry: "US", // alpha-2 код страны
    mammothPromo: "superpromo", // промокод активированный на время депозита
    token: "btc", // токен депозита
    amount: 1, // сумма депозита в токене
    amountUsd: 60709.10, // сумма депозита в USD
    workerPercent: 60, // процент воркера на момент депозита
    domain: "example.com", // домен воркера
    txHash: "0000000003d0fbe4a8ec..." // хеш транзакции
}
/*
Список токенов:
btc, ltc, xrp, trx_trc20, usdt_trc20, eth_erc20, usdt_erc20, eth_base, usdc_base, usdc_erc20, usdc_bep20, bnb_bep20, usdt_bep20, ton_ton, usdt_ton, sol_sol, usdt_sol, usdc_sol
*/
```

## Содержание события newDrain <a href="#soderzhanie-sobytiya-newdrain" id="soderzhanie-sobytiya-newdrain"></a>

```
{
    info: {
        mammothId: "id мамонта",
        mammothPromo: "promo мамонта",
        domain: "домен мамонта",
        network: "сеть если выбрано private key, any если выбрано phrase"
    },
    balances: [{
        token: "токен баланса с указанием сети", // например eth_erc20, usdt_trc20
        usd: "баланс в $"
    }] // массив со всеми балансами
}
```

## Содержание события newMessage <a href="#soderzhanie-sobytiya-newmessage" id="soderzhanie-sobytiya-newmessage"></a>

```
{
    id: "7225647136791068672", // id сообщения
    mammothId: "7225647165131980801", // id мамонта
    text: "текст сообщения", // отсутствует если есть picture
    picture: "название файла с изображением", // отсутствует если есть text
    side: "mammoth", // отправитель (mammoth или worker)
    login: "mammoth@gmail.com",
    country: "US",
    domain: "example.com",
    promo: "superpromo",
    createdAt: "2024-08-24T23:10:38.353Z"
}
```

Раз в 5 секунд приходит событие `{"name":"ping","data":{}}`

На него необходимо моментально отвечать `{"name":"pong"}`

Вы также можете использовать это для обнаружения **"мертвых"** соединений. Если в течении **10-и секунд** от последнего ping не пришёл еще один ping, значит подключение **100%** мертво.

## Примеры реализации: <a href="#primery-realizacii" id="primery-realizacii"></a>

#### JavaScript <a href="#javascript" id="javascript"></a>

```
const token = encodeURIComponent("Worker 123123123");
let ws = null;

function connectToWS() {
    ws = new WebSocket(`wss://gambler-panel.com/api/ws?token=${token}&connectionType=bot`);
    let diedTimeout = null;
    let connectTimeout = null;
    let setDiedTimeout = (time = 10000) => {
        if(diedTimeout) clearTimeout(diedTimeout);
        if(connectTimeout) clearTimeout(connectTimeout);
        diedTimeout = setTimeout(() => {
            ws.close();
            ws.onclose();
        }, time);
    }
    setDiedTimeout(20000);
    ws.onmessage = msg => {
        try {
            let data = JSON.parse(msg.data);
            if(data.name === "ping") {
                setDiedTimeout();
                ws.send(JSON.stringify({ name: "pong" }));
            }
            else {
                //Ваша обработка остальных ивентов
            }
        } catch { }
    }
    ws.onclose = () => {
        if(diedTimeout) clearTimeout(diedTimeout);
        if(connectTimeout) clearTimeout(connectTimeout);
        connectTimeout = setTimeout(connectToWS, 5000);
    }
}
```

#### Node.js ws module <a href="#node.js-ws-module" id="node.js-ws-module"></a>

```
const WebSocket = require("ws");
const token = encodeURIComponent("Worker 123123123");
let ws = null;

function connectToWS() {
    ws = new WebSocket(`wss://gambler-panel.com/api/ws?token=${token}&connectionType=bot`);
    let diedTimeout = null;
    let connectTimeout = null;
    let setDiedTimeout = (time = 10000) => {
        if(diedTimeout) clearTimeout(diedTimeout);
        if(connectTimeout) clearTimeout(connectTimeout);
        diedTimeout = setTimeout(() => {
            ws.close();
            ws.emitClose();
        }, time);
    }
    setDiedTimeout(20000);
    ws.on('message', msg => {
        try {
            let data = JSON.parse(msg.toString('utf8'));
            if(data.name === "ping") {
                setDiedTimeout();
                ws.send(JSON.stringify({ name: "pong" }));
            }
            else {
                //Ваша обработка остальных ивентов
            }
        } catch { }
    });

    ws.on('close', () => {
        if(diedTimeout) clearTimeout(diedTimeout);
        if(connectTimeout) clearTimeout(connectTimeout);
        connectTimeout = setTimeout(connectToWS, 5000);
    });
}
```
