CoOp:Anything
Search any game and see how much of it you can play with friends: every co-op mod, its stage, quality and community rating.
KAZ — казино в ShuzaGram. Слоты, блэкджек, рулетка, мины, краш и апгрейд.
Translation pending
GamesGitHub @NichkolaiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Мобильное веб-приложение с шестью играми и внутренней валютой ★. Баланс пополняется только через администратора @silent; вывод звёзд оформляется заявкой, которая уходит администратору в Telegram.
Стартовый баланс — 50 ★, ежедневный бонус — 10 ★ (сброс в полночь по Москве). Пополнение — от 1 ★, только через администратора @silent.
Баланс, история и все игры работают на сервере. Состояние каждого игрока
хранится в приватном Vercel Blob (kaz/players/<id>/rNNNNNNNNNN.json):
каждое изменение — это новая ревизия, которая создаётся с
allow_overwrite=False. Благодаря этому два одновременных запроса не могут
оба записать одну ревизию (нет двойной траты), а CDN-кэш не отдаёт устаревший
баланс. Приложение только отправляет выбор игрока (ставка, клетка, «ещё»,
«хватит») на /api/game и рисует ответ сервера; незавершённые раунды
(блэкджек, мины, краш) восстанавливаются после перезагрузки. В браузере
остаются только настройка звука и последний известный баланс для показа.
Все игры честные: шансы, которые видит игрок, совпадают с реальными, а в ходе
игры ничего не подкручивается. Случайность — secrets на сервере. Итоговый
возврат игрокам (RTP) показан в приложении («Честная игра») и проверяется
тестами (tests/test_server.py):
| Игра | RTP | Как считается |
|---|---|---|
| Слоты | ≈ 86% | веса символов 30/23/19/13/9/6, пять линий |
| Блэкджек | зависит от стратегии | новая колода на раздачу, блэкджек 6:5, дилер берёт на мягких 17 |
| Рулетка | ≈ 94,7% | 38 равновероятных лунок |
| Мины | 92% | множитель = честный множитель × 0,92 |
| Краш | 84% | шанс дойти до ×X равен 0,84 ÷ X, максимум ×50 |
| Апгрейд | 93% | шанс = 0,93 ÷ множитель |
Звёзды — внутренняя игровая валюта. Пополнение теперь только ручное: игрок отправляет заявку администратору @silent, и тот зачисляет звёзды. Азартные игры на реальные деньги во многих странах требуют лицензии: убедитесь, что вы вправе запускать такой сервис.
В приложении: «Пополнить» → ввести сумму → «Отправить заявку @silent».
Минимум 1 ★, максимум 1 000 000 ★, значение по умолчанию — 500 ★.
Также работает команда /buy 500 в чате с ботом.
Сценарий:
https://sgq.me/silent с уже готовым
текстом заявки (сумма и ID игрока). Игроку остаётся отправить сообщение./give).ADMIN_IDS не настроен, игрок всё равно может написать
администратору @silent напрямую.Самостоятельная оплата звёздами отключена: /api/topup больше не создаёт
счёт и отвечает 410 topup_via_admin. Старые оплаченные счета по-прежнему
зачисляются через webhook, чтобы не потерять уже проведённые платежи.
Ссылки на бота в ShuzaGram имеют вид https://sgq.me/kazbot; ссылки t.me
ведут в другой клиент и в проекте не используются.
В приложении: баланс → «Вывод звёзд». Игрок указывает сумму (минимум
500 ★). Контакт для связи берётся из профиля ShuzaGram: имя, @username
и ID попадают в заявку администратору. Ручной ввод контакта не используется.
Сумма сразу списывается с серверного баланса и резервируется, а бот присылает
заявку администратору с кнопками «Выплачено» / «Отклонить». При отклонении
звёзды автоматически возвращаются игроку.
/id у бота.ADMIN_IDS (несколько — через запятую).
В Vercel: Project → Settings → Environment Variables → Production.
Локально — в .env.ADMIN_IDS=111111111,222222222
В карточке заявки администратор видит кнопки «✅ Выплачено» и
«❌ Отклонить», а рядом с ShuzaGram ID — ссылку «открыть профиль»
(sg://user?id=...). После нажатия карточка обновляется, а игрок получает
уведомление о решении.
Найти игрока по юзернейму: /id @username — бот покажет ID и баланс.
Команды /give @username 500 и /balance @username тоже работают.
Юзернейм сохраняется в профиле, когда игрок открывает приложение; если игрок
ещё не открывал KAZ, попросите его сделать это и повторите поиск.
Можно использовать и старый вариант ADMIN_ID=111111111 для одного админа.
Если ADMIN_ID/ADMIN_IDS не задан, бот сообщит игроку, что администраторы
не подключены. Пополнение при этом всё равно оформляется через чат с
администратором @silent.
Nichkolai/site, ветка main.team-6d62/site.api/telegram.py на том же домене. Постоянный ПК
или VPS для приёма заявок не нужен.В репозитории лежат:
index.html
styles.css
games.css
js/
.nojekyll
.python-version
api/telegram.py
api/topup.py
bot.py
vercel.json
bot.py содержит общую логику бота и не запускает сервер при импорте.
api/telegram.py проверяет секрет webhook и передаёт update в bot.handle_update.
Добавьте в Production:
| Переменная | Тип | Значение |
|---|---|---|
BOT_TOKEN | Secret | токен бота |
ADMIN_IDS | Config | ID администраторов через запятую (сюда входит @silent) |
TOPUP_ADMIN | Config | имя администратора для пополнений, по умолчанию silent |
WEBAPP_URL | Config | https://site-ten-sepia-56.vercel.app |
SHUZA_API_BASE | Config | https://api.shuzagram.com |
WEBHOOK_SECRET | Secret | случайная строка, обязательна: проверяется в X-Telegram-Bot-Api-Secret-Token, без неё webhook отвечает 503 |
SESSION_SECRET | Secret | отдельный ключ подписи сессионных токенов (случайная строка). Без него используются WEBHOOK_SECRET/BOT_TOKEN. Старые токены остаются валидными; SESSION_REJECT_LEGACY=1 отключает их через 30 дней после задания ключа |
BLOB_STORE_ID | Config | ID Blob-хранилища kaz-payments в team-6d62 |
BLOB_READ_WRITE_TOKEN | Secret | добавляется автоматически при подключении Blob-хранилища; хранится только в Vercel |
VERCEL_OIDC_TOKEN | Runtime | выдаётся Vercel автоматически; используется Python SDK vercel-blob |
Хранилище kaz-payments создано в новом team team-6d62 (private, регион
iad1) и подключено к Production/Preview проекта site. Vercel добавил
BLOB_STORE_ID и BLOB_READ_WRITE_TOKEN; дублировать их в репозитории не нужно.
Старое хранилище из team-6309 не используется. Не добавляйте .env в Git и не
коммитьте значения секретов. Локальный .env остаётся только на машине
разработчика.
Автоматические Git-деплои для этого проекта отключены. Кроме того, на Hobby
Vercel разрешает деплой только если автор коммита совпадает с владельцем team.
Коммиты репозитория сделаны от Nichkolai, а новый team принадлежит
[email protected], поэтому деплой прямо из репозитория блокируется
(commit author doesn't have permission). Рабочий способ — деплой из копии
без .git и .env:
$src = "C:\Users\Admin\Documents\KAZ"
$dst = Join-Path $env:TEMP "kaz-deploy"
Remove-Item -Recurse -Force $dst -ErrorAction SilentlyContinue
New-Item -ItemType Directory -Force $dst | Out-Null
Get-ChildItem $src -File -Force | Where-Object { $_.Name -ne '.env' } | Copy-Item -Destination $dst
Get-ChildItem $src -Directory -Force | Where-Object { $_.Name -notin @('.git','.vercel','.pytest_cache','__pycache__','tests','.github') } | Copy-Item -Destination $dst -Recurse
$env:VERCEL_ORG_ID = "team_1XG2QveDl9UAd4BMV9IxJBt7"
$env:VERCEL_PROJECT_ID = "prj_I4cH6nkY7iRWWRZXw1FwChbrD7VH"
Set-Location $dst
vercel deploy --prod
Либо создайте новый коммит от имени владельца team ([email protected]) и
деплойте из репозитория обычным vercel deploy --prod.
Проверка функции:
GET https://site-ten-sepia-56.vercel.app/api/telegram
→ {"ok": true, "service": "kaz-telegram"}
GET https://site-ten-sepia-56.vercel.app/api/purchases
→ {"ok": true, "service": "kaz-purchases"}
GET https://site-ten-sepia-56.vercel.app/api/topup
→ {"ok": true, "service": "kaz-topup", "mode": "admin", "admin": "silent"}
Webhook уже включён. Если нужно включить его заново после смены домена:
import bot
bot.api("setWebhook", {
"url": "https://site-ten-sepia-56.vercel.app/api/telegram",
"secret_token": "значение_WEBHOOK_SECRET",
"allowed_updates": ["message", "callback_query", "pre_checkout_query"],
})
getWebhookInfo должен показывать этот URL и отсутствие ошибок. Не запускайте
одновременно локальный long polling и webhook: Telegram доставляет update только
одним способом.
Нужен Python 3.10+. Для локального запуска бота достаточно стандартной
библиотеки; для проверки пополнений установите vercel-blob из
requirements.txt.
cd "C:\Users\Admin\Documents\Default Project"
python bot.py
bot.py сам удаляет webhook и переключается на long polling. Поэтому после
локального запуска не забудьте снова включить webhook, если возвращаетесь на
Vercel. Без BOT_TOKEN запустится только локальный веб-сервер:
http://127.0.0.1:8080/
Для Telegram нужен публичный HTTPS-адрес.
index.html разметка, SVG-спрайт, экраны и модалки
styles.css мобильная оболочка, лобби, история, модалки
games.css стили игр
theme.css зелёная тема и оформление апгрейда
js/core.js состояние, навигация, история, Telegram, звук
js/slots.js слоты
js/blackjack.js блэкджек
js/roulette.js рулетка
js/mines.js мины
js/crash.js краш
js/upgrader.js апгрейд
bot.py логика ShuzaGram-бота + локальный статический сервер
payments.py проверка initData, Telegram Stars и Vercel Blob
api/telegram.py Vercel webhook entrypoint
api/purchases.py синхронизация подтверждённых пополнений
api/topup.py отключение самостоятельных счетов, пополнение через @silent
requirements.txt Python-зависимость Vercel Blob
vercel.json настройки функций
telegram-web-app.js не хранится в проекте: он подгружается с telegram.org
только при запуске внутри Telegram. Без него интерфейс и игры работают, но
нативные BackButton и вибро-отклик недоступны.
localhost — только для
локальной проверки..env исключён в .gitignore.