Back to home@todayer

todayer-dsh-telegram-bridge

DeepSeek Harness Telegram bridge (bot) plugin, Hermes-style: per-topic sessions, DM topics, group gating, media, commands. Fork/extension of hi-wenw/dsh-telegram-channel.

Stars
0
Language
JavaScript
Created
Aug 24, 2026
Updated
Aug 25, 2026
GitHub repo

Introduction

DSH Telegram Bridge (todayer)

Telegram bridge (bot) for DeepSeek Harness (dsh): manage local sessions, topics and media right from Telegram. Based on hi-wenw/dsh-telegram-channel and extended with mechanisms from the Telegram gateway of the Hermes agent.

Quick start: dsh plugin --profile web add github:todayer/todayer-dsh-telegram-bridge


Features

  • 🧵 Per-chat/topic sessions — each topic (forum / DM topic) is its own session; bot replies land in the same thread.
  • 📌 Topicsmessage_thread_id, correct handling of the General topic (1), createForumTopic/editForumTopic/deleteForumTopic; auto-renames the topic to the session title.
  • 💬 DM Topics (Bot API 9.4) — topics right in a 1-on-1 chat, each an isolated session; root-DM lobby mode. (DSH_TELEGRAM_DM_TOPICS)
  • 👥 Group gatingrequire_mention, allowed_chats, allowed_topics, free_response_chats/topics, guest_mode, ignored_threads.
  • 🖼 Media in/out — accept photos/videos/voices/files/stickers; send files natively via MEDIA:/path tags.
  • ⌨️ Commands/new /reset /stop /sessions /last /model /status /unbind /help.
  • Status indicator Online/Offline (setMyShortDescription).
  • 🛡 Tool-call filter<tool_calls> never leak into Telegram.
  • 🔥 Polling resilience (409 conflict + exponential backoff).
  • 🔘 Choice/clarifyask_user_question → inline buttons (when userQuestions is available).
  • 🌐 Bilingual — Russian and English (set DSH_TELEGRAM_LANG=ru|en).

Install

Requires: Node ≥ 22, dsh web with a model, and a bot from @BotFather.

# locally (from this machine)
dsh plugin --profile web add ./dsh-telegram-channel-local

# from the repository
dsh plugin --profile web add github:todayer/todayer-dsh-telegram-bridge
# or from tarball
dsh plugin --profile web add ./dsh-telegram-channel-0.3.5.tgz

Configuration (~/.dsh/telegram.env)

# required
DSH_TELEGRAM_TOKEN=123456789:AA...            # from @BotFather
DSH_TELEGRAM_ALLOWED_USER_IDS=123456789        # your user id (from @userinfobot)

# optional — topics/groups
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=

# DM topics (JSON)
DSH_TELEGRAM_DM_TOPICS=[{"chatId":1212123,"topics":[{"name":"General"}]}]

# status indicator
DSH_TELEGRAM_STATUS_INDICATOR=1
DSH_TELEGRAM_STATUS_ONLINE=🟢 Online
DSH_TELEGRAM_STATUS_OFFLINE=🔴 Offline

Put these in the EnvironmentFile of the dsh.service and restart:

sudo systemctl restart dsh.service

Bot commands

CommandPurpose
/startWelcome / help
/sessionsList sessions by workspace + attach
/newCreate a new session (force-new)
/resetAlias for /new
/lastLast turn of the bound session
/modelSwitch model
/statusCurrent binding
/stopStop and detach
/unbindDetach (without deleting)
/helpFull command list

Structure

lib/
  bridge.js      — core logic (message handling, topics, sessions, commands)
  client.js      — Telegram Bot API client (polling, files, topics)
  catalog.js     — sessions/workspaces catalog
  commands.js    — commands and messages (bilingual)
  format.js      — formatting/cleanup (incl. stripToolCalls)
  history.js     — "last turn"
  index.js       — plugin registration (Config/inject)
  ...

License

MIT

Origin

Based on hi-wenw/dsh-telegram-channel. Mechanics extended following the Telegram gateway of Hermes Agent.


Русский: README.ru.md