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