HELPER SHOP МАГАЗИН И ЭКОНОМИКА /SHOP_SETUP / CATALOG / STAFF REVIEW / AUTO DELIVERY / FORUM ITEMS
Shop превращает активность игроков в полноценную экономику сервера: пользователь копит баллы, открывает витрину, выбирает товар, получает цену с учётом репутации, отправляет заявку, а staff одобряет или отклоняет покупку. После одобрения HELPER списывает баланс, пишет историю, отправляет DM и при необходимости автоматически выдаёт роль или доступ к каналу.
Что делает Shop Core
Магазин — это связка экономики, каталога товаров, проверки покупок, личных дел и автоматической выдачи. Владелец сервера настраивает витрину, категории и товары, игроки покупают за баллы, а staff контролирует каждую заявку. Покупка не списывает баланс сразу: деньги уходят только после решения staff.
Витрина
Публичная плашка с баннером и кнопками: Каталог, Профиль, Репутация, Управление.
Каталог
Категории товаров, страницы по 5 товаров и select-меню до 25 пунктов.
Заявка
Проверка баланса, скидки, склада, лимита и pending-заявок перед отправкой staff.
Выдача
После одобрения: manual note, role delivery или channel access с таймером.
Больше информации картинками
Визуально показываем весь путь магазина: настройка, публичная витрина, каталог, карточка товара, заявка в staff-канале, одобрение/отклонение, выдача роли/доступа, форумный товар и отключённое состояние.
Команды Discord
Главные команды оставлены короткими. Обычные игроки работают через кнопки витрины, а администрация — через slash-команды и приватную ShopAdminView.
/shop_setup shop_channel:#магазин check_channel:#проверка log_channel:#логи moderator_role:@Staff forum_channel:📂・личные-делаПервичная настройка: канал витрины, канал проверки, лог-канал, роли проверяющих и форум личных дел.
/shop_deployПринудительно обновляет витрину по текущим настройкам сайта, panel_hash и SHOP_MESSAGE_ID.
/shop_adminОткрывает приватную панель управления: товары, баланс, статусы и карма/скидки.
/shop_history user:@PlayerПоказывает историю покупок пользователя. Если user не указан — показывает свою историю.
Путь игрока от баланса до покупки
баллы
категории
цена/скидка
staff review
списание
товар
priceцена должна быть больше 0.stockесли склад указан и он 0 — товар распродан.max_per_userлимит одобренных покупок на игрока.pending_countне больше 2 активных заявок одновременно.balanceбаланс должен покрывать итоговую цену.purchase cooldown60 секунд между покупками.Проверка покупки staff-командой
В канал проверки приходит embed с заявкой и persistent view. Staff может одобрить, отклонить или открыть историю покупок игрока. Обработка защищена правами администратора или ролями модераторов магазина.
Одобрить
Атомарно проверяет заявку, списывает баланс, фиксирует транзакцию и запускает выдачу товара.
Отклонить
Открывает RejectPurchaseModal с причиной отказа, не списывает баланс и отправляет DM.
История
Показывает последние 8 покупок пользователя для контекста решения.
Cooldown
Кнопки проверки защищены от быстрых повторных нажатий.
buyerпокупатель и его ID.category / itemкатегория и название товара.original_price / priceисходная цена и итоговая цена со скидкой.discount_percentскидка или наценка от репутации.item_snapshotкопия товара на момент покупки.message_idID staff-сообщения как ключ заявки.Выдача товара после одобрения
После approval магазин пытается выдать товар автоматически. Если тип ручной или что-то не найдено, заявка всё равно фиксируется, а staff получает понятное предупреждение.
Админ-панель экономики
ShopAdminView открывается приватно и доступна только администраторам сервера. Через неё можно управлять товарами, балансом, статусами магазина и интеграцией репутации.
stockограниченный остаток товара.max_per_userлимит одобренных покупок на игрока.duration_daysсрок роли или доступа.forum_thread_idсвязь товара с форумной темой.Настройка на сайте
Dashboard хранит конфигурацию в data/shop_settings.json. При сохранении меняется panel_hash или ставится deploy_requested, а site_sync_loop каждые 10 секунд обновляет витрину без дублей.
SHOP_CHANNEL_IDканал публичной витрины.CHECK_CHANNEL_IDзакрытый канал проверки покупок.LOG_CHANNEL_IDканал логов экономики.FORUM_CHANNEL_IDфорум личных дел игроков.FOR_MODER_ROLE_IDSроли staff, которым можно обрабатывать покупки.SHOP_FORUM_CHANNEL_IDфорум-каталог товаров.SHOP_TITLEзаголовок embed.SHOP_DESCRIPTIONописание витрины.SHOP_COLORцвет embed-линии.SHOP_BANNERбаннер витрины.SHOP_FOOTERнижняя подпись.button_textтексты кнопок Каталог / Профиль / Репутация / Управление.Типы товаров
Товар может быть просто ручной наградой, Discord-ролью или доступом к каналу. Все типы хранятся в SHOP_ITEMS и попадают в item_snapshot при покупке.
manual
Ручная выдача staff. Подходит для премий, нестандартных услуг и игровых наград.
role
Бот выдаёт Discord-роль по role_id. При duration_days записывает снятие в item_deliveries.
channel_access
Бот выдаёт доступ к каналу, сохраняет старые overwrites и восстанавливает их после срока.
priceцена не может быть отрицательной.descописание ограничено 1000 символами.image_urlтолько http/https.typemanual / role / channel_access.target idrole_id или channel_id в зависимости от типа.stock / max_per_userчисловые лимиты.manual_requiredstaff выдаёт товар вручную.deliveredроль или доступ выданы успешно.delivery_failedроль/канал/пользователь не найден или нет прав.had_beforeесли роль уже была, при истечении бот не снимет её.Форумный каталог товаров
Shop умеет публиковать товары отдельными темами в ForumChannel. Это удобно для серверов, где каждый товар должен иметь картинку, описание, цену и отдельную кнопку покупки.
SHOP_FORUM_CHANNEL_IDфорум-каталог товаров.forum_thread_idсвязь товара с темой.forum_message_idсообщение с embed и кнопкой.build_shop_forum_item_embedготовит карточку товара.ShopForumItemViewpersistent-кнопка покупки.Форум нужно выбрать отдельно
Если ForumChannel для магазина не выбран, основная витрина всё равно работает. Форумный каталог — дополнительный режим, который удобно включать после базовой установки.
Личные дела и история покупок
Shop хранит balance, total_earned и thread_id игрока. При логировании покупки бот пытается найти или создать личное дело в ForumChannel, затем пишет туда операцию и добавляет кнопку перехода в общий лог.
Репутация и цены
Магазин может брать скидку из ReputationCog. Положительная репутация уменьшает цену, отрицательная может давать наценку. Результат кэшируется на 15 секунд, чтобы не дёргать расчёты слишком часто.
discount_pctберётся из rep_cog.get_discount(user_id, guild_id).final_pricebase_price × (1 - discount_pct).limitскидка ограничена до 90%, наценка до 100%.cachePRICE_CACHE_TTL_SECONDS = 15.Что хранится в базе
Основная база экономики — data/shop.db. Таблицы привязаны к guild_id и user_id, поэтому несколько серверов не смешивают балансы, покупки и личные дела.
usersbalance, total_earned, thread_idpurchase_requestsзаявки, status, price, DM flagstransactionsистория начислений и списанийitem_deliveriesвременные роли/доступыindexespending, history, tx, deliveriesWALSQLite journalmessage_idключ заявки и staff-сообщения.item_snapshotкопия товара на момент покупки.statuspending / approved / rejected и другие состояния.processed_byкто принял решение.delivery_statusитог выдачи товара.dm_* flagsстатусы отправки DM игроку.Если магазин выключен
Отключение через module_states.json не удаляет товары, балансы, покупки и историю. Новые покупки блокируются, публичная витрина становится красной, а форумные кнопки покупки отключаются.
shopосновной ключ.economyalias экономики.store / marketанглийские alias.магазин / экономикарусские alias.after enableвитрина и кнопки снова активны.Карта технической логики
Экспортирует ShopCog как публичный cog модуля.
ShopCog: команды, deploy, delivery, cleanup loops, интеграция репутации и логирование.
SQLite users, purchase_requests, transactions, item_deliveries и атомарные операции.
ShopMainView, CategoryPaginationView, PurchaseApprovalView, ShopAdminView, ShopForumItemView.
normalize_shop_config, panel_hash, module_states, SHOP_ITEMS и deploy-флаги.
Витрина, purchase embeds, история, forum item и RejectPurchaseModal.
site_sync_loop10 секундcache_cleanup30 секундpurchase_cleanup6 часовdelivery_cleanup1 часprice cache15 секундstatus cache15 секундcreate_purchase_requestсоздаёт pending-заявку после выбора товара.approve_purchase_atomicатомарно списывает баланс и меняет статус.process_purchase_approvalзапускает delivery и отправляет DM/логи.process_purchase_rejectionсохраняет reject_reason и пишет игроку.delete_purchase_review_messageудаляет карточку проверки после обработки.panel_hashсравнение ключевых полей витрины.SHOP_MESSAGE_IDID опубликованной витрины.last_shop_channel_idканал последнего deploy.deploy_attemptsзащита от бесконечных попыток.MAX_DEPLOY_ATTEMPTS5 попыток перед last_deploy_error.Ошибки и решения
Игрок нажал товар, но заявка не создаётся
Проверьте CHECK_CHANNEL_ID, права бота писать embed и то, что товар имеет price больше 0.
Пишет “недостаточно средств”
Баланс берётся из users.balance в shop.db. Проверьте начисления через админ-панель или transactions.
Товар распродан
Если stock задан и равен 0, покупка блокируется. Увеличьте stock на сайте или через админку.
Staff не может одобрить
Проверку проходят администраторы или роли из FOR_MODER_ROLE_IDS / FOR_MODER_ROLE_ID.
Роль не выдалась после одобрения
Проверьте role_id, Manage Roles и позицию роли бота. Если роль выше бота, delivery_failed будет записан.
Форумный товар не покупается
Проверьте SHOP_FORUM_CHANNEL_ID, forum_thread_id/forum_message_id и активность модуля shop.
Витрина не обновилась после сайта
Проверьте deploy_requested, deploy_attempts, last_deploy_error, SHOP_CHANNEL_ID и SHOP_MESSAGE_ID.
История не появилась в личном деле
Нужен FORUM_CHANNEL_ID с типом ForumChannel и права бота создавать публикации.