2026-03-09 16:05:44 +07:00
2026-03-09 16:05:44 +07:00

telemt-bot

Лёгкий Telegram-бот для админ-доступа к Telemt Control API.

Что умеет

  • /health -> GET /v1/health
  • /summary -> GET /v1/stats/summary
  • /users -> GET /v1/stats/users (первые 20 строк)
  • /create_user <username> -> POST /v1/users (создание пользователя + ссылки на подключение)

Команды обрабатываются только от одного админ-чата (TELEGRAM_ADMIN_CHAT_ID).

Переменные окружения

  • TELEGRAM_BOT_TOKEN - токен Telegram-бота.
  • TELEGRAM_ADMIN_CHAT_ID - chat id администратора, которому разрешены команды.
  • TELEMT_API_BASE_URL - базовый URL API, например http://host.docker.internal:9091.
  • TELEMT_API_AUTH_HEADER - значение заголовка Authorization для Telemt API (если включён auth_header).
  • TELEGRAM_HTTP_TIMEOUT_SECONDS - timeout запросов к Telegram (по умолчанию 60).
  • TELEMT_HTTP_TIMEOUT_SECONDS - timeout запросов к Telemt API (по умолчанию 5).
  • TELEMT_LINK_HOST - хост для генерации tg://proxy ссылок, если API их не вернуло.
  • TELEMT_LINK_PORT - порт для ссылок (по умолчанию 9443).
  • TELEMT_TLS_DOMAIN - TLS-домен для генерации EE-TLS ссылки (опционально).
  • ALL_PROXY, HTTPS_PROXY, HTTP_PROXY - прокси для исходящих запросов (Telegram API, Telemt API). Поддерживаются socks5://, socks5h://, http://, https://. Приоритет: ALL_PROXY → HTTPS_PROXY → HTTP_PROXY.

Быстрый старт (локально, Linux/bash)

cp .env.example .env
# отредактируй .env под свой Telemt и Telegram
docker compose up --build -d
docker compose logs -f

Запуск из Docker Registry

Через docker compose

Пример docker-compose.yml, который использует уже собранный образ из Gitea Registry:

services:
  telemt-bot:
    image: git.shts.su/denozord/telemt-bot:latest
    restart: unless-stopped
    environment:
      TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN}
      TELEGRAM_ADMIN_CHAT_ID: ${TELEGRAM_ADMIN_CHAT_ID}
      TELEMT_API_BASE_URL: ${TELEMT_API_BASE_URL}
      TELEMT_API_AUTH_HEADER: ${TELEMT_API_AUTH_HEADER}
      TELEGRAM_HTTP_TIMEOUT_SECONDS: ${TELEGRAM_HTTP_TIMEOUT_SECONDS:-60}
      TELEMT_HTTP_TIMEOUT_SECONDS: ${TELEMT_HTTP_TIMEOUT_SECONDS:-5}
      TELEMT_LINK_HOST: ${TELEMT_LINK_HOST}
      TELEMT_LINK_PORT: ${TELEMT_LINK_PORT:-9443}
      TELEMT_TLS_DOMAIN: ${TELEMT_TLS_DOMAIN:-}

Запуск (Linux/bash):

export TELEGRAM_BOT_TOKEN="xxx:telegram_bot_token"
export TELEGRAM_ADMIN_CHAT_ID="123456789"
export TELEMT_API_BASE_URL="http://host.docker.internal:9091"
export TELEMT_API_AUTH_HEADER="Bearer secret"
export TELEMT_LINK_HOST="172.20.0.3"
export TELEMT_LINK_PORT="9443"
export TELEMT_TLS_DOMAIN="tf.ivx.su"

docker compose up -d
docker compose logs -f

Через docker CLI (Linux/bash)

docker run -d \
  --name telemt-bot \
  --restart unless-stopped \
  -e TELEGRAM_BOT_TOKEN="xxx:telegram_bot_token" \
  -e TELEGRAM_ADMIN_CHAT_ID="123456789" \
  -e TELEMT_API_BASE_URL="http://host.docker.internal:9091" \
  -e TELEMT_API_AUTH_HEADER="Bearer secret" \
  -e TELEGRAM_HTTP_TIMEOUT_SECONDS="60" \
  -e TELEMT_HTTP_TIMEOUT_SECONDS="5" \
  -e TELEMT_LINK_HOST="172.20.0.3" \
  -e TELEMT_LINK_PORT="9443" \
  -e TELEMT_TLS_DOMAIN="tf.ivx.su" \
  git.shts.su/denozord/telemt-bot:latest

Почему решение экономное по ресурсам

  • Go-бинарник без рантайма и с нулевым CGO.
  • Long polling (getUpdates) вместо частых коротких запросов.
  • Один переиспользуемый http.Client и keep-alive соединения.
  • Multi-stage сборка и минимальный образ distroless.

CI/CD для Gitea Registry

Добавлен workflow: .gitea/workflows/docker-publish.yml.

Что делает:

  • при push в main, master, v* и при git tag v*;
  • собирает образ из Dockerfile;
  • пушит в registry git.shts.su/${REPO};
  • выставляет теги: latest, <branch-or-tag>, sha-<12-symbols>.

Нужно создать secret в Gitea репозитории:

  • ACTIONS_PAT - токен с правами на push в package/container registry.
S
Description
No description provided
Readme
156 KiB
Languages
Go 98.7%
Dockerfile 1.3%