# DSH Telegram Bridge (todayer) Мобильный Telegram-мост (бот) для **DeepSeek Harness (dsh)**: управляйте локальными сессиями, топиками и медиа прямо из Telegram. Основан на [`hi-wenw/dsh-telegram-channel`](https://github.com/hi-wenw/dsh-telegram-channel) и расширен механизмами Telegram-гейта агента [Hermes](https://github.com/NousResearch/hermes-agent). > **Быстрый старт:** `dsh plugin --profile web add github:todayer/todayer-dsh-telegram-bridge` --- ## Возможности - 🧵 **Сессии per chat/topic** — каждый топик (форум / DM-топик) = отдельная сессия; ответы бота уходят в ту же ветку. - 📌 **Топики** — `message_thread_id`, корректная отправка в General (`1`), `createForumTopic`/`editForumTopic`/`deleteForumTopic`; **авто-переименование топика по заголовку сессии**. - 💬 **DM Topics (Bot API 9.4)** — топики прямо в личке, каждый = изолированная сессия; лобби-режим корня. (`DSH_TELEGRAM_DM_TOPICS`) - 👥 **Гейтинг групп** — `require_mention`, `allowed_chats`, `allowed_topics`, `free_response_chats/topics`, `guest_mode`, `ignored_threads`. - 🖼 **Медиа-вход/выход** — приём фото/видео/голосовых/файлов/стикеров; нативная отправка файлов по тегам `MEDIA:/путь`. - ⌨️ **Команды** — `/new /reset /stop /sessions /last /model /status /unbind /help`. - ✅ **Статус-индикатор** Online/Offline (`setMyShortDescription`). - 🛡 **Фильтр тулов** — `` не утекают в Telegram. - 🔥 **Поллинг-устойчивость** (конфликт 409 + экспоненциальный backoff). - 🔘 **Choice/clarify** — `ask_user_question` → инлайн-кнопки (при доступном `userQuestions`). - 🌐 **Двуязычный** — русский и английский (`DSH_TELEGRAM_LANG=ru|en`). ## Установка/подключение > Требуются: Node ≥ 22, `dsh web` с моделью, бот от `@BotFather`. ```bash # локально (с этой машины) dsh plugin --profile web add ./dsh-telegram-channel-local # из репозитория dsh plugin --profile web add github:todayer/todayer-dsh-telegram-bridge # или из tarball dsh plugin --profile web add ./dsh-telegram-channel-0.3.5.tgz ``` ## Настройка (`~/.dsh/telegram.env`) ```ini # обязательные DSH_TELEGRAM_TOKEN=123456789:AA... # от @BotFather DSH_TELEGRAM_ALLOWED_USER_IDS=123456789 # ваш user id (от @userinfobot) # опционально — топики/группы DSH_TELEGRAM_LANG=ru # ru | en DSH_TELEGRAM_REQUIRE_MENTION=false DSH_TELEGRAM_ALLOWED_CHATS= DSH_TELEGRAM_ALLOWED_TOPICS= DSH_TELEGRAM_FREE_RESPONSE_CHATS= DSH_TELEGRAM_FREE_RESPONSE_TOPICS= DSH_TELEGRAM_GUEST_MODE=false DSH_TELEGRAM_IGNORED_THREADS= # топики в личке (JSON) DSH_TELEGRAM_DM_TOPICS=[{"chatId":1212123,"topics":[{"name":"Общее"}]}] # статус-индикатор DSH_TELEGRAM_STATUS_INDICATOR=1 DSH_TELEGRAM_STATUS_ONLINE=🟢 Online DSH_TELEGRAM_STATUS_OFFLINE=🔴 Offline ``` Пропишите в `EnvironmentFile` сервиса `dsh.service` и перезапустите: ```bash sudo systemctl restart dsh.service ``` ## Команды бота | Команда | Назначение | |---|---| | `/start` | Справка | | `/sessions` | Список сессий по рабочим областям + прикрепление | | `/new` | Создать новую сессию (force-new) | | `/reset` | Алиас `/new` | | `/last` | Прошлый диалог привязанной сессии | | `/model` | Сменить модель | | `/status` | Текущая привязка | | `/stop` | Остановить и отвязать | | `/unbind` | Отвязаться (без удаления) | | `/help` | Полный список | ## Структура ``` lib/ bridge.js — основная логика (обработка сообщений, топики, сессии, команды) client.js — Telegram Bot API клиент (поллинг, файлы, топики) catalog.js — каталог сессий/рабочих областей commands.js — команды и сообщения (двуязычный) format.js — форматирование/очистка (в т.ч. stripToolCalls) history.js — «прошлый диалог» index.js — регистрация плагина (Config/inject) ... ``` ## Лицензия [MIT](./LICENSE) ## Оригинал Основано на [hi-wenw/dsh-telegram-channel](https://github.com/hi-wenw/dsh-telegram-channel). Механика расширена по мотивам Telegram-гейта [Hermes Agent](https://github.com/NousResearch/hermes-agent). --- **English:** [README.md](./README.md)