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
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
Платная подписка на премиум-контент через 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
|
🤖 Premium Telegram UI
|
📦 Контроль подписки
|
🔍 SEO-дружелюбность
|
🌍 Geo-таргетинг без хранения IP
|
⚡ Производительность
|
🏗 Архитектура
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
Поток разблокировки
- Юзер жмёт
/start→ бот проверяет подписку черезgetChatMemberдля канала и группы. - Не подписан → экран с Boosty/Tribute и кнопкой «Я подписался — проверить».
- Подписан → каталог VIP-статей с обложками, навигация ◀️ ▶️.
- Жмёт «Получить доступ» → бот делает
POST /wp-json/vip/v1/issueс bearer-токеном. - WP-плагин генерирует токен на 15 минут, сохраняет в
wp_options, возвращает URL. - Юзер открывает ссылку в системном браузере → 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 к Arenaprofile— Профиль и почта Boostyhelp— Помощь
🔧 Конфигурация
Файл 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