- Установите зависимости:
pip install -r requirements.txt- Задайте переменные окружения:
BOT_TOKENWEBHOOK_URLWEBHOOK_SECRET(опционально)ADMIN_TG_IDS(например:123456789,987654321)DB_PATH(по умолчаниюdata/bot.db)APP_PREFIX(если проксируете под путём, например/tgunlock_robot)PROXY_DEFAULT_IP(публичный домен/IP; используется как fallback для MTProto host)FREEKASSA_SHOP_ID(если используете FreeKassa API)FREEKASSA_API_KEYFREEKASSA_SECRET_WORD_2(секретное слово №2, для webhook)FREEKASSA_API_BASE(по умолчаниюhttps://api.fk.life/v1)FREEKASSA_IP(IP клиента; можно указать IP сервера)FREEKASSA_RECONCILE_INTERVAL_SEC(фоновая сверка pending-платежей, по умолчанию30)MTPROXY_RESTART_COOLDOWN_SEC(защита от частых рестартов MTProxy, по умолчанию30)RATE_LIMIT_START_PER_MIN(лимит/startна пользователя в минуту, по умолчанию10)RATE_LIMIT_TOPUP_PER_MIN(лимит действий пополнения, по умолчанию20)RATE_LIMIT_SUPPORT_PER_MIN(лимит сообщений в поддержку, по умолчанию8)
- Запустите сервер:
uvicorn app.main:app --host 0.0.0.0 --port 8000Webhook будет установлен автоматически на WEBHOOK_URL.
Если используете FreeKassa API, укажите URL оповещений:
https://<ваш-домен>/<APP_PREFIX>/freekassa (или /freekassa, если APP_PREFIX пустой).
Все значения — в рублях, кроме stars_rate.
Значения по умолчанию:
free_credit = 50— стартовый баланс для бесплатного прокси.max_active_proxies = 10— лимит активных прокси на пользователя (0 = без лимита).proxy_create_price = 100— разовая цена создания прокси.proxy_day_price = 10— цена за 1 день активного прокси.ref_bonus_invited = 10— бонус приглашённому.ref_bonus_inviter = 10— бонус пригласившему.referral_enabled = 1— включение рефералки (0 = выкл).stars_rate = 1— курс Stars к рублю (1 Star = 1 ₽).stars_enabled = 1— включить оплату Stars (0/1).freekassa_enabled = 0— включить оплату FreeKassa (0/1).freekassa_method_44_enabled = 1— включить СБП QR (id 44).freekassa_method_36_enabled = 1— включить карты РФ (id 36).freekassa_method_43_enabled = 1— включить SberPay (id 43).stars_buy_url = ""— ссылка где купить Stars (если нужна подсказка).stars_buy_hint_enabled = 0— показывать подсказку где купить Stars (0/1).mtproto_enabled = 1— показывать MTProto ссылку (0/1).mtproto_host = ""— хост MTProto (если пусто, используетсяPROXY_DEFAULT_IP).mtproto_port = 9443— порт MTProto.bg_enabled = 1— включить фоновую картинку в меню (0/1).offer_enabled = 1— показывать публичную оферту при/start(0/1).policy_enabled = 1— показывать политику при/start(0/1).offer_url = ""— ссылка на оферту.policy_url = ""— ссылка на политику.support_sla_minutes = 30— через сколько минут без ответа тикет считается просроченным.
mtproto_secret больше не настраивается вручную — секрет создаётся автоматически для каждого прокси.
Для контроля доступа у каждого прокси свой secret. Бот хранит их в файле и перезапускает MTProxy,
когда список секретов меняется (создание/удаление/блокировка прокси).
Для этого сервис бота должен иметь права на systemctl restart mtproxy.service.
Если бот запускается от root — дополнительных прав не нужно.
Опциональные переменные окружения:
MTPROXY_SECRETS_FILE— путь к файлу секретов (по умолчаниюdata/mtproxy_secrets.txt).MTPROXY_SERVICE— имя systemd‑сервиса MTProxy (по умолчаниюmtproxy.service).
Пример wrapper‑скрипта (используется в systemd unit):
#!/usr/bin/env bash
set -euo pipefail
SECRETS_FILE="${MTPROXY_SECRETS_FILE:-/storage/tgunlock_robot/data/mtproxy_secrets.txt}"
PORT="${MTPROXY_PORT:-9443}"
ARGS=()
if [[ -f "$SECRETS_FILE" ]]; then
while IFS= read -r secret; do
secret="$(echo -n "$secret" | tr -d '[:space:]')"
[[ -z "$secret" ]] && continue
ARGS+=("-S" "$secret")
done < "$SECRETS_FILE"
fi
exec /opt/MTProxy/objs/bin/mtproto-proxy -u nobody -p 8888 -H "$PORT" "${ARGS[@]}" --aes-pwd /opt/MTProxy/proxy-secret /opt/MTProxy/proxy-multi.conf -M 1Важно: mtproto_port в админке и порт в systemd должны совпадать.
Готовые файлы в репозитории:
scripts/mtproxy_start.shmtproxy.service(проверьте пути иMTPROXY_PORT)
- Открой админку командой
/admin. - Нажми
⚙️ Настройки. - Все переключатели делаются кнопками.
- Для числовых полей нажми кнопку и введи значение.
Примеры:
proxy_day_price 10
proxy_create_price 100
free_credit 50
stars_rate 1
ref_bonus_inviter 10
ref_bonus_invited 10
stars_buy_hint_enabled 1
stars_buy_url https://t.me/BuyStarsBot
offer_url https://example.com/offer
policy_url https://example.com/policy
- Поддержка работает по статусам тикета:
waiting_admin,waiting_user,closed. - Тикет можно закрыть админом или самим пользователем.
- Для FreeKassa проверка идёт фоновым опросом API (polling).
- Пользователь получает отдельные сообщения по статусам платежа (
pending/paid/failed/canceled).