HELPER GIVEAWAYS РОЗЫГРЫШИ DISCORD PANEL / WEB PENDING / RESULT CHANNEL / WINNER REROLL
Giveaways делает из обычной кнопки “участвовать” полноценный prize-flow: администратор разворачивает панель, запускает приз через Discord Modal или Dashboard, участники записываются одной кнопкой, а HELPER сам выбирает победителей, публикует итог, хранит историю и даёт администрации короткое окно для перевыбора.
Что делает Giveaways
Модуль розыгрышей создаёт готовую активность для Discord-сервера: панель запуска призов, живые сообщения розыгрышей, запись участников, автоматическое завершение, случайный выбор победителей, канал итогов и перевыбор.
Развернуть панель
Админ задаёт канал розыгрышей, канал итогов и staff-роль.
Создать приз
Через Modal указываются приз, длительность, число победителей, роль и баннер.
Собрать участников
Игроки нажимают “Участвовать”; повторная запись блокируется базой.
Выдать итог
Бот выбирает победителей, публикует результат и открывает короткий reroll.
Больше информации картинками
Ниже показан весь путь глазами владельца и игрока: панель, modal, live giveaway, успешное участие, завершение, результат, reroll и сайт.
Команды Discord
Команды закрыты правами администратора или staff-ролями управления. Обычный игрок взаимодействует только с кнопкой “Участвовать”.
/giveaway_setup giveaway_channel:#giveaways results_channel:#winners staff_role:@Event ManagerРазворачивает панель розыгрышей, задаёт канал активных призов, канал итогов и staff-роль.
/giveaway_deployОбновляет панель после правок на сайте или ручного изменения настроек.
/giveaway_end message_id:123456789012345678Досрочно завершает активный розыгрыш по ID сообщения и публикует результат.
/giveaway_migrate_dbOwner-команда для переноса старого data/giveaways.json в новую SQLite-структуру.
Путь розыгрыша от панели до итога
центр призов
приз/время
участники
check loop
победители
60 секунд
Atomic join
Участие сохраняется через транзакцию, а дубль получает статус already.
Dirty queue
Плашки обновляются пачками, чтобы не бить Discord rate-limit при массовых кликах.
Ending lock
Завершение защищено от дублей через статус ending и lock по message_id.
Что видит игрок
Что делает админ
Настраивает панель
Выбирает канал розыгрышей, канал итогов и staff-роль.
Запускает приз
Вводит prize, duration, winners_count, role_ping и banner_url.
Завершает досрочно
Через /giveaway_end или manage select на панели.
Делает reroll
В течение 60 секунд может перевыбрать победителя.
Победители и перевыбор
После завершения HELPER выбирает случайных победителей, сохраняет result record, публикует итог и запускает таймер закрытия reroll-кнопки.
Настройка на сайте
Dashboard работает через data/giveaways_settings.json. Он может развернуть панель, обновить визуал, создать pending_giveaways и отправить их в Discord через site_sync_loop.
panel_channel_idканал, где стоит панель розыгрышей.giveaway_channel_idlegacy alias канала активных розыгрышей.results_channel_idканал итогов и победителей.staff_role_idsроли, которые могут создавать и завершать розыгрыши.custom_title/custom_descтекст панели запуска.custom_bannerfallback-баннер, если общий центр баннеров не задан.banners_settings.jsonобщий центр баннеров имеет приоритет для ключа giveaways.custom_bannerиспользуется как fallback старой настройки.DEFAULT_BANNERпоследний fallback, если пользователь ничего не настроил.Примеры розыгрышей
Discord Nitro
Классический публичный розыгрыш для активности community.
VIP / Premium
Победитель получает роль или подписку на сервере.
Экономика
Coins, предметы магазина, внутриигровая валюта или сезонные бонусы.
Сезонный подарок
Новый год, турнир, летний сезон, RP-ивент или anniversary.
Доступ к роли
Победители получают временную или постоянную роль.
Промокод
Розыгрыш скидки, купона, личной комнаты или услуги.
Если модуль выключен
Отключение закрывает создание, участие и reroll, но не удаляет активные и завершённые данные.
module_states.jsonхранит состояние giveaways / giveaway / giveaways_module / розыгрыши.ProtectedViewпроверяет статус перед кнопками участия и reroll.build_panel_payloadстроит disabled-панель вместо рабочей кнопки.databaseданные не удаляются при выключении.Карта технической логики
data/giveaways_settings.json — настройки панели, каналов, ролей, pending_giveaways и deploy.
data/giveaways.db — активные розыгрыши, участники и результаты.
каждые 10 секунд читает pending_giveaways и deploy_requested.
каждые 15 секунд проверяет активные розыгрыши и завершает истёкшие.
каждые 8 секунд обновляет плашки, где изменился счётчик участников.
giveawaysпризы и статусыgiveaway_participantsучастникиgiveaway_resultsитоги и rerollBEGIN IMMEDIATEatomic actionsmessage_idID Discord-сообщения розыгрыша.guild_id/channel_idсервер и канал активного приза.prize/end_timeприз и время завершения.winners/participantsколичество победителей и JSON-список участников.statusactive / ending / ended.result_message_idID сообщения итогов.original_message_idисходный розыгрыш.winners/historyпобедители и история перевыборов.endedзакрыто ли окно reroll.Ошибки и решения
Панель не появилась после /giveaway_setup
Проверьте права бота в канале: Send Messages и Embed Links. Для баннера также нужен доступ к изображению.
Игрок пишет, что уже участвует
Это нормально: один user_id может быть записан в один message_id только один раз.
Розыгрыш не завершается
Проверьте check_giveaways loop, статус active/ending и корректный ISO end_time в базе.
Почему reroll пропал?
Кнопка перевыбора доступна короткое окно после публикации результата, затем автоматически закрывается.
Сайт не создал розыгрыш
Проверьте pending_giveaways, panel_channel_id, права бота, duration и last_pending_error в settings JSON.
Баннер не тот
Приоритет такой: общий центр баннеров key giveaways → custom_banner/banner_url → DEFAULT_BANNER.