-
released this
2026-05-05 13:07:22 +03:00 | 351 commits to main since this releaseНовое в этой версии:
🧪 Smoke-сценарий обещаний лендинга для Telegram
- Добавлен функциональный smoke-тест
TelegramLandingPromisesSmokeTests, который фиксирует основной сценарий Telegram-лендинга без внешнего Telegram API. - Сценарий покрывает batch-сессии на несколько дат, inline-кнопки записи/выхода, лимит игроков, waitlist и автоповышение из ожидания.
- Проверяется голосование за перенос времени, выбор победившего варианта и сброс RSVP после обновления карточки расписания.
- Fake Telegram messenger сохраняет отправленные и отредактированные сообщения, поэтому тест проверяет user-visible тексты и клавиатуры без сетевых зависимостей.
- Сценарий оставлен расширяемым для следующих Mini App и Discord smoke-проверок.
📊 Dashboard и синхронизация
- Smoke фиксирует обещание, что изменение карточки расписания из Web/Dashboard-слоя приводит к обновлению Telegram-сообщения.
- Добавлен регрессионный тест, который сверяет версию в
NavMenu.razorсDirectory.Build.props, чтобы Web Dashboard не отставал от релизной версии.
🛠 Технические изменения
- Тестовый
FakeSessionStoreсинхронизирован с текущимISessionStoreпосле методов управления участниками. - Версия проекта обновлена до
1.9.9вDirectory.Build.props,compose.yaml, deploy workflow, README, Web UI badge и дизайн-системе. - README дополнен разделом про запуск тестов и новое smoke-покрытие.
- Wiki обновлена под
v1.9.9: быстрый старт, деплой, разработка, архитектура, база данных, руководство ГМа и главная страница.
✅ Решённые issues
- #18 —
test: покрыть smoke-сценарий обещаний лендинга для Telegram.
🧪 Проверка
dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage"— 95 passed, 0 failed.dotnet build GM-Relay.slnx -c Release— 0 warnings, 0 errors.- Новых SQL-миграций и env/config требований нет.
Downloads
- Добавлен функциональный smoke-тест
-
released this
2026-05-04 20:28:55 +03:00 | 352 commits to main since this releaseНовое в этой версии:
🎮 Управление игроками в Web Dashboard
- На странице группы теперь можно развернуть список участников любой сессии (▶/▼).
- Для каждого игрока показывается: имя, Telegram username, статус RSVP, статус регистрации.
- Owner и co-GM могут исключить активного игрока кнопкой 🚪 Исключить.
- При исключении активного игрока бот автоматически переводит первого ожидающего в основной состав и обновляет Telegram-пост.
- ГМ не может быть исключён из сессии через интерфейс.
🛠 Технические изменения
SessionStore: новые методыGetSessionParticipantsAsyncиRemovePlayerFromSessionAsync.SessionService: добавлена логика автоповышения из waitlist.GroupDetails.razor: раскрывающийся список участников (desktop + mobile).app.css: стили для списка участников (participant-panel,participant-row,btn-gm-link).- Bumped version to
1.9.8.
Downloads
-
released this
2026-05-04 10:33:06 +03:00 | 356 commits to main since this release🛠 Patch 1.9.7 — единый Telegram-пост с картинкой и расписанием
Этот patch-релиз фиксит визуальную проблему из v1.9.6: картинка сессии и расписание теперь объединены в один Telegram-пост вместо двух раздельных сообщений.
✅ Решённые issues
- Прямой фидбек: при создании сессии с картинкой бот отправлял два отдельных сообщения (фото + текст), что выглядело разорвано в чате.
🧩 Что вошло в релиз
- при создании сессии с картинкой бот теперь отправляет одно
SendPhotoс текстом расписания вcaptionи кнопками записи — всё в одном посте; - если текст расписания превышает лимит Telegram caption (1024 символа), бот автоматически откатывается на два сообщения (фото + текст), как было раньше;
- добавлен
BatchMessageEditor— общий helper вGmRelay.Shared, который автоматически определяет тип batch-сообщения (текст или фото) и используетEditMessageTextилиEditMessageCaptionсоответственно; - все обработчики обновлений расписания (Join, Leave, Cancel, Promote, Reschedule) и Web-сервис обновлены на использование
BatchMessageEditor; - при ошибке отправки фото бот корректно переключается на текстовый режим с логированием warning.
🛡 Что это даёт
- посты с расписанием в Telegram выглядят цельно: одна карточка с картинкой, текстом и кнопками;
- обновления расписания (запись/отписка/отмена/повышение из листа ожидания) корректно работают как для фото-, так и для текстовых батч-сообщений;
- нет breaking changes — существующие сессии без картинок работают как раньше.
📦 Версия и деплой
- версия проекта обновлена до 1.9.7 в
Directory.Build.props,compose.yamlи Gitea Actions workflow; - Docker-образы и deploy-конфигурация используют тег 1.9.7;
- локально пройдены
dotnet test— 93/93 passed; - локально пройден
dotnet build GM-Relay.slnx -c Release— 0 warnings, 0 errors; - Gitea Actions run #55 успешно собрал, опубликовал и задеплоил bot/web образы.
Downloads
-
released this
2026-05-04 09:52:07 +03:00 | 357 commits to main since this release🛠 Patch 1.9.6 — обложки расписаний и чище Telegram-посты
Этот patch-релиз закрывает обратную связь по Telegram-постам с наборами на игры: к расписанию теперь можно приложить картинку, а GM-действия больше не показываются всем участникам в публичном посте.
✅ Решённые issues
- Отдельного Gitea issue для фикса не было: релиз закрывает прямой фидбек по удобству поиска приключений в длинном списке событий и по лишним GM-кнопкам в общем Telegram-посте.
🧩 Что вошло в релиз
/newsessionтеперь поддерживает опциональную строкуКартинка: https://..., а также алиасыИзображение:иОбложка:;- команду
/newsessionможно отправить подписью к Telegram-фото: бот использует самое крупное фото как обложку расписания; - при наличии обложки бот публикует отдельное фото с подписью
🎲 Название приключениярядом с основным расписанием; - сбой отправки картинки не ломает создание сессий: расписание всё равно публикуется, а ошибка логируется warning-сообщением;
- публичный пост расписания больше не содержит кнопки
❌ Отменить,⏰и⬆️ Из ожидания; - GM-панель действий перенесена в
/listsessionsи показывается только владельцу или co-GM сессии; - cancel/promote действия из GM-панели корректно обновляют исходный публичный batch-пост через сохранённый
batch_message_id; /help, README и wiki обновлены под новый формат создания сессий и новый сценарий GM-управления;- версия проекта, Docker Compose, Gitea Actions workflow, Web UI version badge и design system обновлены под 1.9.6.
🛡 Что это даёт
- в длинном Telegram-списке событий игрокам проще визуально найти нужное приключение по обложке;
- обычные участники больше не видят лишние GM-кнопки, которые они всё равно не могут использовать;
- GM сохраняет быстрые действия управления сессиями, но в отдельной персональной панели
/listsessions; - новый функционал не требует миграций БД и не меняет существующую схему хранения сессий.
📦 Версия и деплой
- версия проекта обновлена до 1.9.6 в
Directory.Build.props,compose.yaml, README, Web design system и Gitea Actions workflow; - Docker-образы и deploy-конфигурация используют тег 1.9.6;
- wiki обновлена под новый сценарий
/newsessionс обложками и GM-кнопками в/listsessions; - локально пройдены
dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage"— 93/93 passed; - локально пройден
dotnet build GM-Relay.slnx -c Release— 0 warnings, 0 errors; - Gitea Actions run #54 успешно собрал, опубликовал и задеплоил bot/web образы.
Downloads
-
released this
2026-05-02 15:40:24 +03:00 | 358 commits to main since this release🛠 Patch 1.9.5 — исправление layout сессий в dashboard
Этот patch-релиз исправляет UI regression в списке сессий Web Dashboard: на узком desktop viewport и внутри Telegram Mini App колонка действий больше не обрезает кнопку «Изменить».
✅ Решённые issues
- Отдельного Gitea issue для фикса не было: релиз закрывает прямую UI-правку после Mini App dashboard/safe-area изменений из ветки 1.9.x.
🧩 Что вошло в релиз
- desktop-таблица сессий больше не использует inline
overflow: hidden, который срезал правую колонку; - стили ссылки подключения и action-кнопок вынесены в отдельные CSS-классы;
- для desktop-таблицы добавлен безопасный
overflow-x: auto, минимальная ширина таблицы и фиксированная ширина колонки действий; - кнопки действий в таблице теперь сохраняют
white-space: nowrap, чтобы текст не ломался внутри кнопки; - Telegram Mini App всегда использует карточный layout списка сессий вместо зажатой desktop-таблицы;
- при ширине до
1024pxсписок сессий также переключается на карточки, потому что sidebar оставляет таблице слишком мало места; - добавлены regression-тесты на overflow таблицы, Mini App карточки, breakpoint до
1024pxи отсутствие старого inline overflow; - версия проекта, Docker Compose, Gitea Actions workflow, Web UI version badge и design system обновлены под 1.9.5.
🛡 Что это даёт
- кнопка «Изменить» больше не уезжает за край карточки на desktop-экранах около 820px;
- Mini App получает мобильный карточный список сессий без поломанной таблицы;
- будущие изменения CSS не смогут вернуть старый обрезающий layout без падения regression-тестов;
- backend, авторизация, миграции БД и Telegram bot сценарии не менялись.
📦 Версия и деплой
- версия проекта обновлена до 1.9.5 в
Directory.Build.props,compose.yaml, README, Web design system и Gitea Actions workflow; - Docker-образы и deploy-конфигурация используют тег 1.9.5;
- локально пройдены
dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage"— 88/88 passed; - локально пройден
dotnet build GM-Relay.slnx -c Release— 0 warnings, 0 errors; - локально проверен узкий session layout в браузере через fixture: вместо обрезанной таблицы отображается карточка, кнопка действий видна целиком;
- Gitea Actions run #53 успешно собрал, опубликовал и задеплоил bot/web образы.
Downloads
-
released this
2026-04-28 21:01:30 +03:00 | 359 commits to main since this release🛠 Patch 1.9.4 — понятнее описание Mini App dashboard
Этот patch-релиз упрощает README-секцию про Telegram Mini App Dashboard: технический auth-flow заменён на описание сценария обычного ГМа — где открыть dashboard, что можно сделать с телефона и что нажать, если автоматический вход не сработал.
✅ Решённые issues
- Отдельного Gitea issue для фикса не было: релиз закрывает прямую документационную правку README после Mini App login fixes из ветки 1.9.x.
🧩 Что вошло в релиз
- раздел
Telegram Mini App Dashboardв README переписан без endpoint/HMAC/cookie/fallback-терминов; - текст теперь объясняет вход через кнопку меню бота или
Открыть dashboardпосле/start; - явно сказано, что dashboard показывает только группы, где пользователь owner или co-GM;
- fallback-вход описан как обычная кнопка входа через Telegram в том же окне;
- версия проекта, Docker Compose, Gitea Actions workflow, Web UI version badge и design system обновлены под 1.9.4.
🛡 Что это даёт
- README стал понятнее для простого ГМа без знания внутренней авторизации;
- поведение Mini App, права owner/co-GM, миграции БД и настройки BotFather не менялись;
- Docker-образы и deploy-конфигурация снова совпадают с актуальным релизным тегом.
📦 Версия и деплой
- версия проекта обновлена до 1.9.4 в
Directory.Build.props,compose.yaml, README, Web design system и Gitea Actions workflow; - Docker-образы и deploy-конфигурация используют тег 1.9.4;
- локально пройдены
dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage"— 84/84 passed; - локально пройден
dotnet build GM-Relay.slnx -c Release— 0 warnings, 0 errors; - Gitea Actions run #52 успешно собрал, опубликовал и задеплоил bot/web образы.
Downloads
-
released this
2026-04-28 20:31:21 +03:00 | 360 commits to main since this release🛠 Patch 1.9.3 — стабильный Mini App login и mobile safe-area
Этот patch-релиз закрывает оставшийся regression в Telegram Mini App: fallback-вход больше не уводит cookie в отдельный redirect-flow, а выполняет Telegram Login Widget callback прямо внутри активного WebView. Заодно Mini App shell теперь учитывает safe-area телефона и верхнюю панель Telegram, чтобы dashboard не уезжал под системный интерфейс.
✅ Решённые issues
- Исправлен regression в функциональности из #17 — Telegram Mini App dashboard: после нажатия «Войти» пользователь мог успешно получить cookie, но текущий Mini App WebView не обновлялся до dashboard до ручного закрытия и повторного открытия.
🧩 Что вошло в релиз
- добавлен
POST /auth/telegram-loginдля callback-based Telegram Login Widget flow; /loginтеперь используетdata-onauthи отправляет Telegram user payload на/auth/telegram-loginиз текущего WebView вместоdata-auth-urlredirect;- старый
GET /auth/telegramсохранён для совместимости; /miniappполучил диагностичные состояния дляTelegram.WebAppmissing, пустогоinitDataи server auth failed;- Mini App shell добавляет класс
telegram-mini-appпри наличииTelegram.WebApp, вызываетready()/expand(), синхронизируетsafeAreaInsetиcontentSafeAreaInset, слушаетsafeAreaChanged,contentSafeAreaChanged,viewportChanged; - mobile CSS добавляет safe-area отступы для
.mini-app-page, контента,.nav-headerи.nav-toggle, при этом навигация остаётся доступной; - README, wiki, Docker Compose, Gitea Actions workflow, Web UI version badge и design system обновлены под 1.9.3.
🛡 Что это даёт
- fallback-вход авторизует пользователя в том же Telegram WebView и сразу переводит в dashboard;
- Mini App больше не требует ручного закрытия и повторного открытия после успешного Telegram Login;
- верхняя навигация и первый экран dashboard учитывают статус-бар телефона и Telegram UI;
- новых миграций и новых действий в BotFather нет, если
TELEGRAM_MINI_APP_URLи домен уже настроены на HTTPS/miniapp.
📦 Версия и деплой
- версия проекта обновлена до 1.9.3 в
Directory.Build.props,compose.yaml, README, Web design system, wiki и Gitea Actions workflow; - Docker-образы и deploy-конфигурация используют тег 1.9.3;
- локально пройдены
dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage"— 84/84 passed; - локально пройден
dotnet build GM-Relay.slnx -c Release— 0 warnings, 0 errors; - runtime smoke:
/miniappвернул200и диагностичный auth-card,/auth/statusвернул{"authenticated":false}, мобильный safe-area smoke подтвердил применение top/bottom inset; - Gitea Actions run #51 успешно собрал, опубликовал и задеплоил bot/web образы.
Downloads
-
released this
2026-04-28 17:26:51 +03:00 | 361 commits to main since this release🛠 Patch 1.9.2 — Mini App login fallback fix
Этот patch-релиз закрывает оставшийся сценарий из входа Telegram Mini App: если Mini App всё же попадает на обычную страницу
/loginи Telegram Login открывает внешний браузер, текущая Mini App-страница теперь сама перечитывает состояние после возврата и не требует закрывать Mini App вручную.✅ Решённые issues
- Отдельного Gitea issue для hotfix не было: исправлен regression в функциональности из #17 — Telegram Mini App dashboard. Версия 1.9.1 добавила watcher на
/miniapp, но реальный fallback-вход через Telegram Login Widget выполнялся уже на/login, поэтому активная Mini App-страница могла оставаться в старом unauthenticated-состоянии.
🧩 Что вошло в релиз
/loginтеперь запускаетwatchTelegramMiniAppLoginпосле загрузки Telegram Login Widget;- watcher получил режим
reloadOnReturn: после ухода во внешний Telegram Login и возврата фокуса он проверяет/auth/status, а если активный WebView ещё не применил cookie в текущем circuit, делает один full reload; - если watcher уже был запущен на
/miniapp, переход на/loginповышает его до режимаreloadOnReturn, а не создаёт второй интервал; - повторная попытка внешнего входа снова получает право на один reload после возврата;
- regression-тест фиксирует, что login fallback тоже подключает watcher;
- README, wiki, Docker Compose, Gitea Actions workflow, Web UI version badge и design system обновлены под 1.9.2.
🛡 Что это даёт
- пользователь после Telegram Login возвращается в текущий Mini App и попадает в dashboard без ручного закрытия/открытия;
- исправление покрывает оба fallback-места:
/miniappи/login; - обычная Telegram Login Widget авторизация продолжает использовать ту же cookie-auth модель;
- права owner/co-GM и серверные проверки доступа не менялись.
📦 Версия и деплой
- версия проекта обновлена до 1.9.2 в
Directory.Build.props,compose.yaml, README, Web design system, wiki и Gitea Actions workflow; - Docker-образы и deploy-конфигурация используют тег 1.9.2;
- локально пройдены
dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage"иdotnet build GM-Relay.slnx -c Release; - runtime smoke:
/loginсодержит watcher, reload hook и Telegram widget container;/auth/statusвернул{"authenticated":false}без cookie;/miniappответил200; - Gitea Actions run #50 успешно собрал, опубликовал и задеплоил bot/web образы.
Downloads
- Отдельного Gitea issue для hotfix не было: исправлен regression в функциональности из #17 — Telegram Mini App dashboard. Версия 1.9.1 добавила watcher на
-
released this
2026-04-28 17:10:20 +03:00 | 362 commits to main since this release🛠 Patch 1.9.1 — Mini App login refresh fix
Этот patch-релиз исправляет сценарий входа в Telegram Mini App: после нажатия Telegram Login и возврата из внешнего браузера текущая Mini App-страница больше не остаётся в старом состоянии. Пользователь попадает в dashboard без закрытия и повторного открытия Mini App.
✅ Решённые issues
- Отдельного Gitea issue для hotfix не было: исправлен regression в функциональности из #17 — Telegram Mini App dashboard, где cookie появлялась после внешнего Telegram Login, но открытая Mini App-страница не перечитывала состояние авторизации.
🧩 Что вошло в релиз
- Mini App auth bridge теперь ждёт
Telegram.WebApp.initDataдо показа fallback, чтобы Telegram JS API успел передать данные в WebView; - добавлен клиентский watcher
watchTelegramMiniAppLogin, который проверяет состояние входа через/auth/statusпосле fallback-login; - добавлен endpoint
/auth/status, возвращающий текущее cookie-auth состояние для Mini App; /miniappзапускает watcher при fallback-сценарии и автоматически переводит пользователя в dashboard после появления auth-cookie;- README, wiki, Docker Compose, Gitea Actions workflow, Web UI version badge и design system обновлены под 1.9.1;
- добавлены regression-тесты на ожидание
initData, watcher fallback-login и/auth/status.
🛡 Что это даёт
- Mini App не требует закрывать и открывать её заново после Telegram Login;
- медленная инициализация Telegram WebApp больше не отправляет пользователя в fallback слишком рано;
- обычный Web Dashboard и Telegram Login Widget продолжают работать через ту же cookie-auth модель;
- owner/co-GM сохраняют прежнюю модель доступа: все dashboard-операции по-прежнему проходят через серверные проверки ролей.
📦 Версия и деплой
- версия проекта обновлена до 1.9.1 в
Directory.Build.props,compose.yaml, README, Web design system, wiki и Gitea Actions workflow; - Docker-образы и deploy-конфигурация используют тег 1.9.1;
- локально пройдены
dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage"иdotnet build GM-Relay.slnx -c Release; - runtime smoke:
/miniappответил200,/auth/statusвернул{"authenticated":false}без cookie; - Gitea Actions run #49 успешно собрал, опубликовал и задеплоил bot/web образы.
Downloads
-
released this
2026-04-28 15:02:39 +03:00 | 363 commits to main since this release🚀 Версия 1.0 — Telegram Bot + Mini App Dashboard
Этот релиз закрывает следующую задачу этапа «Версия 1.0 — Telegram Bot + Mini App Dashboard»: dashboard теперь открывается прямо внутри Telegram как Mini App. GM получает мобильный вход из бота без отдельной копии бизнес-логики: Mini App использует те же Web Dashboard страницы, application-сервисы и модель доступа owner/co-GM.
✅ Закрытые issues
- #17 — feat: добавить Telegram Mini App dashboard как мобильную копию Web Dashboard: добавлен вход
/miniapp, серверная проверка Telegram WebAppinitData, кнопка открытия dashboard из/start, default menu button приTelegram:MiniAppUrlи мобильная раскладка существующего Web Dashboard.
🧩 Что вошло в релиз
TelegramAuthServiceтеперь проверяет WebAppinitDataпо алгоритму Telegram Mini Apps: HMAC через ключWebAppData, проверкаauth_dateи чтение Telegram user из payload;- добавлен endpoint
/auth/telegram-webapp, который выдаёт ту же cookie-сессию, что и Telegram Login Widget, поэтому Web Dashboard и Mini App используют одну auth-модель; - добавлена страница
/miniapp: внутри Telegram она вызываетTelegram.WebApp.initData, отправляет его на сервер и открывает dashboard, а в обычном браузере показывает fallback на стандартный login; - подключён
telegram-web-app.jsи компактный Mini App CSS-режим для мобильного dashboard; - мобильная навигация Web Dashboard исправлена так, чтобы header и кнопка меню были доступны на узком viewport;
/startпоказывает inline WebApp-кнопку «Открыть dashboard», если настроенTelegram:MiniAppUrl;- добавлен
TelegramMiniAppMenuButtonService, который при старте бота настраивает default Telegram menu button на Mini App URL; - Docker Compose,
.env.exampleи deploy workflow получилиTELEGRAM_MINI_APP_URL/Telegram__MiniAppUrl; - README и wiki обновлены под 1.9.0: описаны Mini App вход, BotFather menu button, deployment checklist, отсутствие новой миграции и общий auth flow;
- добавлены regression-тесты для WebApp
initData,/miniapp, JS bridge, bot/startentry point и menu button сервиса.
🛡 Что это даёт
- owner/co-GM может открыть dashboard прямо из Telegram и управлять своими группами с телефона;
- неавторизованный пользователь не получает доступ к чужим группам: после Mini App auth все операции всё равно проходят через
AuthorizedSessionService; - Mini App не расходится с Web Dashboard: редактирование сессий, waitlist, шаблоны и batch bulk-операции идут через существующие сервисы;
- изменения из Mini App сохраняют текущую синхронизацию Telegram-сообщений расписания;
- обычный Web Dashboard продолжает работать через Telegram Login Widget.
📦 Версия и деплой
- версия проекта обновлена до 1.9.0 в
Directory.Build.props,compose.yaml, README, Web design system, wiki и Gitea Actions workflow; - Docker-образы и deploy-конфигурация используют тег 1.9.0;
- локально пройдены
dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage"иdotnet build GM-Relay.slnx -c Release; - локально проверен
/miniappв браузере: fallback-страница рендерится без console errors; - Gitea Actions run #48 успешно собрал, опубликовал и задеплоил bot/web образы.
Downloads
- #17 — feat: добавить Telegram Mini App dashboard как мобильную копию Web Dashboard: добавлен вход