HELPER EVENTS СБОРЫ И МЕРОПРИЯТИЯ DISCORD STATION / ROLE SELECT / MANAGE MENU / 1200×950 POSTER
Events превращает хаотичное “кто идёт?” в понятную систему мероприятий. Администратор ставит станцию сборов, организатор создаёт афишу через Discord Modal, игроки видят только чистую линию кнопок ✅ Иду / ❌ Не иду / ⚙️ Управление, а HELPER перерисовывает luxury PNG-постер, считает места, делит участников по ролям и сохраняет итог в архив.
Что такое Events
Events — это система записи на мероприятия внутри Discord. Она подходит для рейдов, каптов, тренировок, собраний, турниров, RP-сцен, сезонных активностей и любых событий, где нужно собрать людей, роли и лимит мест.
Станция
Постоянная панель с кнопкой создания мероприятия.
Форма
Название, время, лимит мест и роли вводятся через Discord Modal.
Запись
Игроки нажимают “Иду”, выбирают роль или отказываются кнопкой “Не иду”.
Управление
Список и закрытие спрятаны в приватном меню “⚙️ Управление”.
Больше информации картинками
Здесь показан обновлённый путь под новый Cog: station panel, Modal создания, выбор роли для пинга, живая luxury-афиша, чистая линия из трёх кнопок и приватное меню управления для staff.
Команды Discord
/event_setup panel_channel:#events log_channel:#events-archive staff_role:@Event ManagerРазворачивает станцию сборов, задаёт канал панели, канал архива и роль организаторов.
/event_deployОбновляет панель сборов по текущим настройкам сайта или Discord.
/event_close message_id:123456789Закрывает сбор по ID сообщения, переносит итог в архив и меняет view на “СБОР ЗАКРЫТ”.
EventPanelView → EventCreateModal → PingRoleSelectView → create_event_poster() → schedule_event_update()Организатор создаёт событие кнопкой, а публичная афиша получает только 3 кнопки: Иду, Не иду, Управление.
Путь события от станции до архива
панель
данные
роль
PNG
участники
итог
Atomic DB
Запись, отказ и закрытие идут через транзакции BEGIN IMMEDIATE.
View restore
После рестарта бот восстанавливает активные кнопки по message_id.
Debounced update
Клики объединяются через schedule_event_update, чтобы не рендерить PNG после каждого нажатия.
Что видит игрок
Что делает организатор
Создаёт сбор
Нажимает кнопку на станции, вводит название, время, места и роли.
Пингует роль
Выбирает, кого позвать над афишей, или пропускает этот шаг.
Открывает управление
Кнопка “⚙️ Управление” открывает приватное меню только для автора, администратора или staff-роли.
Список / Закрыть
В меню доступны “📄 Список” и “🛑 Закрыть”, поэтому публичная строка кнопок остаётся чистой.
Как работает афиша
Постер рисуется через PIL/Pillow в новом HELPER luxury-стиле: тёмный #020408, cyan/purple glow, glass-карточки, статус мест, колонки ролей и кешированные аватарки участников.
titleобрезается до безопасной длины и очищается от emoji для Pillow.event_timeпоказывается в верхней meta-строке афиши.max_slotsесли 0 — отображается как бесконечный лимит.rolesдо 4 ролей, на каждую показывается до 10 участников.avatarsаватарки участников скачиваются с таймаутом и кешируются по URL, чтобы повторный рендер был быстрее.debounceчастые клики объединяются в один рендер через schedule_event_update.Настройка на сайте
Сайт работает через events_settings.json. Он может запросить deploy панели, создать pending_event/pending_events, показать ошибки синхронизации и закрыть сбор через web-action. В новом Cog pending-событие не удаляется из очереди, если Discord-афиша реально не создалась.
panel_channel_idканал, где стоит станция сборов.log_channel_idканал, куда уходят итоги после закрытия.staff_role_idsроли, которые могут создавать мероприятия, скачивать список и закрывать сбор через меню управления.custom_titleзаголовок панели станции сборов.custom_bannerбаннер панели или fallback из центра баннеров.custom_button_textтекст кнопки создания мероприятия.custom_descописание панели; совместимо с legacy custom_description.last_deploy_errorпоследняя причина, почему Discord deploy не сработал.Примеры мероприятий
Рейды
Собрать роли, лимит мест и состав перед рейдом или боссом.
Капты
Стрелки, водители, медики, координаторы — всё разделено по ролям.
Тренировки
Запись состава на тренировку с контролем посещаемости.
Турниры
Регистрация участников или команд на сезонный ивент.
RP-сцены
Сбор актёров, фракций, водителей, ведущих или staff.
Собрания
Кто будет, кто не сможет, и готовый список для отчёта.
Если модуль выключен
Отключение закрывает создание и участие, но не удаляет сохранённые события и настройки.
module_states.jsonхранит состояние модуля events.ProtectedViewпроверяет статус перед нажатием кнопок.ClosedEventViewзакрытые сборы получают неактивную красную кнопку.restore_viewsпосле включения активные view восстанавливаются по базе.Карта технической логики
data/events_settings.json — настройки панели, каналов, ролей, pending_events и deploy.
data/events.db — SQLite события и участники.
генератор luxury PNG-постера через PIL/Pillow, glow, glass-карточки, колонки ролей и кеш аватарок.
настройки пишутся через lock и временный файл, чтобы сайт и бот не конфликтовали.
eventsафиши и статусыparticipantsучастники по ролямmessage_idключ событияBEGIN IMMEDIATEatomic actionsmessage_idID Discord-сообщения афиши.guild_id/channel_idсервер и канал события.title/event_timeданные для постера.max_slots/rolesлимит мест и роли участников.status/is_activeactive или closed.user_idучастник события.roleвыбранная роль или declined.role_changesсчётчик смен/отказов.joined_at/updated_atистория времени участия.Ошибки и решения
Панель не появилась после /event_setup
Проверьте права бота в panel_channel: Send Messages и Embed Links.
Афиша не рисуется
Проверьте права Attach Files, доступ к аватаркам и логи EventGraphics. Бот сначала отправляет “Рисуем афишу…”, затем обновляет сообщение.
Игрок не может записаться
Возможные причины: сбор закрыт, мест нет, роль больше недоступна, пользователь уже записан или ранее отказался.
Куда пропали кнопки “Скачать список” и “Закрыть”?
Они перенесены в приватное меню “⚙️ Управление”, чтобы публичная афиша выглядела ровно: Иду / Не иду / Управление.
Кто может скачать список?
Организатор события, администратор сервера или staff-роль из настроек Events.
Кто может закрыть сбор?
Организатор, администратор или staff-роль. Slash-команда /event_close по-прежнему доступна администраторам.
Что делает сайт?
Сайт может развернуть панель, создать pending_events, запросить deploy и закрыть сбор по message_id.