WP Manifestindependent plugin directory
manifest / users / kolodaheartstone-auth

VIP Locker Pro (Cache & Nesting Fix)

🃏 VIP-доступ к премиум-контенту kolodahearthstone.ru через Telegram. WordPress-плагин + aiogram-бот с одноразовыми magic-link, проверкой подписки и Premium UI на Bot API 9.4.

by Gemini · github.com/zulut30/kolodaheartstone-auth · website

0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/zulut30/kolodaheartstone-auth/archive/refs/heads/main.zip
Колода Hearthstone — VIP Locker

🃏 Колода Hearthstone — VIP Locker

Платная подписка на премиум-контент через Telegram. Одноразовые magic-link для kolodahearthstone.ru, профиль Boosty и привязка Telegram к arena.hs-manacost.ru.

О проекте · Фичи · Архитектура · Установка · Конфигурация


✨ О проекте

Связка из WordPress-плагина и Telegram-бота для монетизации эксклюзивного контента сайта kolodahearthstone.ru. Подписчик платит через Boosty или Telegram Stars, подписывается на канал — и получает в Telegram-боте одноразовую ссылку, которая разблокирует VIP-статью в браузере на 7 дней. Этот же бот принимает ID-коды из профиля arena.hs-manacost.ru и передаёт их в Arena auth для привязки Telegram.

Зачем не просто PayWall? Потому что 90% оплат в RU-сегменте идут через Telegram-сообщества. Бот живёт в той же среде, что и аудитория, проверяет подписку и стирает все границы между «оплатил» и «получил доступ».

🚀 Возможности

🔐 Безопасные magic-link

  • Одноразовые токены 32 символа (16 байт энтропии)
  • Срок жизни 15 минут (настраивается)
  • Cookie действует 7 дней после первой активации
  • Honeypot, лог попыток, защита от sharing

🤖 Premium Telegram UI

  • Bot API 9.4 — кастомные эмодзи в кнопках и тексте
  • Единый стиль анимированного NewsEmoji пака
  • Premium-эмодзи рендерятся через <tg-emoji> и icon_custom_emoji_id
  • Все 39+ VIP-статей с обложками в каталоге

📦 Контроль подписки

  • Авто-проверка членства в канале и группе
  • Кэш статусов 60с — без спама getChatMember
  • Поддержка Boosty (карты, СБП) и Tribute (Telegram Stars)

🔍 SEO-дружелюбность

  • Контент под замком кодируется (Base64+ROT13) — не индексируется
  • Публичный тизер виден краулерам
  • schema.org/Article помечен isAccessibleForFree: false
  • Совместимость с Yoast SEO, Rank Math

🌍 Geo-таргетинг без хранения IP

  • Cloudflare CF-IPCountry → 0 запросов
  • Fallback ip-api.com с кэшем 24ч
  • Никаких персональных данных в БД

⚡ Производительность

  • Bot подгружает обложки с WP сам — обходит Wordfence хотлинк
  • file_id кэш на диске, прогрев при старте
  • Shared httpx.AsyncClient с keep-alive (TLS handshake один раз)
  • Periodic refresh каталога каждые 30 мин

🏗 Архитектура

flowchart LR
    User([👤 Подписчик])
    TG[💬 Telegram]
    Bot[🤖 aiogram bot<br/>Python 3.12]
    WP[🔌 WordPress<br/>VIP Locker Pro]
    DB[(📊 MySQL<br/>magic tokens<br/>unlock log)]
    Site([🌐 kolodahearthstone.ru])

    User -->|/start| TG
    TG <-->|polling| Bot
    Bot -->|GET /lockers| WP
    Bot -->|POST /issue| WP
    WP <--> DB
    WP -->|magic link| User
    User -->|?vip_token=...| Site
    Site -->|Set-Cookie| User

    style Bot fill:#2CA5E0,stroke:#1a7daa,color:#fff
    style WP fill:#21759B,stroke:#175478,color:#fff
    style DB fill:#4479A1,stroke:#2c5a7d,color:#fff
    style TG fill:#26A5E4,stroke:#1a7daa,color:#fff

Поток разблокировки

  1. Юзер жмёт /start → бот проверяет подписку через getChatMember для канала и группы.
  2. Не подписан → экран с Boosty/Tribute и кнопкой «Я подписался — проверить».
  3. Подписан → каталог VIP-статей с обложками, навигация ◀️ ▶️.
  4. Жмёт «Получить доступ» → бот делает POST /wp-json/vip/v1/issue с bearer-токеном.
  5. WP-плагин генерирует токен на 15 минут, сохраняет в wp_options, возвращает URL.
  6. Юзер открывает ссылку в системном браузере → cookie на 7 дней → токен сжигается.

🚦 Быстрый старт

1. WordPress-плагин

Скопируй файлы simple-vip-locker.php, svl-*.php, svl-*.js в wp-content/plugins/vip-locker/ и активируй в админке.

