Skip to content

About

Discord-бот для сборов Deadlock и ролей по реакциям

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

TuesdayNight

Самостоятельный Discord-бот для игровых сборов Deadlock и гильдии WoW Retail. Интерфейс бота — на английском языке.

Возможности

  • Сборы игроков: приглашения через /tag, кнопки участия и отказа, автоматические сборы по расписанию, сброс голосов и статистика. Состав берётся из текущих участников настроенной Discord-роли, без ботов.
  • Роли по реакциям: выдача и снятие ролей через панели /reactionrole. Поддерживаются обычные и серверные эмодзи; роли с серверными разрешениями, управляемые роли и @everyone запрещены.
  • WoW-дашборд: прогресс активных рейдов текущего сезона в формате The Venomous Abyss: 8/8H 2/8M (без Normal и рангов), топ-10 персонажей по экипированному ilvl и рейтингу Mythic+. Данные Raider.IO обновляются автоматически каждые 30 минут с учётом кэша; при сбое сохраняется последний результат. Всё размещается в одном компактном embed: рейды и два топа рядом, с названием сезона вида Midnight Season 2. В топ ilvl попадает только экипировка, обновлённая в текущем сезоне: старые снимки до сквиша, неизвестные и некорректные даты исключаются.
  • Группы Mythic+: ручной выбор подземелья, уровня и типа ключа — push, relaxed или carry. Создатель и участники выбирают класс и специализацию в модальном окне; роль определяется автоматически. Состав — 1 танк, 1 лекарь и 3 DPS. Без привязки аккаунтов, рейтингов, ilvl и проверок опыта.

Настройки и данные разделены по Discord-серверам. Кнопки сборов и Mythic+ работают после перезапуска. Обычные ответы не пингуют роли и @everyone; приглашения на сбор упоминают конкретных участников.

Запуск через Docker

Нужны Docker с Compose и токен Discord-бота.

1. Настройка Discord

В Discord Developer Portal создайте приложение с ботом и включите Server Members Intent. Message Content Intent не нужен.

Пригласите бота со scopes bot и applications.commands. Выдайте права View Channels, Send Messages, Read Message History, Embed Links, Add Reactions и Manage Roles. Роль бота должна находиться выше выдаваемых ролей. Права Administrator не требуются; дашборд можно закрепить вручную.

2. Конфигурация и запуск

git clone https://github.com/scatari69/TuesdayNight.git
cd TuesdayNight
cp .env.example .env

Заполните .env:

Переменная Назначение
DISCORD_TOKEN Обязательный токен бота
DISCORD_GUILD_ID Необязательно: ID сервера для быстрой регистрации команд; без него команды глобальные
TZ Часовой пояс расписания, по умолчанию Europe/Kyiv
docker compose up -d --build
docker compose logs -f

Состояние хранится в ./data/state.json, подключённом в контейнер как /app/data, и переживает пересоздание контейнера. Сохраняйте резервную копию ./data; запускайте только один экземпляр бота на этот каталог. Не публикуйте .env и пользовательские данные.

Обновление и остановка:

git pull
docker compose up -d --build
# Остановить бота:
docker compose down

3. Первичная настройка

Для сборов участник с правом Manage Server задаёт роль и канал:

/setup role:@deadlock channel:#gatherings
/settings cooldown:60 reset_time:03:00 autotag:20:00

cooldown задаётся в секундах, время — в часовом поясе TZ. autotag:disable отключает автосборы. Пропущенные во время отключения события не воспроизводятся. Игроки используют /tag, /team, /me и /stats; администраторы — /clear для закрытия сбора и /cleanup для удаления сообщений бота за последние сутки в текущем канале. /cleanup удаляет и панели ролей, поэтому размещайте их в отдельном канале.

Для ролей по реакциям участник с правом Manage Roles создаёт панель, затем использует ID сообщения из ответа:

/reactionrole panel channel:#roles text:Нажмите 🎮 для получения роли
/reactionrole add channel:#roles message_id:ID_СООБЩЕНИЯ emoji:🎮 role:@deadlock

