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

# API DOCS | WebSockets - NEW

{% hint style="warning" %}
Важно! Мы были вынуждены изменить получение данных по сокетам для стабильной работы в панели, извиняемся за неудобства.&#x20;

В данный момент новые сокеты уже работают, а старые перестали работать после 21.02.25 00:00.
{% endhint %}

{% hint style="danger" %}
**Важно! Для того, чтобы бот работал необходимо скинуть IP-адрес сервера администраторам -** <https://t.me/gamblerworkmain> / <https://t.me/lord_gamb>
{% endhint %}

## Новые сокеты

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

`:token - "Worker $authToken"`

`:cType - "bot"`&#x20;

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

<pre class="language-json"><code class="lang-json">{ 
  "name": "имя_события",
  "data": { 
<strong>     /* содержание события, 
</strong>     идентично тому что было раньше (API Docs | Socket.io) */
      }
}
</code></pre>

## Содержание события newDeposit

```javascript
{
    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

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

## Содержание события newMessage

```javascript
{
    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%** мертво.

## Примеры реализации:

### JavaScript

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

function connectToWS() {
    ws = new WebSocket(`wss://gambler-panel.is/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

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

function connectToWS() {
    ws = new WebSocket(`wss://gambler-panel.is/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);
    });
}
```
