Files
mtproxy_checker/cmd/tdlib_ping/README.md
T
2026-04-11 16:23:28 +07:00

61 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# tdlib_ping — официальный JSON-интерфейс TDLib
Бинарник вызывает **`td_create_client_id` / `td_send` / `td_receive` / `td_execute`** из [`td/telegram/td_json_client.h`](https://github.com/tdlib/td/blob/master/td/telegram/td_json_client.h) (рекомендуемый multi-client API), без Node.js.
Контракт stdout — одна строка JSON для `mtproxy_checkerd`:
`{"ok":true,"error":"","exit_code":0}`
## Сборка в CI (Gitea)
В репозитории есть workflow **`.gitea/workflows/tdlib_ping.yaml`**:
- при push тега вида **`v*`** собирается **`tdlib_ping-linux-amd64`** и прикрепляется к **релизу** с этим тегом (релиз создаётся автоматически, если его ещё нет);
- у каждого прогона файл также лежит в **артефактах** job (удобно для `workflow_dispatch` с ветки).
Скачайте бинарник со страницы релиза или из вкладки Actions → нужный run → Artifacts. На сервере положите в каталог вроде `/usr/local/bin`, выставьте `chmod +x`, задайте `MTPROXY_TDLIB_HELPER`.
## Сборка
Linux (Debian/Ubuntu), установите заголовки и библиотеку, например:
```bash
sudo apt-get install -y libtdjson-dev # имя пакета может отличаться по дистрибутиву
export CGO_ENABLED=1
go build -tags=tdlib -o tdlib_ping ./cmd/tdlib_ping
```
macOS: `brew install tdlib`, затем при необходимости `export PKG_CONFIG_PATH=...` если `pkg-config --libs tdlib` находит `-ltdjson`.
Без `libtdjson` линковка завершится ошибкой — это ожидаемо.
Сборка **без** тега (как часть `go build ./...`):
```bash
go build ./cmd/tdlib_ping
```
получится заглушка, которая печатает JSON с `exit_code: 2` и пояснением — чтобы репозиторий собирался без TDLib.
## Переменные окружения
| Переменная | По умолчанию | Назначение |
|------------|--------------|------------|
| `MTPROXY_TD_API_ID` | `12345` | Замените на значение с [my.telegram.org](https://my.telegram.org) |
| `MTPROXY_TD_API_HASH` | демо-строка из примера TDLib | Замените на свой `api_hash` |
| `MTPROXY_TDLIB_PING_MS` | `45000` | Общий дедлайн цикла (мс) |
| `MTPROXY_TDLIB_DATABASE_DIR` | пусто | Если задан — постоянный каталог для `database_directory` / `files_directory` (подкаталоги `db/` и `files/` создаются автоматически). Иначе — временный каталог на каждый запуск |
| `MTPROXY_TD_USE_TEST_DC` | пусто | Если `1``use_test_dc: true` в `setTdlibParameters` (иногда помогает обойти ожидание телефона на «чистой» БД) |
## Запуск
```bash
./tdlib_ping 'tg://proxy?server=HOST&port=PORT&secret=HEX'
```
Если **`MTPROXY_TDLIB_DATABASE_DIR`** не задан, каталоги БД TDLib создаются под уникальным префиксом во временном каталоге на каждый запуск (и удаляются после выхода).
## Ограничение
При первом запуске с «чистой» БД TDLib может перейти в **`authorizationStateWaitPhoneNumber`**. Тогда helper завершится с ошибкой в JSON — нужен уже проинициализированный `database_directory` или рабочий сценарий входа. Для типичного мониторинга MTProxy на выделенной машине обычно достаточно повторных запусков с фиксированным каталогом (`MTPROXY_TDLIB_DATABASE_DIR`, см. таблицу выше).