Skip to content

Repository files navigation

🌟 AutoStars - Автоматическая выдача Telegram Stars

CI License: MIT

Автоматизированный бот для обработки заказов FunPay и автоматической покупки Telegram Stars через Fragment с оплатой в TON и подтверждением транзакции.

📋 Описание

AutoStars отслеживает новые заказы FunPay, извлекает Telegram username и количество Stars, получает актуальную стоимость через Fragment, формирует транзакцию и оплачивает её с TON-кошелька.

Проект включает GUI на Flet, SQLite-базу, статистику, историю операций, Telegram-уведомления и настраиваемый автоответчик FunPay.

✨ Основные возможности

  • 🤖 Автоматическая обработка заказов — мониторинг FunPay
  • Реальная выдача Stars — поиск получателя и создание покупки через Fragment
  • 💎 Оплата в TON — отправка TON с Wallet V4R2 через tonutils
  • 🔎 Подтверждение транзакции — проверка результата через Toncenter
  • 🛡️ Защита от повторной обработки — завершённые и неопределённые заказы не запускаются повторно автоматически
  • ⚠️ Безопасная обработка ошибокunknown используется, когда результат нельзя достоверно определить
  • ↩️ Автовозврат — опциональный возврат FunPay-заказа при однозначной ошибке
  • 🤖 Автоответчик FunPay — ответы по ключевым словам, точному совпадению или regex
  • 📱 Telegram уведомления — сообщения об успешных операциях и ошибках
  • 🎨 GUI интерфейс — запуск, остановка и настройка системы
  • 🎭 12 готовых тем оформления
  • 📊 Статистика и история — SQLite
  • 🔄 Миграция — перенос старой db.json в SQLite

🚀 Быстрый старт

📋 Требования

  • Python 3.10+
  • Аккаунт FunPay с Golden Key
  • Telegram-бот
  • Fragment cookie; hash теперь автоматически извлекается со страницы покупки, сохранённый hash используется только как fallback
  • API-ключ TON API, полученный через TonConsole
  • TON-кошелёк с достаточным балансом
  • Мнемоническая фраза кошелька

📥 Установка

  1. Клонируйте репозиторий:
git clone https://github.com/yourusername/AutoStars.git
cd AutoStars
  1. Установите зависимости:
python -m pip install -r requirements.txt
  1. При первом запуске проект сам создаст config.json из config.example.json, если файла ещё нет.

  2. Заполните config.json.

  3. Запустите консольную версию:

python main.py

Или GUI:

python gui.py

💳 Как работает выдача Stars

Система оплаты перенесена из FragaStars.py и использует тот же основной принцип:

  1. 📡 Получение оплаченного заказа FunPay
  2. 🔎 Извлечение @username, размера лота и количества купленных лотов
  3. 🔍 Поиск получателя через Fragment
  4. 💰 Получение актуальной суммы покупки через Fragment
  5. 🧾 Получение Ref ID из transaction payload Fragment
  6. 💎 Отправка необходимого количества TON с Wallet V4R2
  7. 🔎 Проверка транзакции через Toncenter
  8. ✅ Только после подтверждения транзакции, ожидаемого адреса и суммы заказ записывается как completed
  9. 💬 Покупателю отправляется сообщение в FunPay
  10. 📱 Администратору отправляется уведомление
  11. 🔄 Неопределённые транзакции повторно проверяются безопасно по сохранённому hash

В приложенном FragaStars.py для TON используются tonutils, TonapiClient и проверка транзакции через Toncenter. Этот механизм перенесён в текущую standalone-версию без зависимости от Cardinal.

⚙️ Конфигурация

Основные разделы config.json:

PAYMENT

  • api_key — API-ключ TON API
  • is_testnet — использование TON testnet
  • mnemonic — 12 или 24 слова кошелька
  • destination_address — необязательный allowlist для адреса, который Fragment возвращает в готовой транзакции; если пустой, используется адрес непосредственно из Fragment
  • wallet_address — ожидаемый адрес TON-кошелька из mnemonic; если указан, запуск не разрешится при несовпадении
  • allowed_quantities — разрешённые размеры одного лота Stars; при покупке нескольких одинаковых лотов итоговое количество умножается на количество лотов
  • toncenter_url — endpoint проверки транзакций
  • confirmation_attempts — количество попыток подтверждения
  • confirmation_delay — задержка между проверками
  • min_balance_reserve — минимальный запас TON, оставляемый на комиссии
  • Неоднозначный результат отправки TON переводится в unknown без автоматической повторной отправки, чтобы исключить двойной платёж
  • auto_refund — автоматический возврат заказа при однозначной ошибке
  • show_sender — параметр отображения отправителя Fragment
  • device — параметры устройства для Fragment; account payload строится автоматически из TON wallet
  • payment_method — для текущей реализации используется ton

