# Opengram *Читать на других языках: [English](README.en.md)* Opengram — это самостоятельный сервер Telegram, написанный на C# (.NET 9). Проект является форком [mytelegram](https://github.com/loyldg/mytelegram) и реализует серверную часть API Telegram (MTProto), которую можно развернуть на собственной инфраструктуре. Наш телеграм канал: https://t.me/opengrame ## Возможности - MTProto-транспорты (Abridged, Intermediate), layer 216; - личные чаты, группы, супергруппы и каналы; - секретные (end-to-end) чаты; - голосовые и видеозвонки (через TURN/STUN и SFU mediasoup); - боты и Bot API; - настройки приватности и двухфакторная аутентификация; - стикеры, реакции, кастомные эмодзи; - звёзды (Stars) и подарки (Star Gifts), включая перепродажу и апгрейд; - истории (Stories), темы оформления и обои; - запланированные и самоудаляющиеся сообщения. ## Архитектура Сервер состоит из набора микросервисов, которые запускаются через Docker Compose: | Сервис | Назначение | | --- | --- | | `gateway-server` | Точка входа для MTProto-подключений клиентов | | `auth-server` | Авторизация и обмен ключами | | `session-server` | Хранение сессий и маршрутизация обновлений | | `messenger-command-server` | Обработка команд (запись, CQRS) | | `messenger-query-server` | Обработка запросов (чтение, CQRS) | | `bot-api-server` | HTTP Bot API | | `admin-api` | Служебный API администрирования | | `file-server` / `file-merge-proxy` | Хранение и раздача файлов | | `turn-server` | TURN/STUN для звонков | | `sms-sender` | Отправка кодов подтверждения | | `data-seeder` | Первичное наполнение базы данных | Инфраструктура: MongoDB (хранилище и event store), Redis (кеш), RabbitMQ (шина событий), MinIO (объектное хранилище файлов). Дополнительные компоненты репозитория: - `mediasoup-server/` — SFU для групповых видеозвонков (Node.js); - `stargift-admin/` — веб-панель управления подарками (backend на Node.js, frontend на React); - `scripts/` — вспомогательные скрипты запуска и тестовые боты. ## Быстрый старт (Docker) Потребуются Docker и Docker Compose. 1. Перейдите в каталог с compose-файлом: ```bash cd docker/compose ``` 2. Откройте файл `.env` и задайте свои значения вместо плейсхолдеров `CHANGE_ME` (пароли MongoDB, Redis, RabbitMQ, MinIO, ключ Admin API), а также укажите внешний IP-адрес сервера в параметрах `App__WebRtcConnections` и `App__DcOptions`. 3. Сгенерируйте RSA-ключи MTProto и положите их в `docker/compose/secrets/mtproto/` (см. `secrets/mtproto/README.md`). 4. Запустите сервисы: ```bash docker compose up -d ``` Часть сервисов (в том числе `messenger-query-server`) собирается локально из исходников, а не скачивается из реестра, поэтому `docker login` не требуется. При первом запуске образы соберутся автоматически. Чтобы пересобрать их вручную: ```bash docker compose build docker compose up -d ``` После старта подключите клиент Telegram, прописав адрес вашего дата-центра. ## Сборка из исходников Для сборки нужен .NET 9 SDK. ```bash cd source dotnet build MyTelegram.sln -c Release ``` Скрипты сборки Docker-образов лежат в каталоге `build/`. ## Конфигурация Все настройки задаются через переменные окружения (файл `.env`) либо через `appsettings.json` отдельных сервисов. В репозитории все значения паролей и ключей заменены на плейсхолдеры `CHANGE_ME` — перед запуском замените их на свои. Не храните реальные пароли и приватные ключи в репозитории. ## Лицензия и происхождение Проект основан на [mytelegram](https://github.com/loyldg/mytelegram). Все права на оригинальный код принадлежат его авторам; уважайте условия лицензии исходного проекта и товарные знаки Telegram.