diff --git a/Home.md b/Home.md index bf30e09..fd0d360 100644 --- a/Home.md +++ b/Home.md @@ -1,58 +1,27 @@ -# Главная +# GM-Relay -GM-Relay — Telegram-бот, Telegram Mini App и Blazor-панель для организации TTRPG-сессий. Текущее состояние документации соответствует репозиторию `Toutsu/GmRelayBot` и релизу **v1.9.9**. +GM-Relay — бот для организации TTRPG-сессий. Поддерживает **Telegram** и **Discord**. -## Текущий стек +**Текущая версия: v2.7.2** -- Версия проекта: `1.9.9`. -- Платформа: `.NET 10`, C# preview, nullable reference types, warnings as errors. -- Оркестрация разработки: `.NET Aspire 13` через `src/GmRelay.AppHost`. -- Runtime бота: `Worker Service`, Telegram long polling, Native AOT. -- Web UI: Blazor Server с Telegram Login Widget и Telegram Mini App входом. -- База данных: PostgreSQL 17. -- Доступ к данным: Npgsql, Dapper, Dapper.AOT; миграции через DbUp. -- Деплой: Docker Compose, образы `gmrelay-bot` и `gmrelay-web`. +## Что умеет -## Основные возможности +- Создавать расписания игр (batch sessions) одной командой. +- Автоматически собирать игроков: запись, лист ожидания, подтверждения (RSVP). +- Отправлять напоминания за 24ч и 1ч, ссылки перед игрой. +- Проводить голосование за перенос (reschedule voting). +- Показывать статистику посещаемости и историю изменений. -- Создание пачки игровых сессий одной командой `/newsession` с несколькими строками `Время:` или одной датой плюс `Игр:`/`Интервал:` для регулярного расписания. -- Опциональный лимит мест через строку `Мест:` при создании сессии. -- Опциональная обложка batch-поста через прикреплённое фото к `/newsession` или строку `Картинка: https://...`. -- Интерактивная запись игроков на конкретные даты и самостоятельный выход через inline-кнопки Telegram. -- Лист ожидания: если основной состав заполнен, новые игроки не переполняют сессию, а попадают в очередь. -- Автоматическое освобождение места: когда активный игрок снимает запись, первый ожидающий переводится в основной состав. -- Делегирование управления группой: owner может назначать co-GM, а co-GM управляет расписанием в Telegram и Web Dashboard. -- Повышение первого игрока из листа ожидания через GM-панель `/listsessions` или Web Dashboard. -- Автоматическое создание Telegram forum topic для пачки игр, если группа является форумом. -- Основное сообщение расписания показывает только игроковые кнопки записи и выхода. -- Управление сессиями через `/listsessions` с отображением мест, очереди ожидания и GM-кнопок отмены, переноса, повышения и удаления. -- Перенос сессии через GM-панель `/listsessions`: GM предлагает 2-3 времени и дедлайн, участники голосуют за варианты, бот показывает текущие результаты и применяет победителя по дедлайну. -- RSVP-подтверждение за 24 часа до игры только для основного состава. -- Персональные DM-уведомления игрокам о RSVP за 24 часа, напоминание за 1 час, ссылке перед стартом, отмене и переносе. -- Отправка ссылки на подключение за 5 минут до подтверждённой игры. -- Экспорт будущих запланированных сессий в `.ics` через `/exportcalendar`. -- Web-панель для owner/co-GM: список групп, список сессий, редактирование названия, времени, ссылки и лимита мест. -- Telegram Mini App Dashboard: мобильный вход из Telegram через `/miniapp`, проверка WebApp `initData`, callback-based fallback login через `/auth/telegram-login` внутри активного WebView и поддержка Telegram safe-area отступов под статус-бар телефона и верхнюю панель Telegram. -- Шаблоны кампаний в Web Dashboard: отдельная вкладка для управления сохранёнными параметрами кампаний и применение шаблонов на странице группы по первой дате. -- Bulk-операции в Web Dashboard: общий `title/link` для batch, перенос всей пачки на фиксированный шаг и клонирование на следующую неделю или месяц с новым Telegram-сообщением. -- Настройка режима уведомлений для batch: `В группе и в личку` или `Только в группе`, при этом групповые сообщения сохраняются всегда. -- Smoke-покрытие обещаний лендинга для Telegram: функциональный тест фиксирует batch-сессии, inline-кнопки, лимиты/waitlist, автоповышение, голосование за перенос и синхронизацию Telegram batch-поста после dashboard-изменений без внешнего Telegram API. -- CSS-fix Web Dashboard: раскрывающиеся списки используют контрастный фон и текст в native select dropdown. -- CSS-fix sidebar: пункты меню рендерятся отдельными строками с корректным отступом между `Панель управления` и `Шаблоны`. +## Быстрый старт -## Разделы +1. Добавьте бота в Telegram-группу или на Discord-сервер. +2. Создайте группу через `/newgroup`. +3. Создайте расписание через `/newsession`. +4. Опубликуйте через `/listsessions`. -- [Быстрый старт](Быстрый-старт) — локальный запуск и первичная настройка. -- [Руководство ГМа](Руководство-ГМа) — формат команд, запись игроков, лимиты, waitlist и переносы. -- [Архитектура](Архитектура) — устройство сервисов и ключевые потоки. -- [Разработка](Разработка) — правила разработки, тесты и локальные команды. -- [Развёртывание](Развёртывание) — Docker Compose, окружение и эксплуатация. -- [База данных](База-данных) — схема БД, миграции и статусная модель. +## Полезные ссылки -## v1.9.9 - -Patch-релиз закрывает issue **#18** из этапа «Версия 1.0 — Telegram Bot + Mini App Dashboard»: добавлен функциональный smoke-сценарий обещаний лендинга для Telegram. Тест проходит без внешнего Telegram API через fake Telegram messenger и фиксирует ключевой пользовательский путь: создание batch-сессий на несколько дат, кнопки записи/выхода, лимит мест и waitlist, автоповышение ожидающего игрока, голосование за перенос, direct-notification mode и обновление Telegram batch-сообщения после dashboard-изменений. Новых миграций и новых переменных окружения нет. - -## v1.9.6 - -Patch-релиз улучшает Telegram-посты записи: GM может добавить обложку к batch через прикреплённое фото или строку `Картинка:`, а публичное сообщение расписания больше не перегружено кнопками owner/co-GM. Управление отменой, переносом, повышением из листа ожидания и удалением перенесено в `/listsessions`; доступ по-прежнему проверяется через owner/co-GM. Новых миграций нет. +- [Быстрый старт](Быстрый-старт) +- [Руководство ГМа](Руководство-ГМа) +- [Руководство игрока](Руководство-игрока) +- [FAQ](FAQ)