Автоматизированный бот для обработки заказов 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-кошелёк с достаточным балансом
- Мнемоническая фраза кошелька
- Клонируйте репозиторий:
git clone https://github.com/yourusername/AutoStars.git
cd AutoStars- Установите зависимости:
python -m pip install -r requirements.txt-
При первом запуске проект сам создаст
config.jsonизconfig.example.json, если файла ещё нет. -
Заполните
config.json. -
Запустите консольную версию:
python main.pyИли GUI:
python gui.pyСистема оплаты перенесена из FragaStars.py и использует тот же основной принцип:
- 📡 Получение оплаченного заказа FunPay
- 🔎 Извлечение
@username, размера лота и количества купленных лотов - 🔍 Поиск получателя через Fragment
- 💰 Получение актуальной суммы покупки через Fragment
- 🧾 Получение
Ref IDиз transaction payload Fragment - 💎 Отправка необходимого количества TON с Wallet V4R2
- 🔎 Проверка транзакции через Toncenter
- ✅ Только после подтверждения транзакции, ожидаемого адреса и суммы заказ записывается как
completed - 💬 Покупателю отправляется сообщение в FunPay
- 📱 Администратору отправляется уведомление
- 🔄 Неопределённые транзакции повторно проверяются безопасно по сохранённому hash
В приложенном FragaStars.py для TON используются tonutils, TonapiClient и проверка транзакции через Toncenter. Этот механизм перенесён в текущую standalone-версию без зависимости от Cardinal.
Основные разделы config.json:
- 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
- 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
- enabled — включение Telegram-бота
- bot_token — токен Telegram-бота
- golden_key — Golden Key аккаунта FunPay
- 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 предоставляет:
- 🟢 запуск системы
- 🔴 корректную остановку
- 📊 статистику
- 📜 историю транзакций
- ⚙️ настройки
- 🤖 отдельную настройку автоответчика
- 🎨 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/
Платёжный клиент использует актуальный hash Fragment, получаемый со страницы покупки, состояние updateStarsBuyState, initBuyStarsRequest и getBuyStarsLink. Account payload для Fragment строится непосредственно из TON wallet, а не хранится как обязательная статическая строка конфигурации. Архитектурные решения сверялись с публичным pyfragment, FunPay Hub Auto Stars plugin и FunPay Vertex.