docs(readme): update for v2.7.2 — Discord features, env vars, structure
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Проект разработан с упором на производительность, архитектуру Vertical Slice, Native AOT (для бота) и удобство развертывания с использованием .NET Aspire.
|
Проект разработан с упором на производительность, архитектуру Vertical Slice, Native AOT (для бота) и удобство развертывания с использованием .NET Aspire.
|
||||||
|
|
||||||
**Текущая версия:** `v2.7.0`.
|
**Текущая версия:** `v2.7.2`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -25,11 +25,11 @@
|
|||||||
- **🔄 Автоматическая синхронизация**: Любые изменения в веб-интерфейсе мгновенно обновляют сообщения с расписанием в подключенных Telegram- и Discord-каналах.
|
- **🔄 Автоматическая синхронизация**: Любые изменения в веб-интерфейсе мгновенно обновляют сообщения с расписанием в подключенных Telegram- и Discord-каналах.
|
||||||
|
|
||||||
### Discord Bot
|
### Discord Bot
|
||||||
- **Slash-команды расписания**: GM создаёт сессию через `/newsession` и публикует актуальное расписание через `/listsessions`.
|
- **Slash-команды `/newsession` и `/listsessions`**: GM создаёт сессии и публикует актуальное расписание прямо в Discord-канале.
|
||||||
- **Кнопки записи и выхода**: игроки нажимают Join/Leave в Discord-сообщении; бот отвечает ephemeral-сообщением и обновляет schedule message.
|
- **Кнопки Join/Leave с ephemeral-ответами**: игроки нажимают Join/Leave в Discord-сообщении; бот отвечает ephemeral-сообщением и обновляет schedule message.
|
||||||
- **Подтверждения и RSVP**: scheduler публикует запрос подтверждения в Discord-канале, игроки отвечают кнопками, а GM получает исходы RSVP через платформенный messenger.
|
- **RSVP (подтверждения) за 24ч до сессии**: scheduler публикует запрос подтверждения в Discord-канале, игроки отвечают кнопками, а GM получает итоги RSVP.
|
||||||
- **Напоминания и ссылки**: one-hour reminders и join-link notifications отправляются в Discord DM при включенных личных уведомлениях; сбои DM логируются без публичного fallback.
|
- **DM-напоминания за 1ч и ссылки перед игрой**: one-hour reminders и join-link notifications отправляются в Discord DM при включённых личных уведомлениях; сбои DM логируются без публичного fallback.
|
||||||
- **Переносы**: deadline-сервис обновляет Discord vote message и schedule message через `IPlatformMessenger`.
|
- **Reschedule voting (голосование за перенос)**: deadline-сервис обновляет Discord vote message и schedule message через `IPlatformMessenger`.
|
||||||
- **Лимиты и waitlist**: при заполненном составе игрок попадает в waitlist, а при выходе участника первый ожидающий автоматически продвигается в основной состав.
|
- **Лимиты и waitlist**: при заполненном составе игрок попадает в waitlist, а при выходе участника первый ожидающий автоматически продвигается в основной состав.
|
||||||
|
|
||||||
### 🌐 Web Dashboard (Blazor Server)
|
### 🌐 Web Dashboard (Blazor Server)
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
|---|---|
|
|---|---|
|
||||||
| Язык | C# 14 (.NET 10) |
|
| Язык | C# 14 (.NET 10) |
|
||||||
| Архитектура | Vertical Slice + общая библиотека `GmRelay.Shared` |
|
| Архитектура | Vertical Slice + общая библиотека `GmRelay.Shared` |
|
||||||
| Боты | Telegram.Bot (**Native AOT**), NetCord Gateway (Discord worker) |
|
| Боты | Telegram.Bot (**Native AOT**), NetCord Gateway (Discord worker внутри `GmRelay.Bot`) |
|
||||||
| Веб | Blazor Server |
|
| Веб | Blazor Server |
|
||||||
| Оркестрация | .NET Aspire (`GmRelay.AppHost`) |
|
| Оркестрация | .NET Aspire (`GmRelay.AppHost`) |
|
||||||
| БД | PostgreSQL |
|
| БД | PostgreSQL |
|
||||||
@@ -85,6 +85,9 @@ TELEGRAM_BOT_TOKEN=ваш_токен_здесь
|
|||||||
# Токен Discord application bot
|
# Токен Discord application bot
|
||||||
DISCORD_BOT_TOKEN=ваш_discord_токен_здесь
|
DISCORD_BOT_TOKEN=ваш_discord_токен_здесь
|
||||||
|
|
||||||
|
# Client ID Discord application (используется для slash-команд)
|
||||||
|
DISCORD_BOT_CLIENT_ID=ваш_discord_client_id_здесь
|
||||||
|
|
||||||
# Имя бота без @ (для Telegram Login Widget)
|
# Имя бота без @ (для Telegram Login Widget)
|
||||||
TELEGRAM_BOT_USERNAME=ваше_имя_бота_здесь
|
TELEGRAM_BOT_USERNAME=ваше_имя_бота_здесь
|
||||||
|
|
||||||
@@ -109,15 +112,15 @@ docker compose up -d
|
|||||||
- создание Docker-сети и volume PostgreSQL;
|
- создание Docker-сети и volume PostgreSQL;
|
||||||
- подъём PostgreSQL (`db:5432`);
|
- подъём PostgreSQL (`db:5432`);
|
||||||
- запуск бота с плавной миграцией (DbUp);
|
- запуск бота с плавной миграцией (DbUp);
|
||||||
- запуск отдельного Discord Gateway worker на NetCord;
|
- запуск Discord Gateway worker на NetCord (healthcheck на `:8082`);
|
||||||
- запуск веб-приложения с подключением к БД и Telegram API.
|
- запуск веб-приложения с подключением к БД и Telegram API.
|
||||||
|
|
||||||
### 3. Первоначальная настройка
|
### 3. Первоначальная настройка
|
||||||
1. Напишите боту `/start`.
|
1. Напишите боту `/start`.
|
||||||
2. Создайте группу через `/newgroup`.
|
2. Создайте группу через `/newgroup`.
|
||||||
3. Откройте Mini App или Web Dashboard для расширенного управления.
|
3. Откройте Mini App или Web Dashboard для расширенного управления.
|
||||||
4. Для Discord пригласите application bot на сервер с правами `bot` и `applications.commands`.
|
4. Для Discord пригласите application bot на сервер с правами `bot` и `applications.commands`. Скопируйте `DISCORD_BOT_TOKEN` и `DISCORD_BOT_CLIENT_ID` в `.env`.
|
||||||
5. В Discord создайте сессию через `/newsession` или опубликуйте расписание через `/listsessions`; игроки записываются и выходят кнопками в опубликованном сообщении.
|
5. Перезапустите Docker Compose (`docker compose up -d`), а затем в Discord создайте сессию через `/newsession` или опубликуйте расписание через `/listsessions`; игроки записываются и выходят кнопками в опубликованном сообщении.
|
||||||
|
|
||||||
## 💾 Backup и восстановление
|
## 💾 Backup и восстановление
|
||||||
|
|
||||||
@@ -164,8 +167,7 @@ BACKUP_VOLUME_NAME=game_pgbackups
|
|||||||
```
|
```
|
||||||
├── src/
|
├── src/
|
||||||
│ ├── GmRelay.AppHost/ # .NET Aspire orchestrator
|
│ ├── GmRelay.AppHost/ # .NET Aspire orchestrator
|
||||||
│ ├── GmRelay.Bot/ # Telegram-бот (Native AOT)
|
│ ├── GmRelay.Bot/ # Telegram- и Discord-бот (Native AOT + NetCord Gateway worker)
|
||||||
│ ├── GmRelay.DiscordBot/ # Discord Gateway worker на NetCord
|
|
||||||
│ ├── GmRelay.ServiceDefaults/ # Aspire service defaults
|
│ ├── GmRelay.ServiceDefaults/ # Aspire service defaults
|
||||||
│ ├── GmRelay.Shared/ # Общие доменные модели
|
│ ├── GmRelay.Shared/ # Общие доменные модели
|
||||||
│ └── GmRelay.Web/ # Blazor Server dashboard
|
│ └── GmRelay.Web/ # Blazor Server dashboard
|
||||||
@@ -177,6 +179,16 @@ BACKUP_VOLUME_NAME=game_pgbackups
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 👨💻 Для разработчиков
|
||||||
|
|
||||||
|
- **Архитектура**: проект следует Vertical Slice с явным DI. Подробности — в [ADR-001](docs/adr/0001-use-vertical-slice-native-aot-and-aspire.md) и [ADR-002](docs/adr/002-platform-neutral-batch-rendering.md).
|
||||||
|
- **Добавление обработчика**: из-за Native AOT все DI-регистрации выполняются вручную в `src/GmRelay.Bot/Program.cs` (assembly scanning не используется).
|
||||||
|
- **Миграции**: SQL-скрипты добавляются как embedded resources в `src/GmRelay.Bot/Migrations/` и применяются автоматически при старте бота через DbUp.
|
||||||
|
- **Тесты**: `dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --verbosity normal`
|
||||||
|
- **Сборка**: `dotnet build`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 📜 Лицензия
|
## 📜 Лицензия
|
||||||
|
|
||||||
MIT License. См. [LICENSE](./LICENSE).
|
MIT License. См. [LICENSE](./LICENSE).
|
||||||
|
|||||||
Reference in New Issue
Block a user