• v3.0.4 fa63886195

    🔧 Patch 3.0.4 — Исправление регистрации Discord slash-команд
    Deploy Telegram Bot / build-and-push (push) Successful in 5m1s
    Deploy Telegram Bot / scan-images (push) Successful in 2m22s
    Deploy Telegram Bot / deploy (push) Successful in 28s
    Stable

    Toutsu released this 2026-05-25 17:32:44 +03:00 | 183 commits to main since this release

    🔧 Patch 3.0.4 — Исправление регистрации Discord slash-команд

    Discord slash-команды /newsession, /listsessions, /reschedule не появлялись в клиенте, потому что AddApplicationCommands() по умолчанию регистрирует ApplicationCommandService<ApplicationCommandContext>, а наши модули наследуют ApplicationCommandModule<SlashCommandContext>. SlashCommandContext не является наследником ApplicationCommandContext в NetCord, поэтому AddModules(Assembly) никогда не находил эти модули. Команда /ping работала, так как она minimal API.

    🧩 Что вошло в релиз

    • src/GmRelay.DiscordBot/Program.cs — заменено AddApplicationCommands() на AddApplicationCommands<SlashCommandInteraction, SlashCommandContext>()
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 3.0.4
    • Обновлены тестовые ассерты версии в DiscordProjectStructureTests.cs

    🗡 Что это даёт

    • Все Discord slash-команды (/newsession, /listsessions, /reschedule, /ping) теперь корректно регистрируются и доступны в Discord.

    📦 Версия и деплой

    • версия обновлена до 3.0.4
    • Docker-образы используют тег 3.0.4
    • Gitea Actions run #241 (PR checks) — success
    • Gitea Actions run #242 (deploy) — success
    Downloads
  • v3.0.3 9375fa45b2

    Release v3.0.3 — Slash-команды Discord modules
    Deploy Telegram Bot / build-and-push (push) Successful in 4m47s
    Deploy Telegram Bot / scan-images (push) Successful in 2m9s
    Deploy Telegram Bot / deploy (push) Successful in 27s
    Stable

    Toutsu released this 2026-05-25 16:47:55 +03:00 | 186 commits to main since this release

    🔧 Patch 3.0.3 — Slash-команды Discord modules

    Доведен до конца фикс issue #94: после v3.0.2 Discord все еще показывал только /ping, потому что NetCord module-команды были объявлены с [SlashCommand] на классе, а не на методе.

    🧩 Что вошло в релиз

    • src/GmRelay.DiscordBot/Features/Sessions/DiscordNewSessionCommand.cs[SlashCommand("newsession", ...)] перенесен на ExecuteAsync
    • src/GmRelay.DiscordBot/Features/Sessions/DiscordListSessionsCommand.cs[SlashCommand("listsessions", ...)] перенесен на ExecuteAsync
    • src/GmRelay.DiscordBot/Features/Sessions/DiscordRescheduleCommand.cs[SlashCommand("reschedule", ...)] перенесен на ExecuteAsync
    • tests/GmRelay.Bot.Tests/Discord/DiscordStartupTests.cs — regression-тесты на method-level attributes и реальное обнаружение команд через ApplicationCommandService<SlashCommandContext>.AddModules(assembly)
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 3.0.3

    🗡 Что это даёт

    • /newsession, /listsessions и /reschedule теперь регистрируются NetCord как отдельные slash-команды
    • Discord должен показывать эти команды в slash-меню рядом с /ping после обновления команд Discord
    • Тесты теперь ловят оба условия: корректное место атрибута и фактическое обнаружение команд NetCord service

    📦 Версия и деплой

    • версия обновлена до 3.0.3
    • Docker-образы используют тег 3.0.3
    • Gitea Actions run #238 (PR checks) — success
    • Gitea Actions run #239 (deploy main) — success
    Downloads
  • v3.0.2 80e346d6b5

    Release v3.0.2 — Регистрация slash-команд Discord
    Deploy Telegram Bot / build-and-push (push) Successful in 4m53s
    Deploy Telegram Bot / scan-images (push) Successful in 2m12s
    Deploy Telegram Bot / deploy (push) Successful in 27s
    Stable

    Toutsu released this 2026-05-25 16:16:06 +03:00 | 188 commits to main since this release

    🔧 Patch 3.0.2 — Регистрация slash-команд Discord

    Исправлена проблема, из-за которой в тестовой Discord-группе работал только /ping, а /newsession, /listsessions и /reschedule не появлялись как настоящие slash-команды Discord.

    🧩 Что вошло в релиз

    • src/GmRelay.DiscordBot/Program.cs — добавлена регистрация NetCord application command modules через host.AddModules(typeof(Program).Assembly) после создания host
    • tests/GmRelay.Bot.Tests/Discord/DiscordStartupTests.cs — regression-тест на регистрацию module-based slash-команд
    • README.md — убрана неиспользуемая переменная DISCORD_BOT_CLIENT_ID; Discord worker требует DISCORD_BOT_TOKEN, а DISCORD_CLIENT_ID относится к Web Dashboard OAuth
    • tests/GmRelay.Bot.Tests/Discord/DiscordProjectStructureTests.cs — тест на актуальность Discord env-документации
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 3.0.2

    🗡 Что это даёт

    • /newsession, /listsessions и /reschedule регистрируются вместе с /ping при старте Discord worker
    • Discord больше не должен воспринимать эти команды как обычный текст, если bot приглашён со scope applications.commands
    • Документация больше не уводит диагностику в неиспользуемый client id для slash-команд

    📦 Версия и деплой

    • версия обновлена до 3.0.2
    • Docker-образы используют тег 3.0.2
    • Gitea Actions run #236 (PR checks) — success
    • Gitea Actions run #237 (deploy main) — success
    Downloads
  • v3.0.1 8214e052af

    Release v3.0.1 — Исправление привязки Discord↔Telegram
    Deploy Telegram Bot / build-and-push (push) Successful in 4m55s
    Deploy Telegram Bot / scan-images (push) Successful in 2m2s
    Deploy Telegram Bot / deploy (push) Successful in 28s
    Stable

    Toutsu released this 2026-05-25 15:35:53 +03:00 | 190 commits to main since this release

    🔧 Patch 3.0.1 — Исправление привязки Discord↔Telegram

    Исправлена критическая ошибка привязки аккаунтов Discord и Telegram, при которой игры из Telegram-аккаунта становились недоступны после связывания.

    🧩 Что вошло в релиз

    • src/GmRelay.Web/Program.csSameSite=Lax для auth cookie (вместо Strict), что позволяет Discord OAuth callback видеть существующую Telegram-сессию и создавать привязку вместо новой Discord-сессии
    • src/GmRelay.Web/Program.cs/auth/telegram endpoint теперь тоже поддерживает linking (Discord → Telegram через Telegram Login Widget)
    • src/GmRelay.Web/Components/Pages/Profile.razor — Telegram Login Widget для Discord-пользователей + plain HTML-ссылка «Привязать Discord» вместо кнопки с forceLoad (устраняет обрыв Blazor circuit)
    • src/GmRelay.Web/Program.cs — при linking через Telegram Login Widget Telegram всегда становится primary-аккаунтом (сохраняет доступ к историческим группам/играм)
    • src/GmRelay.Bot/Migrations/V021__add_avatar_url.sql — добавлена колонка avatar_url в таблицу players
    • src/GmRelay.Bot/Migrations/V022__fix_discord_telegram_links.sql — миграция для разворота на проде существующих неправильно ориентированных player_links
    • tests/GmRelay.Bot.Tests/Web/CookieAuthOptionsTests.cs — тест на SameSiteMode.Lax
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 3.0.1

    🗡 Что это даёт

    • Единый профиль для Telegram и Discord — игры из обеих платформ видны в одном месте
    • Discord-пользователи могут привязать Telegram через Login Widget в /profile
    • Telegram-пользователи могут привязать Discord через «Привязать Discord» в /profile
    • Больше нет обрыва Blazor circuit при нажатии на кнопку привязки

    📦 Версия и деплой

    • версия обновлена до 3.0.1
    • Docker-образы используют тег 3.0.1
    • Gitea Actions run (deploy main) — success
    Downloads
  • v3.0.0 66228cf106

    Release v3.0.0 — Связка Telegram и Discord identity
    Deploy Telegram Bot / build-and-push (push) Successful in 5m6s
    Deploy Telegram Bot / scan-images (push) Successful in 1m48s
    Deploy Telegram Bot / deploy (push) Successful in 26s
    Stable

    Toutsu released this 2026-05-25 14:16:08 +03:00 | 195 commits to main since this release

    🚀 Major 3.0.0 — Связка Telegram и Discord identity

    Реализована единая мультиплатформенная модель аккаунта: один пользователь может связать Telegram и Discord identity без дублирования игрока/мастера.

    🧩 Что вошло в релиз

    • src/GmRelay.Bot/Migrations/V020__player_identity_links.sql — таблицы player_links (secondary → primary) и identity_audit_log
    • src/GmRelay.Web/Services/SessionService.cs — резолв effective player id для всех permission-методов, методы LinkIdentity/UnlinkIdentity/GetLinkedIdentities
    • src/GmRelay.Web/Program.cs — Discord callback автоматически делает linking при уже аутентифицированном пользователе, endpoints /api/me/identities
    • src/GmRelay.Web/Components/Pages/Profile.razor — страница управления связанными аккаунтами
    • src/GmRelay.Web/Components/Layout/NavMenu.razor — ссылка на профиль, версия v3.0.0
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 3.0.0

    🔧 Hotfix

    • Исправлена загрузка профиля: Profile.razor теперь использует ISessionStore напрямую вместо HttpClient (избегает 302 redirect от отсутствия cookie в Blazor Server interactive mode)
    • Привязка Discord через forceLoad: true для обхода Blazor circuit navigation

    🗡 Что это даёт

    • Пользователь может управлять группами и сессиями из любой связанной платформы
    • Нельзя незаметно захватить чужую identity (conflict detection + audit trail)
    • Единый dashboard для всех platform identities

    📦 Версия и деплой

    • версия обновлена до 3.0.0
    • Docker-образы используют тег 3.0.0
    • Gitea Actions run #229 (PR checks) — success
    • Gitea Actions run #230 (deploy v3.0.0) — success
    • Gitea Actions run #231 (deploy hotfix Profile.razor) — success
    Downloads
  • v2.8.0 eb9a159dbb

    Release v2.8.0 — Discord OAuth и платформонезависимый Web Dashboard
    Deploy Telegram Bot / build-and-push (push) Successful in 4m36s
    Deploy Telegram Bot / scan-images (push) Successful in 1m22s
    Deploy Telegram Bot / deploy (push) Successful in 26s
    Stable

    Toutsu released this 2026-05-25 12:22:17 +03:00 | 203 commits to main since this release

    🛠 Patch 2.8.0 — Discord OAuth и платформонезависимый Web Dashboard

    Реализован Discord OAuth 2.0 login flow для Web Dashboard (issue #34) и рефакторен слой авторизации на платформонезависимую модель. Discord- и Telegram-аккаунты полностью разделены — никакой связи между ними.

    🧩 Что вошло в релиз

    • src/GmRelay.Web/Services/DiscordAuthService.cs — Discord OAuth Authorization Code Flow с identify + guilds scopes
    • src/GmRelay.Web/Program.cs — endpoints /auth/discord и /auth/discord/callback с CSRF-защитой через state-cookie
    • src/GmRelay.Web/Services/ClaimsPrincipalExtensions.cs — платформонезависимая идентификация (platform, external_user_id)
    • src/GmRelay.Web/Services/AuthorizedSessionService.cs — все методы переведены на *ForCurrentUserAsync
    • src/GmRelay.Web/Components/Pages/*.razor — Razor Pages обновлены для поддержки Discord и Telegram пользователей
    • src/GmRelay.Bot/Migrations/V019__audit_log_platform_identity.sql — миграция audit log на platform-agnostic identity
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 2.8.0

    🗡 Что это даёт

    • Владельцы Discord-серверов и co-GM могут авторизоваться в Web Dashboard через Discord OAuth
    • Dashboard показывает только группы и сессии, доступные текущему пользователю, независимо от платформы
    • Telegram Login Widget продолжает работать как раньше

    📦 Версия и деплой

    • версия обновлена до 2.8.0
    • Docker-образы используют тег 2.8.0
    • Gitea Actions run #220 (PR checks) — success
    • Gitea Actions run #221 (PR checks after review fixes) — success
    • Gitea Actions run #222 (deploy) — success
    Downloads
  • v2.7.2 9f7b772680

    Release v2.7.2 — Регрессионные тесты platform rendering и Discord MVP
    Deploy Telegram Bot / build-and-push (push) Successful in 4m43s
    Deploy Telegram Bot / scan-images (push) Successful in 1m55s
    Deploy Telegram Bot / deploy (push) Successful in 16s
    Stable

    Toutsu released this 2026-05-21 18:00:48 +03:00 | 224 commits to main since this release

    🧪 Patch 2.7.2 — Регрессионные тесты platform rendering и Discord MVP

    Добавлены регрессионные тесты для платформенно-нейтрального рендеринга и базового Discord-флоу, чтобы защитить Telegram parity и Discord MVP от случайных регрессий.

    🧩 Что вошло в релиз

    • SessionBatchViewBuilderTests.cs — 3 теста на edge-cases семантической модели (пустые сессии, confirmed-статус, null max-players)
    • TelegramSessionBatchRendererTests.cs — 5 тестов на parity Telegram-рендерера (HTML-кодирование, confirmed-кнопки, отсутствие join-ссылки)
    • DiscordSessionBatchRendererTests.cs — 4 теста на Discord embed/button states (синий confirmed, пустой список игроков, inline-поля, URL embed)
    • DiscordLandingPromisesSmokeTests.cs — сквозной smoke-тест Discord MVP (join/leave/waitlist → RSVP → reschedule voting → DM notifications → dashboard sync) через FakeDiscordMessenger без реального Discord API
    • Directory.Build.props, compose.yaml, .gitea/workflows/deploy.yml, NavMenu.razor — версия синхронизирована до 2.7.2

    🗡 Что это даёт

    • Любое изменение текста/кнопок в Telegram или Discord рендерерах теперь ломает тесты — проблема обнаруживается до merge
    • Discord MVP interaction flow можно проверять локально без Discord API credentials
    • Семантическая модель SessionBatchViewBuilder защищена от случайных изменений

    📦 Версия и деплой

    • версия обновлена до 2.7.2
    • Docker-образы используют тег 2.7.2
    • Gitea Actions run #210 (PR checks) — success
    • Gitea Actions run #211 (deploy) — success
    Downloads
  • v2.7.1 dd9eab2e4a

    Release v2.7.1 — Discord bot compose/deploy wiring
    Deploy Telegram Bot / build-and-push (push) Successful in 4m50s
    Deploy Telegram Bot / scan-images (push) Successful in 1m51s
    Deploy Telegram Bot / deploy (push) Successful in 15s
    Stable

    Toutsu released this 2026-05-21 14:59:46 +03:00 | 230 commits to main since this release

    🔧 Patch 2.7.1 — Завершение compose/deploy wiring для Discord bot

    Завершает инфраструктурную обвязку Discord worker, запущенную в рамках issue #32.

    🧩 Что вошло в релиз

    • .env.example — добавлен DISCORD_BOT_TOKEN.
    • src/GmRelay.DiscordBot/Dockerfile — добавлен wget для healthcheck.
    • src/GmRelay.DiscordBot/Infrastructure/Health/DiscordHealthCheckHostedService.cs — health check endpoint на порту 8082.
    • src/GmRelay.DiscordBot/Program.cs — зарегистрирован DiscordHealthCheckHostedService.
    • compose.yaml — добавлен healthcheck для сервиса discord.
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 2.7.1.

    🗡 Что это даёт

    • Discord bot теперь имеет полноценный healthcheck и деплоится наравне с Telegram bot и Web dashboard.
    • docker compose up -d корректно поднимает все три сервиса с проверкой здоровья.

    📦 Версия и деплой

    • версия обновлена до 2.7.1
    • Docker-образы используют тег 2.7.1
    • Gitea Actions run #208 (PR checks) — success
    • Gitea Actions run #209 (deploy) — success
    Downloads
  • v2.7.0 3199c48fcd

    Release v2.7.0 — Platform-aware scheduler notifications
    Deploy Telegram Bot / build-and-push (push) Successful in 6m18s
    Deploy Telegram Bot / scan-images (push) Successful in 1m44s
    Deploy Telegram Bot / deploy (push) Successful in 16s
    Stable

    Toutsu released this 2026-05-21 12:50:59 +03:00 | 238 commits to main since this release

    🛠 Minor 2.7.0 — Platform-aware scheduler notifications

    Релиз закрывает issue #31: scheduler, RSVP, confirmation и reminder flows больше не завязаны напрямую на Telegram API и отправляют platform-specific уведомления через общий IPlatformMessenger.

    Решённые issues

    • #31 — refactor: перевести scheduler и уведомления на IPlatformMessenger

    🧩 Что вошло в релиз

    • src/GmRelay.Shared/Infrastructure/Scheduling/ — общий SessionSchedulerService, ISessionTriggerStore и PlatformSchedulerOptions с фильтрацией по платформе.
    • src/GmRelay.Shared/Features/Confirmation/ и src/GmRelay.Shared/Features/Reminders/ — shared handlers для RSVP, confirmation, one-hour reminder и join-link уведомлений.
    • src/GmRelay.Shared/Features/Notifications/PlatformDirectNotificationSender.cs — единая отправка direct session notifications через platform messenger.
    • src/GmRelay.Shared/Platform/ — расширены notification contracts и semantic methods в IPlatformMessenger.
    • src/GmRelay.Bot/Infrastructure/Telegram/TelegramPlatformMessenger.cs — Telegram adapter сохраняет существующее поведение для confirmation, reminders, join links, direct notifications и reschedule vote updates.
    • src/GmRelay.DiscordBot/Infrastructure/Discord/DiscordPlatformMessenger.cs — Discord adapter получил MVP-поддержку confirmation, join-link/direct notifications и обновления reschedule voting messages.
    • src/GmRelay.DiscordBot/Features/Sessions/DiscordSessionInteractionModule.cs — Discord RSVP component interaction подключён к shared HandleRsvpHandler.
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, .gitea/workflows/deploy.yml, README.md2.7.0.

    🛡 Что это даёт

    • Scheduler больше не зависит от Telegram API types.
    • Telegram уведомления сохраняют прежнюю семантику и topic/thread routing.
    • Discord получает расширяемую точку для scheduler notifications без переписывания фоновых сервисов.
    • Reschedule deadline services обновляют platform messages через messenger abstraction.

    📦 Версия и деплой

    • версия обновлена до 2.7.0
    • Docker-образы используют тег 2.7.0
    • PR #88 — merged via fallback local merge commit 3199c48fcd252a233845afa3206a3e9a14b5ccfd
    • Gitea Actions run #205 (PR checks) — success
    • Gitea Actions run #206 (deploy) — success
    Downloads
  • v2.6.0 0c62631ab6

    Release v2.6.0 — Discord reschedule voting
    Deploy Telegram Bot / build-and-push (push) Successful in 4m37s
    Deploy Telegram Bot / scan-images (push) Successful in 1m25s
    Deploy Telegram Bot / deploy (push) Successful in 14s
    Stable

    Toutsu released this 2026-05-20 13:21:31 +03:00 | 242 commits to main since this release

    🛠 Patch 2.6.0 — Голосование за перенос сессий в Discord

    Реализовано полноценное голосование за перенос сессий через Discord interactions. GM может инициировать голосование с 2–3 вариантами времени и дедлайном, игроки голосуют кнопками, а по истечении дедлайна результат применяется автоматически.

    🧩 Что вошло в релиз

    • V018__discord_reschedule_proposals.sql — колонки source_platform и proposed_by_external_user_id в reschedule_proposals
    • GmRelay.Shared/Features/Sessions/RescheduleSession/ — выделены платформенно-нейтральные типы (RescheduleVoteRules, RescheduleVotingInput, RescheduleDtos, RescheduleVotingFinalizer)
    • GmRelay.Bot/RescheduleVotingDeadlineService.cs — рефакторинг под RescheduleVotingFinalizer, фильтрация по source_platform = 'Telegram'
    • GmRelay.DiscordBot/Features/Sessions/DiscordRescheduleCommand.cs — slash-команда /reschedule
    • GmRelay.DiscordBot/Features/Sessions/DiscordRescheduleVoteHandler.cs — обработка голосований по кнопкам
    • GmRelay.DiscordBot/Features/Sessions/DiscordRescheduleVotingDeadlineService.cs — фоновый сервис финализации голосований
    • GmRelay.DiscordBot/Rendering/DiscordRescheduleVotingRenderer.cs — рендеринг embed и кнопок
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 2.6.0

    🗡 Что это даёт

    • Discord-пользователи могут полноценно голосовать за перенос сессий без Telegram/Web
    • Автоматическое применение результата по дедлайну
    • Telegram flow остаётся неизменным — нет регрессий

    📦 Версия и деплой

    • версия обновлена до 2.6.0
    • Docker-образы используют тег 2.6.0
    • Gitea Actions run #203 (PR checks) — success
    • Gitea Actions run #204 (deploy) — success
    Downloads