Для переноса строки в text укажите \n, например Deadlock\nWoW Retail. Список и удаление привязок — /reactionrole list и /reactionrole remove. Снятие реакции снимает роль, даже если она была выдана вручную. Удаление самой привязки оставляет выданные роли. Реакции, поставленные во время отключения бота, автоматически не обрабатываются.

WoW-дашборд настраивается отдельно и не требует ключей API:

/dashboard setup region:eu realm:tarren-mill guild_name:Название channel:#guild-dashboard

Укажите свои регион, сервер и гильдию. /dashboard refresh запрашивает обновление с учётом кэша, /dashboard status показывает состояние и последнюю ошибку. /dashboard remove (Manage Server) останавливает обновление, отключает дашборд и удаляет его сообщение. Если прав для удаления не хватает, сообщение нужно удалить вручную; бот больше не будет его восстанавливать. Данные Raider.IO могут быть неполными или запаздывать. Активные рейды определяются по региональным датам начала и окончания в Raider.IO; завершённые и будущие рейды исключаются. Сейчас поддерживается дополнение Midnight (ID 11).

4. Сборы Mythic+

Участник с правом Manage Server задаёт канал:

/mplus setup channel:#mythic-plus

Для создания сбора:

/mplus create dungeon:Название level:10 start:2026-10-25T20:00+02:00 mode:push

Укажите своё подземелье, уровень ключа (2–99), будущую дату с часовым смещением в пределах 30 дней и тип push, relaxed или carry. Название подземелья вводится вручную; тип ключа — описание цели группы без ограничений на вступление.

В открывшемся модальном окне выберите одну пару «класс / специализация» в одном из двух списков и отправьте форму. Создатель сразу занимает место в группе. Другие игроки нажимают Join на карточке или используют /mplus join и выбирают свою специализацию в таком же окне. Если место для роли занято, бот отказывает в записи. Для смены специализации сначала выйдите из сбора. Если через /setup настроена роль игроков, она нужна для участия в Mythic+ (кроме участников с Manage Server).

/mplus show показывает группу, /mplus leave выходит из неё. Лидер или участник с Manage Server управляет группой через /mplus kick, /mplus transfer, /mplus start и /mplus cancel; выход лидера отменяет сбор. Старт требует состава 1/1/3 и закрывает запись в Discord. Незапущенный сбор закрывается через час после назначенного времени. Карточки работают после перезапуска и восстанавливаются после удаления.

При первом запуске обновлённой версии старые привязки Steam и Battle.net удаляются из состояния, а сборы M+ прежнего формата закрываются со сбросом состава. Настройки сборов, обычные голоса, статистика и WoW-дашборд сохраняются. Старые переменные STEAM_API_KEY и BNET_* в .env больше не используются.

Архитектура

Python 3.11+, discord.py 2.6+, один асинхронный процесс без внешней базы данных.

Файл Ответственность
bot.py Discord-клиент, регистрация команд, сборы, постоянные кнопки, роли по реакциям и фоновые задачи
state.py JSON-хранилище по ID сервера: чтение через Store.read, изменения через Store.edit, блокировка и атомарная запись с откатом при ошибках
wow.py Общий клиент Raider.IO: таймауты, ограничение частоты, кэш, снимок гильдии и оформление дашборда
mplus.py Команды и карточки Mythic+, модальное окно выбора специализации, места и управление группами
test_*.py Unit-тесты с подменой Discord и HTTP, без рабочего состояния и реальных подключений
Dockerfile, docker-compose.yaml Сборка контейнера, переменные окружения, каталог данных

В JSON сохраняются настройки, голоса, статистика, привязки ролей, последний снимок дашборда и группы Mythic+. Состав Discord-роли читается из Discord, полный состав WoW-гильдии на диск не записывается. HTTP-клиенты используют таймауты и закрываются вместе с ботом.

Запуск тестов из корня проекта с установленными зависимостями:

python -m unittest discover -s . -v

About

Discord-бот для сборов Deadlock и ролей по реакциям

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages