From 20f3529efcaf41dcb14b886b0d27b9f0ab0ba36b Mon Sep 17 00:00:00 2001 From: Toutsu Date: Fri, 24 Apr 2026 13:30:17 +0300 Subject: [PATCH] =?UTF-8?q?Update=20wiki=20page=20'=D0=A0=D1=83=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=D0=BE=D0=B4=D1=81=D1=82=D0=B2=D0=BE=20=D0=93=D0=9C?= =?UTF-8?q?=D0=B0'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...81%D1%82%D0%B2%D0%BE-%D0%93%D0%9C%D0%B0.md | 84 +++++++++---------- 1 file changed, 38 insertions(+), 46 deletions(-) diff --git a/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE-%D0%93%D0%9C%D0%B0.md b/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE-%D0%93%D0%9C%D0%B0.md index cc9fb41..5b855ee 100644 --- a/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE-%D0%93%D0%9C%D0%B0.md +++ b/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE-%D0%93%D0%9C%D0%B0.md @@ -1,12 +1,10 @@ # Руководство ГМа -Руководство описывает текущие пользовательские сценарии бота и web-панели. +Руководство описывает пользовательские сценарии бота и Web-панели для GM-Relay **v1.2.0**. ## Кто считается ГМом -ГМ группы определяется полем `game_groups.gm_telegram_id`. При первом создании сессии в группе бот сохраняет Telegram ID автора как ГМа. Последующие операции управления проверяют этот ID. - -Это значит, что роль ГМа внутри GM-Relay не обязательно равна роли администратора Telegram-группы. +GM группы определяется полем `game_groups.gm_telegram_id`. При первом создании сессии в группе бот сохраняет Telegram ID автора как GM. Последующие операции управления проверяют этот ID. ## Создание расписания @@ -17,6 +15,7 @@ Название: Легенды Берега Мечей Время: 15.05.2026 19:30 Время: 22.05.2026 19:00 +Мест: 4 Ссылка: 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` и оставляет её в истории пачки. -- `/listsessions` показывает будущие сессии; если команду вызывает ГМ, бот добавляет кнопки удаления. Удаление физически удаляет сессию из БД. - -Если удалена последняя сессия пачки и для неё была создана forum-тема, бот пытается удалить эту тему. +- `/listsessions` показывает будущие сессии; если команду вызывает GM, бот добавляет кнопки удаления. +- Удаление физически удаляет сессию из БД. Если после удаления пачка пустая и была создана forum-тема, бот пытается удалить тему. ## Перенос сессии Перенос запускается кнопкой `⏰ (ГМ)` в сообщении расписания. -Текущий поток: +Поток: -1. Бот проверяет, что кнопку нажал ГМ. +1. Бот проверяет, что кнопку нажал GM. 2. Создаётся `reschedule_proposals` со статусом `AwaitingTime`. -3. ГМ пишет новое время обычным сообщением в чат. -4. Если участников нет, бот переносит сессию сразу. -5. Если участники есть, бот создаёт голосование. +3. GM пишет новое время обычным сообщением в чат. +4. Если активных участников нет, бот переносит сессию сразу. +5. Если активные участники есть, бот создаёт голосование. 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`. -- `Не смогу` — статус игрока становится `Declined`, ГМ получает личное уведомление. +Когда все активные участники подтвердили участие, сессия переходит в `Confirmed`, группа и GM получают уведомления. -Когда все участники подтвердили участие, сессия переходит в `Confirmed`, группа и ГМ получают уведомления. - -## Ссылка на игру - -За 5 минут до сессии со статусом `Confirmed` бот отправляет ссылку на подключение и список подтверждённых участников. Повторная отправка защищена полем `link_message_id`. - -## Экспорт календаря - -Команда `/exportcalendar` отправляет файл `schedule.ics` с будущими сессиями текущей группы, которые находятся в статусе `Planned`. Длительность события в календаре сейчас фиксирована как 4 часа. +За 5 минут до подтверждённой сессии бот отправляет ссылку на подключение и список подтверждённых активных участников. ## Web-панель -Web UI доступен после входа через Telegram Login Widget. - -ГМ может: +Web UI доступен после входа через Telegram Login Widget. GM может: - видеть свои Telegram-группы; - открыть список предстоящих сессий группы; -- изменить название, время и ссылку сессии. +- видеть заполненность и размер листа ожидания; +- редактировать название, время, ссылку и лимит мест; +- поднять первого игрока из листа ожидания, если есть свободное место. -При сохранении изменений web-панель обновляет запись в БД, отправляет уведомление в Telegram-группу и пытается перерисовать исходное сообщение расписания пачки. \ No newline at end of file +При сохранении изменений Web-панель обновляет запись в БД, отправляет уведомление в Telegram-группу и пытается перерисовать исходное сообщение расписания пачки. \ No newline at end of file