Toutsu 66ad5a4e8d
Deploy Telegram Bot / deploy (push) Failing after 6s
Add Gitea Actions CI/CD
2026-04-15 16:54:56 +03:00
2026-04-15 16:54:56 +03:00
2026-04-13 13:52:49 +03:00
2026-04-13 13:52:49 +03:00

🎲 GM-Relay: TTRPG Session Scheduling Bot

GM-Relay — это высокопроизводительный Telegram-бот для Мастеров Подземелий (ГМов), предназначенный для автоматизации записи игроков на сессии и управления игровым расписанием.

Бот разработан с упором на скорость, минимальное потребление ресурсов и удобство использования в реальных игровых группах.


Ключевые возможности

  • 📅 Создание расписаний (Batch Sessions): Создавайте сразу несколько игр одним сообщением (на неделю или месяц вперед).
  • Интерактивная запись: Игроки записываются на конкретные даты нажатием одной кнопки.
  • 📁 Поддержка Форумов (Telegram Topics): Бот автоматически создает тему во вложенных чатах Telegram под каждую новую пачку игр.
  • Управление сессиями: Мастер может отменять отдельные игры прямо в общем сообщении расписания.
  • 🗓 Экспорт в Календарь: Генерация файла .ics для добавления всех игр в Google, Apple или Яндекс Календарь одной командой.
  • 🚀 Native AOT: Скомпилирован в нативный бинарный файл. Мгновенный запуск и потребление памяти в десятки раз меньше обычных .NET приложений. Идеально для Raspberry Pi.

🛠 Технологический стек

  • Язык: C# 13 (.NET 10)
  • База данных: PostgreSQL
  • ORM: Dapper (AOT-совместный через Dapper.AOT)
  • Миграции: DbUp (автоматически при старте)
  • Контейнеризация: Docker + Multi-arch build (AMD64/ARM64)

🚀 Быстрый старт (Docker Compose)

1. Подготовка

Убедитесь, что у вас установлены Docker и Docker Compose.

2. Настройка окружения

Скопируйте файл-шаблон и заполните его значениями:

cp .env.example .env

Отредактируйте .env:

# Токен вашего бота от @BotFather
TELEGRAM_BOT_TOKEN=ваш_токен_здесь

# Пароль для базы данных PostgreSQL
POSTGRES_PASSWORD=ваш_надежный_пароль

3. Запуск

Выполните команду:

docker compose up -d

Бот сам создаст базу данных, применит миграции и начнет слушать сообщения.


⚙️ Настройка в Telegram

Чтобы бот работал корректно в вашей игровой группе:

  1. Добавьте бота в группу (или Супергруппу/Форум).
  2. Назначьте бота Администратором.
  3. Необходимые права:
    • Выбор тем (Managed Topics) — обязательно, если вы используете Форум (Темы), иначе бот не сможет создавать ветки для игр.
    • Отправка сообщений — само собой.
    • Закрепление сообщений — рекомендуется для удобства игроков.

Tip

Колонку "Мастер" (GM) бот определяет по первому человеку, который создал сессию в этой группе. Только этот пользователь сможет отменять игры через кнопки.


📝 Инструкция для Мастера

Создание расписания игр

Используйте команду /newsession с описанием в следующем формате:

/newsession
Название: Легенды Берега Мечей (D&D 5e)
Время: 15.05.2024 19:30
Время: 22.05.2024 19:00
Ссылка: https://discord.gg/invite-link
  • Название: Заголовок игры (будет отображаться в списке).
  • Время: Неограниченное количество строк "Время:" для каждой сессии.
  • Ссылка: Ссылка на Discord/Roll20/Foundry (будет доступна игрокам).

Другие команды

  • /listsessions — Показать список всех актуальных игр в этой группе.
  • /reschedulesession — Перенести сессию на другое время. Запускает голосование среди всех записавшихся игроков — время обновится только после единогласного одобрения.
  • /deletesession — Удалить сессию. Автоматически закрывает связанную тему в Форуме.
  • /exportcalendar — Получить файл .ics со всеми вашими будущими играми.
  • /help — Справка по формату.

🏗 Разработка и сборка

Если вы хотите собрать проект вручную без Docker:

  1. Установите .NET 10 SDK.
  2. Настройте строку подключения в appsettings.json или через переменные окружения.
  3. Для сборки Native AOT:
    dotnet publish src/GmRelay.Bot/GmRelay.Bot.csproj -c Release
    

Note

При использовании Dapper в режиме Native AOT, все SQL-запросы должны использовать строго типизированные DTO. Динамические типы (dynamic) не поддерживаются.


📜 Лицензия

Проект распространяется под лицензией MIT. Использование в некоммерческих целях приветствуется.

S
Description
No description provided
Readme 1.3 MiB
Languages
C# 76.7%
HTML 13.1%
CSS 7.9%
PowerShell 1%
Dockerfile 0.7%
Other 0.6%