FRAGMENT

  • cookie — session cookies Fragment: stel_ssid, stel_dt, stel_token, stel_ton_token
  • hash — необязательный fallback; актуальный hash автоматически извлекается со страницы покупки
  • url — базовый URL Fragment API
  • stars_page — страница покупки Stars
  • test_username — необязательный username для безопасной проверки поиска получателя без отправки TON
  • rate_limit_delay — минимальный интервал между запросами к Fragment
  • retry_attempts — количество повторов временных ошибок Fragment
  • min_stars / max_stars — допустимый диапазон одной покупки Stars

BOT

  • enabled — включение Telegram-бота
  • bot_token — токен Telegram-бота

FUNPAY

  • golden_key — Golden Key аккаунта FunPay

SETTINGS

  • db_path — путь к SQLite
  • request_timeout — timeout внешних запросов
  • order_check_interval — интервал проверки FunPay
  • admin_telegram_id — Telegram ID администратора

🤖 Автоответчик

Автоответчик работает через FunPayAPI.Runner и отслеживает новые сообщения FunPay.

Поддерживаются три режима:

  • contains — сообщение содержит триггер
  • exact — сообщение полностью совпадает с триггером
  • regex — триггер является регулярным выражением

Пример:

{
  "enabled": 1,
  "delay": 1,
  "cooldown": 30,
  "poll_interval": 2,
  "rules": [
    {
      "triggers": ["привет", "здравствуйте"],
      "match": "contains",
      "response": "Здравствуйте, {username}! Чем могу помочь?"
    },
    {
      "triggers": ["^цена\?$"],
      "match": "regex",
      "response": "Актуальные цены указаны в лотах."
    }
  ]
}

Поддерживаются переменные:

  • {username} — имя отправителя
  • {chat_id} — ID чата

Автоответчик не отвечает на собственные сообщения, запоминает обработанные сообщения и имеет отдельный cooldown для каждого чата.

🔄 Статусы заказов

Статус Значение
processing Выдача выполняется
completed Транзакция подтверждена
failed Получена однозначная ошибка
invalid Данные заказа некорректны
unknown Результат нельзя достоверно определить

unknown не повторяется автоматически. Это защищает от повторной покупки Stars, если TON-транзакция уже была отправлена, но подтверждение не удалось получить.

🎨 GUI

GUI предоставляет:

  • 🟢 запуск системы
  • 🔴 корректную остановку
  • 📊 статистику
  • 📜 историю транзакций
  • ⚙️ настройки
  • 🤖 отдельную настройку автоответчика
  • 🎨 12 тем оформления

Для изменения настроек во время работы системы требуется перезапуск AutoStars.

🗄️ База данных

Проект использует SQLite.

Хранятся:

  • заказы;
  • статусы заказов;
  • Telegram usernames;
  • количество Stars;
  • hash транзакции;
  • история успешных выдач;
  • ошибки.

Если используется старая db.json, она переносится в SQLite автоматически.

🔒 Безопасность

  • 🔐 config.json исключён из Git
  • 🔐 база данных исключена из Git
  • 🔐 TON mnemonic не должна попадать в репозиторий
  • 🔐 Fragment cookie и hash не должны публиковаться
  • ⚠️ unknown не повторяется автоматически
  • 📝 ошибки сохраняются в autostars.log

Никогда не публикуйте config.json с реальной мнемоникой, Fragment cookie или другими секретами.

📁 Структура проекта

AutoStars/
├── main.py
├── gui.py
├── config.example.json
├── requirements.txt
├── tests/
├── docs/
├── .github/workflows/ci.yml
├── start_gui.bat
├── FEATURES.md
├── INSTALL.md
├── INSTALL_NET.md
├── LICENSE
└── README.md

⚠️ Ограничения

AutoStars зависит от FunPayAPI, Fragment и TON API. Изменение API или сессионных данных Fragment может потребовать обновления проекта.

Перед использованием на реальных заказах рекомендуется сначала проверить систему на тестовой конфигурации и небольшой сумме. Без live-покупки нельзя гарантировать актуальность внутренних методов Fragment.

📄 Лицензия

Этот проект распространяется под лицензией MIT. См. файл LICENSE для подробностей.


Поставьте звезду проекту, если он оказался полезным!

🧪 Проверка качества

  • Юнит-тесты находятся в tests/
  • CI запускает py_compile и тесты
  • Архитектура и безопасность описаны в docs/

Fragment integration

Платёжный клиент использует актуальный hash Fragment, получаемый со страницы покупки, состояние updateStarsBuyState, initBuyStarsRequest и getBuyStarsLink. Account payload для Fragment строится непосредственно из TON wallet, а не хранится как обязательная статическая строка конфигурации. Архитектурные решения сверялись с публичным pyfragment, FunPay Hub Auto Stars plugin и FunPay Vertex.

About

AutoStars - это скрипт для автоматической выдачи звёзд и автоответа на FunPay.

Resources

Contributing

Security policy

Stars

14 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages