Update wiki page 'Руководство ГМа'
@@ -1,12 +1,10 @@
|
|||||||
# Руководство ГМа
|
# Руководство ГМа
|
||||||
|
|
||||||
Руководство описывает текущие пользовательские сценарии бота и web-панели.
|
Руководство описывает пользовательские сценарии бота и Web-панели для GM-Relay **v1.2.0**.
|
||||||
|
|
||||||
## Кто считается ГМом
|
## Кто считается ГМом
|
||||||
|
|
||||||
ГМ группы определяется полем `game_groups.gm_telegram_id`. При первом создании сессии в группе бот сохраняет Telegram ID автора как ГМа. Последующие операции управления проверяют этот ID.
|
GM группы определяется полем `game_groups.gm_telegram_id`. При первом создании сессии в группе бот сохраняет Telegram ID автора как GM. Последующие операции управления проверяют этот ID.
|
||||||
|
|
||||||
Это значит, что роль ГМа внутри GM-Relay не обязательно равна роли администратора Telegram-группы.
|
|
||||||
|
|
||||||
## Создание расписания
|
## Создание расписания
|
||||||
|
|
||||||
@@ -17,6 +15,7 @@
|
|||||||
Название: Легенды Берега Мечей
|
Название: Легенды Берега Мечей
|
||||||
Время: 15.05.2026 19:30
|
Время: 15.05.2026 19:30
|
||||||
Время: 22.05.2026 19:00
|
Время: 22.05.2026 19:00
|
||||||
|
Мест: 4
|
||||||
Ссылка: https://example.com/join
|
Ссылка: https://example.com/join
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -24,78 +23,71 @@
|
|||||||
|
|
||||||
- `Название:` — общий заголовок пачки игр.
|
- `Название:` — общий заголовок пачки игр.
|
||||||
- `Время:` — дата и время в МСК. Можно указать несколько строк.
|
- `Время:` — дата и время в МСК. Можно указать несколько строк.
|
||||||
|
- `Мест:` — необязательный лимит основного состава для каждой сессии в пачке.
|
||||||
- `Ссылка:` — ссылка для подключения к игре.
|
- `Ссылка:` — ссылка для подключения к игре.
|
||||||
|
|
||||||
Поддерживаемые форматы времени:
|
Если `Мест:` не указан, запись остаётся без лимита. Если указан лимит, бот показывает заполненность в формате `Места: 2/4`.
|
||||||
|
|
||||||
- `dd.MM.yyyy HH:mm`
|
## Запись игроков и лист ожидания
|
||||||
- `dd.MM.yyyy H:mm`
|
|
||||||
- `d.MM.yyyy HH:mm`
|
|
||||||
|
|
||||||
Время в прошлом пропускается с предупреждением. Некорректные строки `Время:` тоже пропускаются с предупреждением.
|
Игроки записываются через inline-кнопки вида `На <дата>` в сообщении расписания.
|
||||||
|
|
||||||
После успешного создания бот публикует общее сообщение расписания с кнопками записи. Если группа является Telegram forum, бот создаёт отдельную тему `Игры: <Название>` и публикует расписание там.
|
Поведение при записи:
|
||||||
|
|
||||||
## Запись игроков
|
- если мест достаточно, игрок попадает в основной состав со статусом RSVP `Pending`;
|
||||||
|
- если лимит заполнен, игрок попадает в `Лист ожидания` и не считается активным участником игры;
|
||||||
|
- повторная запись отвечает, что игрок уже записан или уже находится в листе ожидания.
|
||||||
|
|
||||||
Игроки записываются через inline-кнопки вида `На <дата>` в сообщении расписания. При записи бот:
|
Игроки из листа ожидания не участвуют в RSVP, голосовании переноса и рассылке ссылки на игру, пока GM не поднимет их в основной состав.
|
||||||
|
|
||||||
- создаёт или обновляет запись игрока в `players`;
|
## Повышение из листа ожидания
|
||||||
- добавляет участника в `session_participants` со статусом `Pending`;
|
|
||||||
- перерисовывает общее сообщение расписания.
|
|
||||||
|
|
||||||
Повторная запись на ту же сессию отклоняется сообщением `Вы уже записаны!`.
|
GM может поднять первого игрока из очереди:
|
||||||
|
|
||||||
|
- в Telegram — кнопкой `Из ожидания (ГМ)` в сообщении расписания;
|
||||||
|
- в Web Dashboard — кнопкой `Из ожидания` в списке сессий.
|
||||||
|
|
||||||
|
Повышение возможно только если в основном составе есть свободное место. Если лимит заполнен, сначала увеличьте `Мест:` в Web-редактировании сессии.
|
||||||
|
|
||||||
## Отмена и удаление
|
## Отмена и удаление
|
||||||
|
|
||||||
Есть два разных действия:
|
|
||||||
|
|
||||||
- `Отменить <дата> (ГМ)` в сообщении расписания меняет статус сессии на `Cancelled` и оставляет её в истории пачки.
|
- `Отменить <дата> (ГМ)` в сообщении расписания меняет статус сессии на `Cancelled` и оставляет её в истории пачки.
|
||||||
- `/listsessions` показывает будущие сессии; если команду вызывает ГМ, бот добавляет кнопки удаления. Удаление физически удаляет сессию из БД.
|
- `/listsessions` показывает будущие сессии; если команду вызывает GM, бот добавляет кнопки удаления.
|
||||||
|
- Удаление физически удаляет сессию из БД. Если после удаления пачка пустая и была создана forum-тема, бот пытается удалить тему.
|
||||||
Если удалена последняя сессия пачки и для неё была создана forum-тема, бот пытается удалить эту тему.
|
|
||||||
|
|
||||||
## Перенос сессии
|
## Перенос сессии
|
||||||
|
|
||||||
Перенос запускается кнопкой `⏰ (ГМ)` в сообщении расписания.
|
Перенос запускается кнопкой `⏰ (ГМ)` в сообщении расписания.
|
||||||
|
|
||||||
Текущий поток:
|
Поток:
|
||||||
|
|
||||||
1. Бот проверяет, что кнопку нажал ГМ.
|
1. Бот проверяет, что кнопку нажал GM.
|
||||||
2. Создаётся `reschedule_proposals` со статусом `AwaitingTime`.
|
2. Создаётся `reschedule_proposals` со статусом `AwaitingTime`.
|
||||||
3. ГМ пишет новое время обычным сообщением в чат.
|
3. GM пишет новое время обычным сообщением в чат.
|
||||||
4. Если участников нет, бот переносит сессию сразу.
|
4. Если активных участников нет, бот переносит сессию сразу.
|
||||||
5. Если участники есть, бот создаёт голосование.
|
5. Если активные участники есть, бот создаёт голосование.
|
||||||
6. Любой голос `Против` отклоняет перенос.
|
6. Любой голос `Против` отклоняет перенос.
|
||||||
7. Если все участники согласились, бот переносит сессию, сбрасывает RSVP участников в `Pending`, очищает `confirmation_message_id` и `link_message_id`.
|
7. Если все активные участники согласились, бот переносит сессию, сбрасывает RSVP активных участников в `Pending`, очищает `confirmation_message_id` и `link_message_id`.
|
||||||
|
|
||||||
## Подтверждение участия
|
## RSVP и ссылка на игру
|
||||||
|
|
||||||
Планировщик проверяет БД раз в минуту. За 24 часа до сессии со статусом `Planned` бот отправляет RSVP-сообщение участникам.
|
За 24 часа до плановой сессии бот отправляет RSVP-сообщение активным участникам:
|
||||||
|
|
||||||
Участники выбирают:
|
- `Буду` переводит участника в `Confirmed`.
|
||||||
|
- `Не смогу` переводит участника в `Declined`, а GM получает личное уведомление.
|
||||||
|
|
||||||
- `Буду` — статус игрока становится `Confirmed`.
|
Когда все активные участники подтвердили участие, сессия переходит в `Confirmed`, группа и GM получают уведомления.
|
||||||
- `Не смогу` — статус игрока становится `Declined`, ГМ получает личное уведомление.
|
|
||||||
|
|
||||||
Когда все участники подтвердили участие, сессия переходит в `Confirmed`, группа и ГМ получают уведомления.
|
За 5 минут до подтверждённой сессии бот отправляет ссылку на подключение и список подтверждённых активных участников.
|
||||||
|
|
||||||
## Ссылка на игру
|
|
||||||
|
|
||||||
За 5 минут до сессии со статусом `Confirmed` бот отправляет ссылку на подключение и список подтверждённых участников. Повторная отправка защищена полем `link_message_id`.
|
|
||||||
|
|
||||||
## Экспорт календаря
|
|
||||||
|
|
||||||
Команда `/exportcalendar` отправляет файл `schedule.ics` с будущими сессиями текущей группы, которые находятся в статусе `Planned`. Длительность события в календаре сейчас фиксирована как 4 часа.
|
|
||||||
|
|
||||||
## Web-панель
|
## Web-панель
|
||||||
|
|
||||||
Web UI доступен после входа через Telegram Login Widget.
|
Web UI доступен после входа через Telegram Login Widget. GM может:
|
||||||
|
|
||||||
ГМ может:
|
|
||||||
|
|
||||||
- видеть свои Telegram-группы;
|
- видеть свои Telegram-группы;
|
||||||
- открыть список предстоящих сессий группы;
|
- открыть список предстоящих сессий группы;
|
||||||
- изменить название, время и ссылку сессии.
|
- видеть заполненность и размер листа ожидания;
|
||||||
|
- редактировать название, время, ссылку и лимит мест;
|
||||||
|
- поднять первого игрока из листа ожидания, если есть свободное место.
|
||||||
|
|
||||||
При сохранении изменений web-панель обновляет запись в БД, отправляет уведомление в Telegram-группу и пытается перерисовать исходное сообщение расписания пачки.
|
При сохранении изменений Web-панель обновляет запись в БД, отправляет уведомление в Telegram-группу и пытается перерисовать исходное сообщение расписания пачки.
|
||||||
Reference in New Issue
Block a user