Files
mtproxy_checker/cmd/tdlib_ping/README.md
T
Denozordec 07e35c5c87
Publish mtproxy_checker Docker image / test (push) Successful in 6s
Build tdlib_ping (linux/amd64) / build-tdlib-ping (push) Failing after 1m6s
Publish mtproxy_checker Docker image / build-and-push (push) Successful in 51s
Update tdlib_ping workflow to use Ubuntu 22.04 for compatibility with libtdjson-dev. Revise README to highlight the absence of the package in Ubuntu 24.04 and provide installation guidance for alternative distributions.
2026-04-11 16:27:00 +07:00

63 lines
4.6 KiB
Markdown

# 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`** (те же триггеры, что и у публикации Docker: push по **любой ветке** и **любому тегу**, плюс `workflow_dispatch`):
- при push **тега** собирается **`tdlib_ping-linux-amd64`** и прикрепляется к **релизу** с этим тегом (релиз создаётся автоматически, если его ещё нет);
- при push **ветки** или ручном запуске — только **артефакт** прогона в Actions.
Скачайте бинарник со страницы релиза или из вкладки Actions → нужный run → Artifacts. На сервере положите в каталог вроде `/usr/local/bin`, выставьте `chmod +x`, задайте `MTPROXY_TDLIB_HELPER`.
## Сборка
Linux (Debian/Ubuntu), установите заголовки и библиотеку, например:
**Важно:** в **Ubuntu 24.04 (Noble)** пакета **`libtdjson-dev` в официальном apt нет** (ошибка `Unable to locate package`). Используйте **22.04 (Jammy)** / **Debian bookworm** или [сборку TDLib из исходников](https://github.com/tdlib/td#building).
```bash
sudo apt-get install -y libtdjson-dev # Jammy/Bookworm и др.; имя может отличаться по дистрибутиву
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`, см. таблицу выше).