docs: update wiki for player self-cancel
@@ -29,6 +29,7 @@ GM-Relay состоит из нескольких .NET-проектов и об
|
|||||||
|
|
||||||
- `/start`, `/help`, `/newsession`, `/listsessions`, `/exportcalendar`;
|
- `/start`, `/help`, `/newsession`, `/listsessions`, `/exportcalendar`;
|
||||||
- callback `join_session:<sessionId>`;
|
- callback `join_session:<sessionId>`;
|
||||||
|
- callback `leave_session:<sessionId>`;
|
||||||
- callback `cancel_session:<sessionId>`;
|
- callback `cancel_session:<sessionId>`;
|
||||||
- callback `delete_session:<sessionId>`;
|
- callback `delete_session:<sessionId>`;
|
||||||
- callback `reschedule_session:<sessionId>`;
|
- callback `reschedule_session:<sessionId>`;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# База данных
|
# База данных
|
||||||
|
|
||||||
GM-Relay **v1.2.0** использует PostgreSQL. Изменения схемы управляются DbUp-миграциями, встроенными в `GmRelay.Bot` как embedded resources.
|
GM-Relay **v1.3.0** использует PostgreSQL. Изменения схемы управляются DbUp-миграциями, встроенными в `GmRelay.Bot` как embedded resources.
|
||||||
|
|
||||||
## Миграции
|
## Миграции
|
||||||
|
|
||||||
@@ -110,6 +110,8 @@ Confirmed -> ConfirmationSent, если активный участник отк
|
|||||||
```text
|
```text
|
||||||
Active
|
Active
|
||||||
Waitlisted -> Active, когда GM повышает игрока из листа ожидания
|
Waitlisted -> Active, когда GM повышает игрока из листа ожидания
|
||||||
|
Active -> удаление строки, когда игрок самостоятельно снимает запись
|
||||||
|
Waitlisted -> удаление строки, когда игрок выходит из листа ожидания
|
||||||
```
|
```
|
||||||
|
|
||||||
RSVP-статусы:
|
RSVP-статусы:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Быстрый старт
|
# Быстрый старт
|
||||||
|
|
||||||
Эта страница описывает минимальный запуск текущей версии GM-Relay **v1.2.0**.
|
Эта страница описывает минимальный запуск текущей версии GM-Relay **v1.3.0**.
|
||||||
|
|
||||||
## Требования
|
## Требования
|
||||||
|
|
||||||
@@ -41,8 +41,8 @@ docker compose up -d
|
|||||||
Compose поднимает:
|
Compose поднимает:
|
||||||
|
|
||||||
- `db`: PostgreSQL 17 Alpine, БД `gmrelay_db`, пользователь `gmrelay`.
|
- `db`: PostgreSQL 17 Alpine, БД `gmrelay_db`, пользователь `gmrelay`.
|
||||||
- `bot`: образ `git.codeanddice.ru/toutsu/gmrelay-bot:1.2.0`.
|
- `bot`: образ `git.codeanddice.ru/toutsu/gmrelay-bot:1.3.0`.
|
||||||
- `web`: образ `git.codeanddice.ru/toutsu/gmrelay-web:1.2.0`.
|
- `web`: образ `git.codeanddice.ru/toutsu/gmrelay-web:1.3.0`.
|
||||||
|
|
||||||
Web UI будет доступен на `http://localhost:8080`, если `GMRELAY_WEB_PORT` не переопределён.
|
Web UI будет доступен на `http://localhost:8080`, если `GMRELAY_WEB_PORT` не переопределён.
|
||||||
|
|
||||||
@@ -71,5 +71,6 @@ dotnet run --project src/GmRelay.AppHost
|
|||||||
|
|
||||||
- `/start` должен ответить `GM-Relay Bot ready. Use /help for commands.`
|
- `/start` должен ответить `GM-Relay Bot ready. Use /help for commands.`
|
||||||
- `/help` должен показать формат `/newsession`, включая необязательную строку `Мест:`.
|
- `/help` должен показать формат `/newsession`, включая необязательную строку `Мест:`.
|
||||||
|
- В сообщении расписания у активной сессии должны быть кнопки записи и `Выйти`.
|
||||||
- Web-панель должна перенаправлять неавторизованного пользователя на `/login`.
|
- Web-панель должна перенаправлять неавторизованного пользователя на `/login`.
|
||||||
- После входа через Telegram GM видит только группы, где он записан как `gm_telegram_id`.
|
- После входа через Telegram GM видит только группы, где он записан как `gm_telegram_id`.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# Развёртывание
|
# Развёртывание
|
||||||
|
|
||||||
Текущий production-like способ запуска GM-Relay **v1.2.0** — Docker Compose из `compose.yaml`.
|
Текущий production-like способ запуска GM-Relay **v1.3.0** — Docker Compose из `compose.yaml`.
|
||||||
|
|
||||||
## Сервисы Docker Compose
|
## Сервисы Docker Compose
|
||||||
|
|
||||||
@@ -15,13 +15,13 @@
|
|||||||
|
|
||||||
`bot`:
|
`bot`:
|
||||||
|
|
||||||
- образ: `git.codeanddice.ru/toutsu/gmrelay-bot:1.2.0`;
|
- образ: `git.codeanddice.ru/toutsu/gmrelay-bot:1.3.0`;
|
||||||
- запускается после успешного healthcheck сервиса `db`;
|
- запускается после успешного healthcheck сервиса `db`;
|
||||||
- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`.
|
- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`.
|
||||||
|
|
||||||
`web`:
|
`web`:
|
||||||
|
|
||||||
- образ: `git.codeanddice.ru/toutsu/gmrelay-web:1.2.0`;
|
- образ: `git.codeanddice.ru/toutsu/gmrelay-web:1.3.0`;
|
||||||
- запускается после успешного healthcheck сервиса `db`;
|
- запускается после успешного healthcheck сервиса `db`;
|
||||||
- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__BotUsername`;
|
- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__BotUsername`;
|
||||||
- порт: `${GMRELAY_WEB_PORT:-8080}:8080`;
|
- порт: `${GMRELAY_WEB_PORT:-8080}:8080`;
|
||||||
@@ -92,7 +92,7 @@ docker compose down -v
|
|||||||
|
|
||||||
## Поведение миграций
|
## Поведение миграций
|
||||||
|
|
||||||
Бот применяет DbUp-миграции при старте до обработки Telegram updates. В версии `1.2.0` добавлена миграция `V006__add_session_capacity_waitlist.sql`; она расширяет схему лимитом мест и листом ожидания. После обновления стоит проверить логи `bot`, чтобы убедиться, что миграции применились без ошибок.
|
Бот применяет DbUp-миграции при старте до обработки Telegram updates. В версии `1.3.0` новых миграций нет: самостоятельная отмена записи использует существующую таблицу `session_participants` и waitlist-схему из `V006__add_session_capacity_waitlist.sql`. После обновления стоит проверить логи `bot`, чтобы убедиться, что миграции применились без ошибок.
|
||||||
|
|
||||||
## Безопасность
|
## Безопасность
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ dotnet run --project src/GmRelay.AppHost
|
|||||||
|
|
||||||
`Directory.Build.props` задаёт:
|
`Directory.Build.props` задаёт:
|
||||||
|
|
||||||
- `Version`: `1.1.5`.
|
- `Version`: `1.3.0`.
|
||||||
- `TargetFramework`: `net10.0`.
|
- `TargetFramework`: `net10.0`.
|
||||||
- `LangVersion`: `preview`.
|
- `LangVersion`: `preview`.
|
||||||
- `Nullable`: `enable`.
|
- `Nullable`: `enable`.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Руководство ГМа
|
# Руководство ГМа
|
||||||
|
|
||||||
Руководство описывает пользовательские сценарии бота и Web-панели для GM-Relay **v1.2.0**.
|
Руководство описывает пользовательские сценарии бота и Web-панели для GM-Relay **v1.3.0**.
|
||||||
|
|
||||||
## Кто считается ГМом
|
## Кто считается ГМом
|
||||||
|
|
||||||
@@ -40,6 +40,17 @@ GM группы определяется полем `game_groups.gm_telegram_id`
|
|||||||
|
|
||||||
Игроки из листа ожидания не участвуют в RSVP, голосовании переноса и рассылке ссылки на игру, пока GM не поднимет их в основной состав.
|
Игроки из листа ожидания не участвуют в RSVP, голосовании переноса и рассылке ссылки на игру, пока GM не поднимет их в основной состав.
|
||||||
|
|
||||||
|
## Самостоятельный выход игрока
|
||||||
|
|
||||||
|
Игрок может снять запись кнопкой `Выйти <дата>` в сообщении расписания.
|
||||||
|
|
||||||
|
Поведение при выходе:
|
||||||
|
|
||||||
|
- если игрок был в основном составе, его запись удаляется из сессии;
|
||||||
|
- если игрок был в листе ожидания, он удаляется из очереди;
|
||||||
|
- если после выхода из основного состава есть свободное место и лист ожидания не пуст, бот автоматически переводит первого ожидающего в основной состав;
|
||||||
|
- после изменения бот перерисовывает сообщение расписания, чтобы список участников и очередь оставались актуальными.
|
||||||
|
|
||||||
## Повышение из листа ожидания
|
## Повышение из листа ожидания
|
||||||
|
|
||||||
GM может поднять первого игрока из очереди:
|
GM может поднять первого игрока из очереди:
|
||||||
@@ -47,7 +58,7 @@ GM может поднять первого игрока из очереди:
|
|||||||
- в Telegram — кнопкой `Из ожидания (ГМ)` в сообщении расписания;
|
- в Telegram — кнопкой `Из ожидания (ГМ)` в сообщении расписания;
|
||||||
- в Web Dashboard — кнопкой `Из ожидания` в списке сессий.
|
- в Web Dashboard — кнопкой `Из ожидания` в списке сессий.
|
||||||
|
|
||||||
Повышение возможно только если в основном составе есть свободное место. Если лимит заполнен, сначала увеличьте `Мест:` в Web-редактировании сессии.
|
Повышение возможно только если в основном составе есть свободное место. Если лимит заполнен, сначала увеличьте `Мест:` в Web-редактировании сессии. При самостоятельном выходе активного игрока первый ожидающий повышается автоматически.
|
||||||
|
|
||||||
## Отмена и удаление
|
## Отмена и удаление
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -1,10 +1,10 @@
|
|||||||
# Главная
|
# Главная
|
||||||
|
|
||||||
GM-Relay — Telegram-бот и Blazor-панель для организации TTRPG-сессий. Текущее состояние документации соответствует репозиторию `Toutsu/GmRelayBot` и релизу **v1.2.0**.
|
GM-Relay — Telegram-бот и Blazor-панель для организации TTRPG-сессий. Текущее состояние документации соответствует репозиторию `Toutsu/GmRelayBot` и релизу **v1.3.0**.
|
||||||
|
|
||||||
## Текущий стек
|
## Текущий стек
|
||||||
|
|
||||||
- Версия проекта: `1.2.0`.
|
- Версия проекта: `1.3.0`.
|
||||||
- Платформа: `.NET 10`, C# preview, nullable reference types, warnings as errors.
|
- Платформа: `.NET 10`, C# preview, nullable reference types, warnings as errors.
|
||||||
- Оркестрация разработки: `.NET Aspire 13` через `src/GmRelay.AppHost`.
|
- Оркестрация разработки: `.NET Aspire 13` через `src/GmRelay.AppHost`.
|
||||||
- Runtime бота: `Worker Service`, Telegram long polling, Native AOT.
|
- Runtime бота: `Worker Service`, Telegram long polling, Native AOT.
|
||||||
@@ -17,8 +17,9 @@ GM-Relay — Telegram-бот и Blazor-панель для организаци
|
|||||||
|
|
||||||
- Создание пачки игровых сессий одной командой `/newsession` с несколькими строками `Время:`.
|
- Создание пачки игровых сессий одной командой `/newsession` с несколькими строками `Время:`.
|
||||||
- Опциональный лимит мест через строку `Мест:` при создании сессии.
|
- Опциональный лимит мест через строку `Мест:` при создании сессии.
|
||||||
- Интерактивная запись игроков на конкретные даты через inline-кнопки Telegram.
|
- Интерактивная запись игроков на конкретные даты и самостоятельный выход через inline-кнопки Telegram.
|
||||||
- Лист ожидания: если основной состав заполнен, новые игроки не переполняют сессию, а попадают в очередь.
|
- Лист ожидания: если основной состав заполнен, новые игроки не переполняют сессию, а попадают в очередь.
|
||||||
|
- Автоматическое освобождение места: когда активный игрок снимает запись, первый ожидающий переводится в основной состав.
|
||||||
- Повышение первого игрока из листа ожидания кнопкой GM в Telegram или Web Dashboard.
|
- Повышение первого игрока из листа ожидания кнопкой GM в Telegram или Web Dashboard.
|
||||||
- Автоматическое создание Telegram forum topic для пачки игр, если группа является форумом.
|
- Автоматическое создание Telegram forum topic для пачки игр, если группа является форумом.
|
||||||
- Отмена отдельной сессии GM из основного сообщения расписания.
|
- Отмена отдельной сессии GM из основного сообщения расписания.
|
||||||
|
|||||||
Reference in New Issue
Block a user