# 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);
    });
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.gambler-partners.is/dlya-tsov/api-docs-or-websockets-new.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
