DTF (DiscordTelegramFrontier) это отдельная библиотека, которая запускает команды Discord-бота из Telegram. Сын на ней стал кроссплатформенным в шестом ядре. Исходники лежат на GitHub, стек: .NET 10, Discord.Net и Telegram.Bot.
Почему так
Обычный путь сделать бота в двух мессенджерах выглядит так: написать второго бота и продублировать в нём логику. Каждая фича тогда пишется дважды, и версии со временем разъезжаются.
DTF идёт наоборот: команда пишется один раз, как обычная Discord-команда, и помечается атрибутом. Мост сам прогоняет её в Telegram и превращает ответ. Новая фича появляется в обоих мессенджерах одновременно, а логика, проверки прав и кулдауны остаются общими.
Как работает
- Сообщение приходит в Telegram.
- DTF находит команду через движок Discord.Net.
- Собирает контекст: настоящий сервер Discord и привязанного пользователя.
- Выполняет команду как есть.
- Перехватывает ответ и рисует его для Telegram.
Команда даже не знает, что её позвали из Telegram: она получает привычный контекст Discord и отвечает как обычно. Вместо настоящего канала Discord ей подсунут прокси-канал, который отправляет ответ в Telegram.
Как рисуется ответ
У каждой команды свой режим:
- текст: эмбед разбирается на заголовок, тело и подпись, разметка Discord переводится в разметку Telegram, картинка эмбеда уходит фото, гифки и Tenor анимацией, кастомные эмодзи превращаются в
:name:; - картинка: эмбед рисуется в PNG почти один в один с Discord, с колонками полей и эмодзи, это удобно для таблиц и карточек.
Упоминания Discord становятся @имя, а метки времени <t:...> превращаются в обычные даты.
Кнопки
Кнопки Discord превращаются в инлайн-клавиатуру Telegram. Нажатие запускает тот же обработчик, что и в Discord, а сообщение обновляется на месте. Меню выбора раскладывается в отдельные кнопки. Если кнопка устарела (прошёл час или бот перезапустился), Telegram честно об этом скажет.
Привязки
- чат ↔ сервер: Telegram-чат привязан к Discord-серверу, поэтому командам доступны его настройки и участники;
- аккаунт ↔ аккаунт: Telegram-пользователя можно привязать к Discord-пользователю. Тогда проверки прав видят в нём участника сервера.
Без привязок работают команды, которым ничего не нужно знать о сервере, например погода или курсы.
Чего не умеет
Голос и музыку, реакции, модальные окна, выбор ролей и каналов. Поэтому в списке команд метка Tg стоит только у того, что действительно работает.