-
released this
2026-05-20 10:34:47 +03:00 | 244 commits to main since this release🛠 Minor 2.5.0 — Discord join/leave с лимитами и waitlist
Релиз закрывает issue #29: Discord schedule messages теперь обрабатывают кнопки Join/Leave через общую platform-neutral бизнес-логику, включая лимит мест, waitlist, повторные клики и обновление расписания после изменения состава.
✅ Решённые issues
- #29 — feat: подключить Discord join/leave с лимитами и waitlist
🧩 Что вошло в релиз
src/GmRelay.DiscordBot/Features/Sessions/DiscordSessionInteractionModule.cs— обработка Discord component interactionsjoin_session/leave_sessionс deferred ephemeral ответами.src/GmRelay.DiscordBot/Features/Sessions/DiscordSessionInteractionMapper.cs— маппинг Discord interaction payload в platform-neutral команды.src/GmRelay.Shared/Features/Sessions/CreateSession/JoinSessionHandler.csиLeaveSessionHandler.cs— общие handlers для Telegram и Discord, с сохранением лимитов, waitlist и stale-session поведения.src/GmRelay.Shared/Features/Sessions/CreateSession/ScheduleMessageUpdateLock.cs— сериализация обновлений одного schedule message при конкурентных кликах.src/GmRelay.Shared/DapperAotModule.csиGmRelay.Shared.csproj— Dapper.AOT включён в shared assembly, где теперь находятся Dapper call-sites для join/leave.README.mdиdocs/c4-system-context.md— документация обновлена под Discord join/leave flow.- Тесты — добавлены проверки Discord interaction mapping/module, lock behavior, stale cancelled join guard и Dapper.AOT конфигурации Shared.
- Синхронизированы версии:
Directory.Build.props,NavMenu.razor,compose.yaml,deploy.yml,README.md→2.5.0.
🛡 Что это даёт
- Игроки могут записываться и выходить из Discord-сессий кнопками прямо в расписании.
- При заполненном лимите Discord-пользователь попадает в waitlist, а при освобождении места первый ожидающий продвигается.
- Telegram и Discord используют одну бизнес-логику join/leave, что снижает риск расхождения поведения.
- Конкурентные клики по одной сессии не должны приводить к stale schedule edits.
📦 Версия и деплой
Downloads
-
Release v2.4.0
Stablereleased this
2026-05-19 12:54:40 +03:00 | 247 commits to main since this releaseDiscord /newsession and /listsessions. See PR #85.
Downloads
-
released this
2026-05-18 19:03:10 +03:00 | 256 commits to main since this release🛠 Версия 2.3.0 — Реализация DiscordSessionBatchRenderer
Реализован рендерер расписания сессий для Discord (Embed + Buttons).
🧩 Что вошло в релиз
src/GmRelay.DiscordBot/Rendering/DiscordSessionBatchRenderer.cs— рендерер Embed + Button на NetCordtests/GmRelay.Bot.Tests/Rendering/DiscordSessionBatchRendererTests.cs— 7 тестов на key states- Удалён старый stub
src/GmRelay.Shared/Rendering/DiscordSessionBatchRenderer.cs - Синхронизированы версии:
Directory.Build.props,NavMenu.razor,compose.yaml,deploy.yml→ 2.3.0
🗡 Что это даёт
- Один и тот же
SessionBatchViewModelможно отрисовать и в Telegram, и в Discord - Discord-бот получает rich embed с игрой, датой, игроками, заполненностью, листом ожидания и статусом
- Кнопки actions мапятся в platform-neutral command payload (
{actionKey}:{sessionId})
📦 Версия и деплой
Downloads
-
released this
2026-05-18 16:19:45 +03:00 | 260 commits to main since this release🛠 Minor 2.2.0 — Discord Gateway worker
Релиз закрывает issue #26: в solution добавлен отдельный Discord worker на NetCord Gateway. Telegram worker остается отдельным сервисом и не получает Discord-зависимости.
✅ Решённые issues
- #26 — feat: добавить
src/GmRelay.DiscordBotна NetCord Gateway
🧩 Что вошло в релиз
src/GmRelay.DiscordBot— новый .NET worker с NetCord Gateway, slash-командой/ping, component interaction service registration и lifecycle logging.DiscordOptions— явная startup-валидацияDiscord:Token/Discord__Tokenбез записи значения токена в репозиторий.compose.yaml— добавлен сервисdiscordс тем же PostgreSQL connection string и отдельнымDISCORD_BOT_TOKEN.src/GmRelay.AppHost— Discord worker подключен к Aspire orchestration и PostgreSQL resource..gitea/workflows— PR checks собирают Discord project; deploy собирает, пушит, сканирует и поднимает Docker-образgmrelay-discord-bot.README.md— обновлены версия, env-настройки и структура проекта.- Тесты — добавлен TDD-срез на project isolation, token validation, startup wiring, runtime wiring и version synchronization.
- Синхронизированы версии:
Directory.Build.props,NavMenu.razor,compose.yaml,deploy.yml,README.md→2.2.0.
🛡 Что это даёт
- Discord adapter можно развивать независимо от Telegram worker без отката Telegram-сервиса при изменениях Discord-интеграции.
- Production path явно падает без
Discord__Token, а секрет хранится в Gitea Actions secrets. - CI/CD теперь покрывает новый Discord Docker image теми же build/scan/deploy шагами.
📦 Версия и деплой
Downloads
- #26 — feat: добавить
-
released this
2026-05-18 13:46:24 +03:00 | 262 commits to main since this release🔧 Patch 2.1.1 — platform-neutral запись и выход
Join/leave interactions больше не завязаны на Telegram-specific command model. Telegram callback-и остаются прежними, но router переводит их в platform-neutral
PlatformUser,PlatformGroupиPlatformMessageRef, чтобы следующий Discord-срез мог переиспользовать ту же бизнес-логику.🧩 Что вошло в релиз
JoinSessionHandler— принимает platform-neutral identity, пишет игроков по(platform, external_user_id)и обновляет расписание черезIPlatformMessenger.LeaveSessionHandler— ищет участника по platform-neutral identity, сохраняя текущую семантику выхода, лимита мест и waitlist promotion.UpdateRouter— адаптирует текущие Telegram callback datajoin_session/leave_sessionв neutral command model.V017__allow_platform_neutral_players.sql— разрешает игроков без legacytelegram_idдля non-Telegram платформ.- Тесты — добавлен TDD-срез на neutral command model, SQL-инварианты и миграцию V017.
- Синхронизированы версии:
Directory.Build.props,NavMenu.razor,compose.yaml,deploy.yml→2.1.1.
🛡 Что это даёт
- Discord-интеграция сможет использовать join/leave flow без Telegram types в handler-ах.
- Telegram кнопки записи и выхода сохраняют прежние callback data и пользовательскую семантику.
- Waitlist и лимит мест остаются защищены существующими правилами и новыми regression tests.
📦 Версия и деплой
Downloads
-
released this
2026-05-18 11:35:35 +03:00 | 264 commits to main since this release🎨 Patch 2.1.0 — Редизайн дашборда в стиле fantasy RPG
Полный редизайн панели управления GM-Relay с атмосферой тёмного fantasy.
🧩 Что вошло в релиз
src/GmRelay.Web/wwwroot/app.css— полная переработка стилей: glass-morphism карточки, градиентные рамки, анимации, шрифты Cinzel + Jurasrc/GmRelay.Web/Components/App.razor— обновлены Google Fonts (Cinzel Decorative, Cinzel, Jura)src/GmRelay.Web/Components/Layout/NavMenu.razor.css— стили навигации под новый дизайнsrc/GmRelay.Web/Components/Layout/MainLayout.razor.css— обновления макета- Удалена директория
k8s/— манифесты перенесены в репозиторийToutsu/gmrelay-k8s - Синхронизированы версии:
Directory.Build.props,NavMenu.razor,compose.yaml,deploy.yml→ 2.1.0
🗡 Что это даёт
- Дашборд выглядит как полноценное RPG-приложение, а не generic Bootstrap
- Улучшена читаемость и визуальная иерархия
- Единый стиль для всех компонентов
📦 Версия и деплой
Downloads
-
released this
2026-05-15 19:00:03 +03:00 | 268 commits to main since this release🔧 Patch 2.0.1 — Platform messenger contracts
Релиз закрывает issue #24: в shared-слое появились платформенно-нейтральные контракты для пользователей, групп и отправки сообщений, а Telegram-поток переведён на adapter без изменения поведения.
✅ Решённые issues
- #24 — refactor: ввести
PlatformKind,PlatformUser,PlatformGroupиIPlatformMessenger
🧩 Что вошло в релиз
src/GmRelay.Shared/Platform— добавленыPlatformKind,PlatformUser,PlatformGroup,PlatformMessageRef,PlatformScheduleMessage,PlatformPrivateMessage,PlatformInteractionReply,PlatformCalendarFileиIPlatformMessenger.src/GmRelay.Bot/Infrastructure/Telegram/TelegramPlatformMessenger.cs— Telegram adapter для schedule create/update, group/private messages, callback answers и calendar files.src/GmRelay.Bot/Infrastructure/Telegram/TelegramPlatformIds.cs— конвертация Telegram chat/user/message identifiers в neutral platform records.- Session flows Join/Leave/Cancel/Promote/Reschedule/Calendar — outbound Telegram work переведён на
IPlatformMessengerтам, где это покрывает новый контракт. TelegramPlatformMessenger.UpdateScheduleAsync— добавлена валидация platform и group/thread identity для existing message reference перед редактированием.tests/GmRelay.Bot.Tests/Platform/PlatformContractsTests.cs,TelegramPlatformMessengerSourceTests.cs,TelegramPlatformMessengerTests.cs— TDD coverage для neutral contracts, adapter wiring и schedule-update target validation.- Синхронизированы версии:
Directory.Build.props,NavMenu.razor,compose.yaml,.gitea/workflows/deploy.yml,README.md→2.0.1.
🗡 Что это даёт
- DiscordBot и будущие adapters могут ссылаться на shared messaging contract без зависимости от Telegram assemblies.
- Telegram-specific отправка и редактирование расписаний сконцентрированы в одном adapter-е.
- Существующее Telegram-поведение сохранено: HTML parse mode, callback answers, forum topic/thread routing, batch schedule edits, private notifications и calendar export.
- Контракт обновления расписания защищён от случайного редактирования не того chat/thread/message.
📦 Версия и деплой
Downloads
- #24 — refactor: ввести
-
released this
2026-05-15 11:56:53 +03:00 | 272 commits to main since this release🚀 Major 2.0.0 — Platform identity и health checks для production
Релиз закрепляет подготовку GM Relay к мультиплатформенной архитектуре и production-мониторингу. Версия
2.0.0взята из PR #79; health check изменения из PR #63 включены в тот же итоговый merge-коммит7cecb72, поэтому отдельный релиз1.16.0не выпускается.✅ Решённые issues
- #23 — chore: добавить platform identity и platform_messages в БД
- #58 — infra: добавить health check endpoints в Bot и Web
🧩 Что вошло в релиз
src/GmRelay.Bot/Migrations/V016__add_platform_identity.sql— добавленыplatform,external_user_id,external_usernameдляplayers, platform identity поля дляgame_groups, новая таблицаplatform_messagesи backfill существующих Telegram-данных.src/GmRelay.Bot/Migrations/V012__add_attendance_stats.sqlиsrc/GmRelay.Web/Services/SessionService.cs— attendance stats используютCOALESCE(external_username, telegram_username).CreateSessionHandlerиJoinSessionHandler— запись новых platform identity полей без удаления legacytelegram_*данных.src/GmRelay.Web/Program.csиsrc/GmRelay.Web/Health/NpgsqlHealthCheck.cs— endpoints/healthи/alive, readiness-проверка PostgreSQL черезSELECT 1.src/GmRelay.Bot/Infrastructure/Health/BotHealthCheckHostedService.cs— lightweight HTTP health endpoint для Bot на порту8081.compose.yaml, Dockerfiles Bot/Web — healthcheck секции,EXPOSE 8081, runtime-зависимости для container health checks.tests/GmRelay.Bot.Tests/Database/PlatformIdentityMigrationTests.cs,tests/GmRelay.Bot.Tests/Web/WebHealthEndpointTests.cs,tests/GmRelay.Bot.Tests/Infrastructure/Health/BotHealthCheckHostedServiceTests.cs— smoke/regression tests для миграции и health endpoints.- Синхронизированы версии:
Directory.Build.props,NavMenu.razor,compose.yaml,.gitea/workflows/deploy.yml→2.0.0.
🗡 Что это даёт
- Схема БД готова к Discord adapter-у и другим платформам без перегруза legacy Telegram-полей.
- Существующие Telegram-сценарии сохраняют обратную совместимость через backfill и dual-write.
- Web и Bot теперь имеют health endpoints для Docker Compose, внешнего мониторинга и автоматической диагностики.
- Docker Compose может показывать состояние
healthyдля обоих сервисов и быстрее обнаруживать деградацию БД/Web/Bot.
📦 Версия и деплой
Downloads
-
released this
2026-05-12 17:08:37 +03:00 | 277 commits to main since this release🔧 Patch 1.15.1 — Добавление MIT LICENSE
В репозиторий добавлен файл
LICENSEс текстом MIT License.README.mdуже содержал ссылку./LICENSE, но сам файл отсутствовал, что создавало юридическую неопределённость.🧩 Что вошло в релиз
LICENSE— добавлен MIT License, Copyright (c) 2026 Toutsutests/GmRelay.Bot.Tests/Project/LicenseFileTests.cs— TDD-тесты на существование и содержимое LICENSE- Синхронизированы версии:
Directory.Build.props,NavMenu.razor,compose.yaml,deploy.yml→ 1.15.1
🗡 Что это даёт
- Код получил явную MIT-лицензию — можно безопасно форкать и использовать в коммерческих целях
- Gitea UI корректно отображает лицензию в sidebar репозитория
📦 Версия и деплой
Downloads
-
released this
2026-05-12 14:24:28 +03:00 | 280 commits to main since this release🛠 Minor 1.15.0 — PostgreSQL Backup и восстановление
Этот minor-релиз закрывает критический блокер issue #57: добавлена автоматическая стратегия резервного копирования PostgreSQL.
✅ Решённые issues
- #57 — infra: ежедневный backup PostgreSQL через pg_dump в отдельный volume
🧩 Что вошло в релиз
compose.yaml— добавлен сервисdb-backup(postgres:17-alpine) с cron-задачейpg_dumpв 03:00, volumepgbackupsдля хранения дампов, ротация поBACKUP_RETENTION_DAYS..env.example— добавленыBACKUP_RETENTION_DAYS(default: 7) иBACKUP_VOLUME_NAME.scripts/restore.sh— bash-скрипт для восстановления из последнего (или указанного) дампа с подтверждением перезаписи БД и передачейPGPASSWORD.README.md— раздел «💾 Backup и восстановление» с инструкциями по проверке, ручному дампу и восстановлению.- Синхронизированы версии:
Directory.Build.props,NavMenu.razor,compose.yaml,deploy.yml→ 1.15.0
🗡 Что это даёт
- Защита от потери данных: ежедневные сжатые дампы БД автоматически создаются и хранятся 7 дней.
- Простое восстановление:
./scripts/restore.shнаходит и разворачивает последний бэкап с подтверждением. - Ротация без ручного управления: старые дампы удаляются автоматически по
mtime. - Volume
pgbackupsне удаляется приdocker compose down— данные сохраняются независимо от контейнеров.
📦 Версия и деплой
Downloads