HELPER Discord Bot
К списку Wiki
STATS CORE // LIVE DASHBOARD // MULTI-WIDGET ANALYTICS

HELPER STATS ЖИВАЯ СТАТИСТИКА /STATS_SETUP / WIDGET SELECT / AUTO UPDATE / WEB SYNC / SAFE DISABLED

Stats — это публичный live-dashboard сервера. Он собирает сеть HELPER, локальную статистику Discord-сервера, тикеты, заявки, сборы, розыгрыши, экономику, репутацию, приватные комнаты и топ кураторов в одну красивую панель. Администратор разворачивает её через /stats_setup, а дальше HELPER сам обновляет сообщение, синхронизирует настройки сайта и не плодит дубли.

5dashboard widgets
10mauto update
10ssite sync loop
30sembed cache
Deploy/stats_setup создаёт live-панель
Widgetsglobal / local / tasks / economy / admins
SyncWeb → Discord каждые 10 секунд
Updateавтообновление каждые 10 минут
Safeкрасный disabled-state

Что делает Stats Core

Модуль создаёт один красивый Discord-dashboard и регулярно пересобирает его по живым данным. Владелец выбирает, какие блоки показать: глобальную сеть HELPER, текущий сервер, задачи, экономику или топ кураторов. Панель редактируется, а не создаётся заново, поэтому канал не превращается в мусор.

01

Развёртывание

Админ вызывает /stats_setup, выбирает канал и опциональный баннер.

02

Сбор данных

StatsDataCollector читает лицензии, задачи, экономику, карму и активные приватки.

03

Виджеты

Админ кнопкой выбирает блоки, которые останутся в публичной панели.

04

Автообновление

Каждые 10 минут панель обновляется, а сайт синхронизируется каждые 10 секунд.

Больше информации картинками

Показываем весь путь: setup-команда, публичная панель, выбор виджетов, ручное обновление, live-блоки, источники данных, Web Sync и disabled-state.

01 / setupАдмин вводит /stats_setup
💬
slash command/stats_setup

Развернуть живую статистику сервера

Команда доступна только администраторам. Нужно выбрать канал панели и, при желании, URL баннера.

/stats_setup channel:#статистика banner_url:https://...
update_module_state(stats=true) → deploy_dashboard
02 / public panelПубличный dashboard
📊
#статистикаHELPER STATS

📊 ЦЕНТР СТАТИСТИКИ

Сервер, обновлено, глобальная сеть, локальная активность, задачи, экономика и кураторы.

🌐 СЕТЬ HELPERСерверов / Участников / Лицензий.
🏠 СЕРВЕРУчастников / Каналов / Ролей / Подписка.
🎯 СВОДКАТикеты / Заявки / Сборы / Розыгрыши.
⚙️ Настроить виджеты
🔄 Обновить
03 / widget selectВыбор блоков
StatsSettingsViewephemeraladmin only
🌐 Мировая сеть HelperСервера, участники и активные лицензии
global
🏠 Текущий серверНаселение, лицензия и статус сервера
local
🎯 Оперативная сводкаТикеты, заявки, сборы и розыгрыши
tasks
🏆 Рейтинг кураторовТоп администрации по обработкам
admins
04 / manual refreshРучное обновление

🔄 Панель обновлена

Кнопка refresh чистит cache, пересобирает embed force_refresh=True и редактирует текущее сообщение.

build_stats_embed(force_refresh=True)
05 / tasks widgetОперативная сводка

🎯 ОПЕРАТИВНАЯ СВОДКА

Бот считает активные тикеты, заявки, сборы и розыгрыши по базам и fallback-каналам.

Тикеты12 open
Заявки4 pending
Сборы2 active
Розыгрыши3 active
06 / economy widgetЭкономика и общество

💼 ЭКОНОМИКА И ОБЩЕСТВО

Общий банк, число аккаунтов, средняя карма и активные приватные комнаты.

Банк1 240 000
Аккаунты842
Ср. карма37
Приватки8
07 / web syncDashboard сохранил настройки

site_sync_loop

Если сайт поставил deploy_requested или изменился module_states.json, Stats пересобирает панель.

10 sec → normalize → deploy_dashboard
08 / disabledМодуль выключен

🔌 МОДУЛЬ СТАТИСТИКИ ОТКЛЮЧЁН

Плашка сохранена, но обновление и управление временно заблокированы.

🔌 СТАТИСТИКА ОБЕСТОЧЕНА

Команды Discord

Команды административные. Обычные игроки просто смотрят публичную панель, а администратор разворачивает или пересобирает её.

setup/stats_setup
/stats_setup channel:#статистика banner_url:https://site/banner.png

Включает module state stats, сохраняет stats_channel_id/STATS_CHANNEL_ID, widgets и custom_banner, затем создаёт или обновляет live-панель.

redeploy/stats_deploy
/stats_deploy

Принудительно пересобирает текущую панель по stats_message_id и last_stats_channel_id.

button⚙️ Настроить виджеты
StatsControlView → StatsSettingsView → WidgetSelect

Открывает приватный мульти-select виджетов. Доступно только администраторам сервера.

button🔄 Обновить
clear_cache(guild_id) → build_stats_embed(force_refresh=True) → message.edit

Ручное обновление панели с cooldown 5 секунд на пользователя.

Путь данных до публичной панели

1Settings

stats JSON

2State

module active

3Collect

DB + Discord

4Widgets

filter blocks

5Embed

cache 30s

6Edit

message id

A

Guild-safe

Каждая база читается по guild_id, чтобы данные серверов клиентов не смешивались.

B

Cache key

Fingerprint учитывает widgets, title, description, footer, color, banner и active-state.

C

Edit first

Если stats_message_id найден, бот редактирует старую панель, а не отправляет дубль.

Пять главных виджетов

DEFAULT_WIDGETS включает все пять блоков: global, local, tasks, economy и admins. Администратор может оставить только нужные.

GLOBAL

🌐 Сеть HELPER

Считает все серверы бота, суммарных участников и активные лицензии из licenses.db.

LOCAL

🏠 Текущий сервер

Участники, каналы, роли и состояние подписки текущего guild_id.

TASKS

🎯 Оперативная сводка

Активные тикеты, заявки, сборы и розыгрыши из соответствующих баз.

ECON

💼 Экономика

Общий банк, аккаунты, средняя репутация и активные приватные комнаты.

ADMINS

🏆 Топ кураторов

Топ-3 staff по обработанным заявкам или событиям admin_stats.

select optionsWidgetSelect
globalМировая сеть Helper.
localТекущий сервер.
tasksОперативная сводка.
economyЭкономика и общество.
adminsРейтинг кураторов.
dashboard compositionКак лучше использовать

Рекомендация для владельца

Для публичного канала оставляй local + tasks + economy. Global и admins можно включать на продающих серверах или staff-проектах.

local + tasks + economy = чистая панель

Что видят игроки

public valueЖизнь сервера в одном месте

Игрок сразу понимает активность

Сколько людей на сервере, есть ли активные события, сколько розыгрышей, как живёт экономика.

без slash-команд для обычного игрока
clean channelНе засоряет канал

Одно сообщение вместо спама

HELPER редактирует одну панель по stats_message_id. Игроки не видят новые сообщения каждые 10 минут.

message.edit(embed=dashboard)
trustПремиальный вид

Сервер выглядит живым

Сводка помогает новым участникам понять, что проект активный: tickets, events, giveaways и economy обновляются регулярно.

LIVE DASHBOARD • HELPER SYSTEM
disabledЕсли выключено

Понятный safe-state

Игроки видят, что статистика временно обесточена, а не сломана.

🔌 СТАТИСТИКА ОБЕСТОЧЕНА

Что делает администратор

01

Выбирает канал

Публичный канал статистики, где будет одно live-сообщение.

02

Выбирает виджеты

Кнопка “Настроить виджеты” открывает private multi-select.

03

Настраивает сайт

Title, description, footer, color, banner и widgets можно менять через Dashboard.

04

Пересобирает

/stats_deploy или кнопка refresh пересобирают панель вручную.

Практический совет

Сначала разверни /stats_setup в отдельном канале #статистика, затем в Dashboard убери лишние виджеты. Так панель будет компактнее и полезнее.

Настройка на сайте

Dashboard пишет конфигурацию в data/stats_settings.json. Cog нормализует алиасы, хранит ID канала/сообщения, отслеживает deploy_requested и last_deploy_error.

channel/messageКанал и сообщение
stats_channel_idосновной канал live-dashboard.
STATS_CHANNEL_IDlegacy/uppercase alias канала.
stats_message_idID опубликованного сообщения.
STATS_MESSAGE_IDlegacy/uppercase alias сообщения.
last_stats_channel_idнужен для переноса панели между каналами.
visual settingsОформление
custom_title / STATS_TITLEзаголовок embed.
custom_description / STATS_DESCRIPTIONтекст над live-блоками.
custom_footer / STATS_FOOTERfooter панели.
custom_color / STATS_COLORцвет embed-линии.
custom_banner / STATS_BANNERбаннер или картинка от BannerManagerCog.
json previewstats_settings.json
data/stats_settings.json
{ "123456789": { "stats_channel_id": "111", "STATS_CHANNEL_ID": "111", "stats_message_id": "222", "STATS_MESSAGE_ID": "222", "last_stats_channel_id": "111", "widgets": ["local", "tasks", "economy"], "custom_title": "📊 LIVE СТАТИСТИКА СЕРВЕРА", "custom_color": "#00F0FF", "custom_banner": "https://site/banner.png", "deploy_requested": true } }
module statemodule_states.json
statsосновной ключ.
statistics / statisticанглийские alias.
dashboardalias панели статистики.
live_stats / live-statsalias live-dashboard.
живая_статистикарусский alias.

Откуда берутся данные

StatsDataCollector читает несколько баз и делает fallback-проверки. Если какой-то файл отсутствует или таблица отличается, модуль не падает, а возвращает ноль для конкретного блока.

licensesЛицензии
LicensingCogесли загружен, используется has_active_subscription.
licenses.dbfallback: subscriptions tier/expires_at.
active licensesглобальный счётчик активных подписок.
tasksОперативные задачи
tickets.dbopen/closed/active_tickets варианты.
applications.dbpending/open/is_active заявки.
events.dbactive/open сборы.
giveaways.dbactive/open/ended=0 розыгрыши.
tickets_settings.jsonfallback по категории ticket-каналов.
economyЭкономика и карма
shop.dbusers/shop_users/economy_users/balances: SUM balance.
reputation.dbserver_reputation/reputation/user_reputation/users: AVG points.
TempRoomsCogactive_rooms из cog, если загружен.
temp_rooms.jsonfallback активных приватных комнат.
adminsТоп кураторов
admin_statsapprove/reject по admin_id.
admin_statsfallback по moderator_id.
applicationsapproved/rejected с admin_id.
limitпоказывает топ-3.

Web Sync и автообновление

1Dashboard

save

2Deploy flag

true

3Loop

10 sec

4Normalize

settings

5Deploy

edit/send

6Record

success

site sync loopКаждые 10 секунд

site_sync_loop

Нормализует stats_settings.json, проверяет deploy_requested, module_states_changed и лимит deploy_attempts.

MAX_DEPLOY_ATTEMPTS = 5
auto updateКаждые 10 минут

update_stats

Проходит по всем guild settings, где есть channel_id и message_id, и вызывает deploy_dashboard.

AUTO_UPDATE_MINUTES = 10
banner eventon_banner_updated

Баннер статистики обновился

Если BannerManagerCog отдаёт key stats, модуль сразу пересобирает dashboard для guild_id.

key.replace("-", "_") == "stats"
error handlingDeploy failure
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.

disabled panelЧто видят пользователи
🔌
safe stateStats disabled

🔌 МОДУЛЬ СТАТИСТИКИ ОТКЛЮЧЁН

Администратор отключил Живую Статистику в панели управления. Плашка сохранена, но обновление и управление временно заблокированы.

🔌 СТАТИСТИКА ОБЕСТОЧЕНА
safe dataЧто сохраняется
stats_settings.jsonканал, сообщение, widgets и оформление остаются.
module_states.jsonхранит выключенный state и aliases.
StatsDisabledViewпоказывает неактивную красную кнопку.
after enableпосле включения панель снова пересобирается.

Карта технической логики

filesФайлы модуля
__init__.py

Экспортирует StatsCog как публичный cog пакета stats_core.

cog.py

StatsCog, build_stats_embed, deploy_dashboard, site_sync_loop, update_stats и команды.

collectors.py

StatsDataCollector: лицензии, tasks, economy, admins и fallback-запросы.

settings.py

normalize_guild_settings, update_stats_settings, module state aliases, deploy success/failure.

views.py

StatsControlView, StatsSettingsView, WidgetSelect и StatsDisabledView.

utils.py

JsonCache, file locks, parse helpers, normalize_widgets, fmt_num и date helpers.

constantsГлавные константы
📊
DEFAULT_WIDGETS5 blocks
🧊
CACHE_TTL30 sec
🔁
SITE_SYNC10 sec
⏱️
AUTO_UPDATE10 min
⚠️
DEPLOY5 attempts
🔌
DISABLEDred view
databasesЧто читает Stats
licenses.dbактивные подписки и tier.
tickets.dbактивные тикеты.
applications.dbзаявки и топ кураторов.
events.dbактивные сборы.
giveaways.dbактивные розыгрыши.
shop.db / reputation.dbэкономика и карма.
temp_rooms.jsonактивные приватные комнаты.
deploy checksПроверки перед публикацией
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 на сайте и пересоберите панель.

// WIKI_NAVIGATION

Вернуться к списку Wiki

Ты дошёл до конца страницы Stats. Можно вернуться в общий центр документации, открыть Dashboard или подняться наверх к началу этой страницы.