← база знаний

DTF

DTF (DiscordTelegramFrontier) это отдельная библиотека, которая запускает команды Discord-бота из Telegram. Сын на ней стал кроссплатформенным в шестом ядре. Исходники лежат на GitHub, стек: .NET 10, Discord.Net и Telegram.Bot.

Почему так

Обычный путь сделать бота в двух мессенджерах выглядит так: написать второго бота и продублировать в нём логику. Каждая фича тогда пишется дважды, и версии со временем разъезжаются.

DTF идёт наоборот: команда пишется один раз, как обычная Discord-команда, и помечается атрибутом. Мост сам прогоняет её в Telegram и превращает ответ. Новая фича появляется в обоих мессенджерах одновременно, а логика, проверки прав и кулдауны остаются общими.

Как работает

  1. Сообщение приходит в Telegram.
  2. DTF находит команду через движок Discord.Net.
  3. Собирает контекст: настоящий сервер Discord и привязанного пользователя.
  4. Выполняет команду как есть.
  5. Перехватывает ответ и рисует его для Telegram.

Команда даже не знает, что её позвали из Telegram: она получает привычный контекст Discord и отвечает как обычно. Вместо настоящего канала Discord ей подсунут прокси-канал, который отправляет ответ в Telegram.

Как рисуется ответ

У каждой команды свой режим:

  • текст: эмбед разбирается на заголовок, тело и подпись, разметка Discord переводится в разметку Telegram, картинка эмбеда уходит фото, гифки и Tenor анимацией, кастомные эмодзи превращаются в :name:;
  • картинка: эмбед рисуется в PNG почти один в один с Discord, с колонками полей и эмодзи, это удобно для таблиц и карточек.

Упоминания Discord становятся @имя, а метки времени <t:...> превращаются в обычные даты.

Кнопки

Кнопки Discord превращаются в инлайн-клавиатуру Telegram. Нажатие запускает тот же обработчик, что и в Discord, а сообщение обновляется на месте. Меню выбора раскладывается в отдельные кнопки. Если кнопка устарела (прошёл час или бот перезапустился), Telegram честно об этом скажет.

Привязки

  • чат ↔ сервер: Telegram-чат привязан к Discord-серверу, поэтому командам доступны его настройки и участники;
  • аккаунт ↔ аккаунт: Telegram-пользователя можно привязать к Discord-пользователю. Тогда проверки прав видят в нём участника сервера.

Без привязок работают команды, которым ничего не нужно знать о сервере, например погода или курсы.

Чего не умеет

Голос и музыку, реакции, модальные окна, выбор ролей и каналов. Поэтому в списке команд метка Tg стоит только у того, что действительно работает.