Сервис пересылает сообщения между указанными каналами Discord и чатами Telegram.
- Откройте Discord Developer Portal.
- Создайте новое приложение (
New Application). - В разделе Bot добавьте бота (
Add Bot). - Скопируйте токен бота — это значение для
DISCORD_BOT_TOKEN. - В разделе Privileged Gateway Intents включите как минимум:
MESSAGE CONTENT INTENT
- Откройте
@BotFatherв Telegram. - Выполните команду
/newbotи следуйте шагам. - Скопируйте токен — это значение для
TELEGRAM_BOT_TOKEN.
- Пригласите бота на сервер через OAuth2 URL (Scopes:
bot, Bot Permissions: минимумView Channels,Send Messages,Read Message History). - В Discord включите Developer Mode (User Settings → Advanced).
- Правой кнопкой по нужному каналу → Copy Channel ID.
- Добавьте этот ID в объект
BRIDGE_PAIRSкакdiscord_channel_id.
- Добавьте бота в нужный чат/группу/канал.
- Выдайте боту права на чтение и отправку сообщений (для канала — сделайте бота администратором).
- Получите
chat id:- отправьте сообщение в чат,
- выполните запрос:
https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/getUpdates, - найдите поле
chat.idв ответе.
- Добавьте этот ID в объект
BRIDGE_PAIRSкакtelegram_chat_id.
Создайте файл .env в корне проекта:
DISCORD_BOT_TOKEN=your_discord_bot_token
TELEGRAM_BOT_TOKEN=your_telegram_bot_token
BRIDGE_PAIRS=[{"discord_channel_id":123456789012345678,"telegram_chat_id":-1001234567890}]
# Опционально
# BRIDGE_PAIRS=[{"discord_channel_id":123456789012345678,"telegram_chat_id":-1001234567890},{"discord_channel_id":223456789012345678,"telegram_chat_id":-1002234567890},{"discord_channel_id":323456789012345678,"telegram_chat_id":-1003234567890,"telegram_thread_id":42}]
# BRIDGE_PAIRS_STORE_PATH=data/bridge_pairs.json
# WHITELIST_USERS=["alice", "12345"]
# BLACKLIST_USERS=[]
# EXCLUDED_COMMANDS=["/start","!admin"]
# IGNORE_BOTS=true
# DEDUP_TTL_SECONDS=300
# DEDUP_REDIS_URL=redis://redis:6379/0
# HEARTBEAT_INTERVAL_SECONDS=60
# ADMIN_TOKEN=change_me
# ADMIN_HOST=0.0.0.0
# ADMIN_PORT=8080BRIDGE_PAIRS — обязательная переменная окружения. Укажите в ней непустой JSON-массив пар маппинга.
Примеры BRIDGE_PAIRS:
-
Обычный канал/чат (без темы):
-
Форум/тема в Telegram (
telegram_thread_id):[ { "discord_channel_id": 123456789012345678, // ID канала Discord "telegram_chat_id": -1001234567890, // ID Telegram-чата, где есть тема "telegram_thread_id": 42 // ID темы (topic/thread) внутри этого Telegram-чата } ]
- Используются одинарные кавычки вместо двойных:
- неверно:
{'discord_channel_id': 123} - верно:
{"discord_channel_id": 123}
- неверно:
- Пропущена запятая между полями или объектами массива.
- ID переданы как строки, а не как целые числа:
- неверно:
"discord_channel_id": "123456789012345678" - верно:
"discord_channel_id": 123456789012345678
- неверно:
- Лишняя запятая в конце объекта/массива:
- неверно:
[{"discord_channel_id": 123,}]
- неверно:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python -m src.maindocker compose up --buildАдмин-панель доступна по http://localhost:8080/ (или вашему ADMIN_PORT).
Для API и страницы используется заголовок Authorization: Bearer <ADMIN_TOKEN>.
GET /api/bridge-pairsPOST /api/bridge-pairsPUT /api/bridge-pairs/{id}DELETE /api/bridge-pairs/{id}
-
Лимиты API
- Discord и Telegram ограничивают частоту запросов.
- При всплесках сообщений возможны задержки доставки из-за rate limits.
-
Потери форматирования при пересылке
- Некоторые элементы форматирования (упоминания, вложения, спец-разметка, эмодзи/стикеры) могут отображаться иначе или теряться при переносе между платформами.
-
Политика приватности и хранение сообщений
- Бот обрабатывает содержимое сообщений для пересылки.
- Логи и внешние хранилища (например, Redis для дедупликации) могут временно содержать служебные данные.
- Перед использованием убедитесь, что это соответствует политике приватности вашей команды и требованиям платформ.
[ { "discord_channel_id": 123456789012345678, // ID канала Discord (целое число, без кавычек) "telegram_chat_id": -1001234567890 // ID чата/канала Telegram (обычно отрицательное число) } ]