Бот отправляет в группу кнопку, которая открывает мини-приложение: обратный отсчёт до выхода игры (15.01.2027) на фоне обложки игры, плюс случайная смешная цитата из Yakuza/Like a Dragon и Judgment при каждом открытии. Без базы данных — всё считается на лету в браузере.
src/— сам бот (TypeScript + grammY)docs/— статичные файлы мини-приложения (HTML/CSS/JS), без сборки. Папка называется именноdocs, а неwebapp, потому что GitHub Pages умеет отдавать сайт только из корня репозитория или из папки/docs— никакое другое имя папки в настройках не выбрать.
Положи файл обложки в docs/assets/cover.jpg (именно с таким именем).
Мини-приложению нужен публичный HTTPS-адрес. Репозиторий уже подготовлен для GitHub Pages:
- Запушь репозиторий на GitHub (см. команды ниже).
- В репозитории на GitHub: Settings → Pages.
- В блоке "Build and deployment" → "Source" выбери Deploy from a branch.
- Branch:
main, папка:/docs→ Save. - Через 1–10 минут сайт появится по адресу
https://hainox.github.io/(репозиторий теперь называетсяHainox.github.io— это ровно имя пользователя, поэтому GitHub отдаёт его как корневой сайт, без пути).
Альтернатива без GitHub Pages — Vercel или Netlify: подключить
репозиторий, указать docs как корень проекта, деплой автоматический.
- Напиши @BotFather →
/newapp - Выбери своего бота
- Укажи название, описание, картинку для превью
- В поле "Web App URL" вставь ссылку из шага 2
- BotFather выдаст короткое имя приложения — итоговая ссылка будет вида
https://t.me/ТвойБот/имя_приложения
Именно эту ссылку нужно указать в .env — она открывается как мини-
приложение из любого чата, включая группы (обычная кнопка web_app
в сообщениях в группах Telegram не работает, только в личке с ботом).
npm install
cp .env.example .envЗаполни .env:
BOT_TOKEN— токен от @BotFather (/newbot)MINI_APP_URL— ссылка из шага 3
Запуск для разработки:
npm run devПродакшн-сборка:
npm run build
npm start| Команда | Описание |
|---|---|
/start |
Присылает кнопку «Открыть таймер» |
docs/quotes.js — стартовый список из ~10 фраз. Это черновой набор:
за дословную точность конкретных реплик из субсидов не ручаюсь (перевод
и точные формулировки могут отличаться по регионам/версиям игр). Чтобы
дополнить или поправить список — просто добавь/измени строку в массиве
QUOTES, больше ничего трогать не нужно.
Хранится в docs/config.js как RELEASE_DATE_ISO в формате с явным
часовым поясом (+03:00, МСК). Таймер работает корректно для любого
часового пояса пользователя — конвертировать ничего не нужно, JS сам
считает разницу между абсолютными моментами времени.