HELPER STATS ЖИВАЯ СТАТИСТИКА /STATS_SETUP / WIDGET SELECT / AUTO UPDATE / WEB SYNC / SAFE DISABLED
Stats — это публичный live-dashboard сервера. Он собирает сеть HELPER, локальную статистику Discord-сервера, тикеты, заявки, сборы, розыгрыши, экономику, репутацию, приватные комнаты и топ кураторов в одну красивую панель. Администратор разворачивает её через /stats_setup, а дальше HELPER сам обновляет сообщение, синхронизирует настройки сайта и не плодит дубли.
Что делает Stats Core
Модуль создаёт один красивый Discord-dashboard и регулярно пересобирает его по живым данным. Владелец выбирает, какие блоки показать: глобальную сеть HELPER, текущий сервер, задачи, экономику или топ кураторов. Панель редактируется, а не создаётся заново, поэтому канал не превращается в мусор.
Развёртывание
Админ вызывает /stats_setup, выбирает канал и опциональный баннер.
Сбор данных
StatsDataCollector читает лицензии, задачи, экономику, карму и активные приватки.
Виджеты
Админ кнопкой выбирает блоки, которые останутся в публичной панели.
Автообновление
Каждые 10 минут панель обновляется, а сайт синхронизируется каждые 10 секунд.
Больше информации картинками
Показываем весь путь: setup-команда, публичная панель, выбор виджетов, ручное обновление, live-блоки, источники данных, Web Sync и disabled-state.
Команды Discord
Команды административные. Обычные игроки просто смотрят публичную панель, а администратор разворачивает или пересобирает её.
/stats_setup channel:#статистика banner_url:https://site/banner.pngВключает module state stats, сохраняет stats_channel_id/STATS_CHANNEL_ID, widgets и custom_banner, затем создаёт или обновляет live-панель.
/stats_deployПринудительно пересобирает текущую панель по stats_message_id и last_stats_channel_id.
StatsControlView → StatsSettingsView → WidgetSelectОткрывает приватный мульти-select виджетов. Доступно только администраторам сервера.
clear_cache(guild_id) → build_stats_embed(force_refresh=True) → message.editРучное обновление панели с cooldown 5 секунд на пользователя.
Путь данных до публичной панели
stats JSON
module active
DB + Discord
filter blocks
cache 30s
message id
Guild-safe
Каждая база читается по guild_id, чтобы данные серверов клиентов не смешивались.
Cache key
Fingerprint учитывает widgets, title, description, footer, color, banner и active-state.
Edit first
Если stats_message_id найден, бот редактирует старую панель, а не отправляет дубль.
Пять главных виджетов
DEFAULT_WIDGETS включает все пять блоков: global, local, tasks, economy и admins. Администратор может оставить только нужные.
🌐 Сеть HELPER
Считает все серверы бота, суммарных участников и активные лицензии из licenses.db.
🏠 Текущий сервер
Участники, каналы, роли и состояние подписки текущего guild_id.
🎯 Оперативная сводка
Активные тикеты, заявки, сборы и розыгрыши из соответствующих баз.
💼 Экономика
Общий банк, аккаунты, средняя репутация и активные приватные комнаты.
🏆 Топ кураторов
Топ-3 staff по обработанным заявкам или событиям admin_stats.
globalМировая сеть Helper.localТекущий сервер.tasksОперативная сводка.economyЭкономика и общество.adminsРейтинг кураторов.Что видят игроки
Что делает администратор
Выбирает канал
Публичный канал статистики, где будет одно live-сообщение.
Выбирает виджеты
Кнопка “Настроить виджеты” открывает private multi-select.
Настраивает сайт
Title, description, footer, color, banner и widgets можно менять через Dashboard.
Пересобирает
/stats_deploy или кнопка refresh пересобирают панель вручную.
Практический совет
Сначала разверни /stats_setup в отдельном канале #статистика, затем в Dashboard убери лишние виджеты. Так панель будет компактнее и полезнее.
Настройка на сайте
Dashboard пишет конфигурацию в data/stats_settings.json. Cog нормализует алиасы, хранит ID канала/сообщения, отслеживает deploy_requested и last_deploy_error.
stats_channel_idосновной канал live-dashboard.STATS_CHANNEL_IDlegacy/uppercase alias канала.stats_message_idID опубликованного сообщения.STATS_MESSAGE_IDlegacy/uppercase alias сообщения.last_stats_channel_idнужен для переноса панели между каналами.custom_title / STATS_TITLEзаголовок embed.custom_description / STATS_DESCRIPTIONтекст над live-блоками.custom_footer / STATS_FOOTERfooter панели.custom_color / STATS_COLORцвет embed-линии.custom_banner / STATS_BANNERбаннер или картинка от BannerManagerCog.statsосновной ключ.statistics / statisticанглийские alias.dashboardalias панели статистики.live_stats / live-statsalias live-dashboard.живая_статистикарусский alias.Откуда берутся данные
StatsDataCollector читает несколько баз и делает fallback-проверки. Если какой-то файл отсутствует или таблица отличается, модуль не падает, а возвращает ноль для конкретного блока.
LicensingCogесли загружен, используется has_active_subscription.licenses.dbfallback: subscriptions tier/expires_at.active licensesглобальный счётчик активных подписок.tickets.dbopen/closed/active_tickets варианты.applications.dbpending/open/is_active заявки.events.dbactive/open сборы.giveaways.dbactive/open/ended=0 розыгрыши.tickets_settings.jsonfallback по категории ticket-каналов.shop.dbusers/shop_users/economy_users/balances: SUM balance.reputation.dbserver_reputation/reputation/user_reputation/users: AVG points.TempRoomsCogactive_rooms из cog, если загружен.temp_rooms.jsonfallback активных приватных комнат.admin_statsapprove/reject по admin_id.admin_statsfallback по moderator_id.applicationsapproved/rejected с admin_id.limitпоказывает топ-3.Web Sync и автообновление
save
true
10 sec
settings
edit/send
success
deploy_attemptsувеличивается при ошибке.last_deploy_errorхранит короткое описание.last_deploy_error_atвремя ошибки.terminal limitпосле 5 попыток deploy_requested выключается.Если статистика выключена
Отключение через module_states.json не удаляет settings, channel_id, message_id или выбранные widgets. Панель остаётся в Discord, но превращается в безопасный красный disabled-state.
stats_settings.jsonканал, сообщение, widgets и оформление остаются.module_states.jsonхранит выключенный state и aliases.StatsDisabledViewпоказывает неактивную красную кнопку.after enableпосле включения панель снова пересобирается.Карта технической логики
Экспортирует StatsCog как публичный cog пакета stats_core.
StatsCog, build_stats_embed, deploy_dashboard, site_sync_loop, update_stats и команды.
StatsDataCollector: лицензии, tasks, economy, admins и fallback-запросы.
normalize_guild_settings, update_stats_settings, module state aliases, deploy success/failure.
StatsControlView, StatsSettingsView, WidgetSelect и StatsDisabledView.
JsonCache, file locks, parse helpers, normalize_widgets, fmt_num и date helpers.
DEFAULT_WIDGETS5 blocksCACHE_TTL30 secSITE_SYNC10 secAUTO_UPDATE10 minDEPLOY5 attemptsDISABLEDred viewlicenses.dbактивные подписки и tier.tickets.dbактивные тикеты.applications.dbзаявки и топ кураторов.events.dbактивные сборы.giveaways.dbактивные розыгрыши.shop.db / reputation.dbэкономика и карма.temp_rooms.jsonактивные приватные комнаты.channel_idканал должен быть выбран.TextChannel / Threadканал должен поддерживать сообщения.bot_memberбот должен быть участником сервера.send_messagesправо отправлять сообщения.embed_linksправо отправлять embed.old_channel cleanupпри переносе удаляется старое сообщение, если найдено.Ошибки и решения
/stats_setup не создаёт панель
Проверьте, что выбран текстовый канал или thread, у бота есть Send Messages и Embed Links, а команда вызвана администратором.
Панель не обновилась после Dashboard
Проверьте deploy_requested, deploy_attempts, last_deploy_error, stats_channel_id и stats_message_id.
Виджеты не сохраняются
Виджеты меняются через WidgetSelect только администратором. После выбора view редактирует сообщение и вызывает deploy_dashboard.
В статистике нули
Если базы отсутствуют или таблицы имеют другой формат, collector безопасно возвращает 0, чтобы панель не падала.
Баннер не появился
Проверьте custom_banner/STATS_BANNER или BannerManagerCog с ключом stats. URL должен быть http/https.
Панель стала красной
Модуль выключен через module_states.json. Данные и настройки сохранены, включите stats на сайте и пересоберите панель.