cd wp-content/plugins
git clone https://github.com/Zulut30/kolodaheartstone-auth.git vip-locker
# Активировать в Plugins → VIP Locker Pro

В админке → VIP Locker → Telegram бот:

  • Сгенерировать Bearer-секрет (он же WP_BEARER для бота)
  • Выставить TTL токенов (по умолчанию 900с)

Использование в редакторе:

[vip_locker code="VIP_GUIDE_2026"]
Премиум-контент здесь...
[/vip_locker]

2. Telegram-бот

git clone https://github.com/Zulut30/kolodaheartstone-auth.git
cd kolodaheartstone-auth
cp bot/.env.example bot/.env
# заполни BOT_TOKEN, CHANNEL_ID, GROUP_ID, WP_BEARER...

docker compose up -d --build bot
docker compose logs -f bot

После старта бот сам публикует команды в Bot API. В @BotFather список должен соответствовать:

  • start — Главное меню
  • catalog — Каталог VIP-статей
  • subscribe — Оформить подписку
  • link — Привязать Telegram к Arena
  • profile — Профиль и почта Boosty
  • help — Помощь

🔧 Конфигурация

Файл bot/.env:

Переменная Тип Описание
BOT_TOKEN str Токен бота от @BotFather
WP_BASE_URL url https://kolodahearthstone.ru
WP_BEARER str Bearer-секрет из настроек плагина
CHANNEL_ID int ID канала (с -100...)
GROUP_ID int ID группы (с -100...)
BOOSTY_URL url Ссылка на Boosty-подписку (опц.)
TRIBUTE_URL url Ссылка на Tribute (опц.)
ARENA_AUTH_WEBHOOK_URL url Endpoint арены для привязки Telegram, по умолчанию https://arena.hs-manacost.ru/api/auth/telegram/bot/webhook
ARENA_AUTH_WEBHOOK_SECRET str Секрет arena webhook; если пусто, бот использует sha256("auth-bot:${BOT_TOKEN}")[:32]
BOOSTY_AUTH_API_URL url Внутренний Boosty Auth API для проверки почты из /profile
SMTP_* str SMTP-настройки для отправки кода подтверждения Boosty-почты
DATA_DIR path Куда писать photo_cache.json
REFRESH_INTERVAL_SEC int Период refresh каталога (дефолт 1800)
HTTP_TIMEOUT float Таймаут запросов к WP (дефолт 10)

📂 Структура

kolodaheartstone-auth/
├── bot/                      🤖 Telegram-бот (Python 3.12 / aiogram 3.13)
│   ├── bot.py                Основной модуль — 900+ строк
│   ├── Dockerfile            python:3.12-slim
│   ├── requirements.txt      aiogram + httpx
│   └── banner.jpg            Бренд-баннер для welcome-экрана
├── simple-vip-locker.php     🔌 Главный файл WP-плагина
├── svl-magic.php             ⚡ Magic-link токены + redeem
├── svl-bot.php               🌉 REST API мост к боту
├── svl-pro.php               💎 Pro: темы, honeypot, sitemap
├── svl-seo.php               🔍 SEO: encrypted content + schema.org
├── svl-geo.php               🌍 Cloudflare CF-IPCountry
├── svl-block.php             🧩 Gutenberg-блок
├── svl-tinymce.js            ✏️  Classic Editor кнопка
├── docker-compose.yml        🐳 Развёртывание
├── banner.jpg                🎨 Hero-изображение
└── README.md                 📖 Этот файл

🧰 Tech Stack

Слой Технологии
Bot Python 3.12 · aiogram 3.13 · httpx · Docker
WP PHP 7.4+ · WordPress 6.x · MySQL · REST API
API Telegram Bot API 9.4 · REST + Bearer · JSON
Frontend Vanilla JS · Gutenberg блоки · TinyMCE
Infra Docker Compose · Cloudflare · Wordfence

🎨 Premium Telegram UI

Бот использует Bot API 9.4 (Feb 2026) для рендера кастомных эмодзи прямо в инлайн-кнопках:

InlineKeyboardButton(
    text="Каталог статей",
    callback_data="catalog:0",
    icon_custom_emoji_id="5222444124698853913",  # animated bookmark
)

В тексте сообщений — через HTML-тег:

<tg-emoji emoji-id="5424972470023104089">🔥</tg-emoji> Последняя статья

Все ID из публичного каталога Zulut30/premium-telegram-emoji — единый анимированный NewsEmoji пак для визуальной согласованности.

Требование: владелец бота должен иметь активную подписку Telegram Premium, иначе кастомные эмодзи не отображаются у получателей.

📜 Лицензия

Внутренний проект kolodahearthstone.ru. Все права защищены.


Made with ❤️ for the Russian Hearthstone community

kolodahearthstone.ru · @kolodahearthstoneauthbot · Boosty