feat(crypto): add CryptoPay with network support

This commit is contained in:
2026-07-20 16:30:21 +05:00
parent 5e407dc1a8
commit 8d4d75f7fd
3 changed files with 35 additions and 7 deletions
+2
View File
@@ -1,7 +1,9 @@
# Обязательные поля
BOT_TOKEN=
ADMIN_ID=
CRYPTO_PAY_TOKEN=
CRYPTO_PAY_NETWORK=
# Бот для логгинга (логи будут в этом боте, можно указать один и тот же бот на главный и логгинга)
LOG_BOT_TOKEN=
+5
View File
@@ -43,14 +43,18 @@ load_dotenv()
BOT_TOKEN = os.getenv("BOT_TOKEN", "")
LOG_BOT_TOKEN = os.getenv("LOG_BOT_TOKEN", "") or None
ADMIN_ID = _env_int("ADMIN_ID", 0)
CRYPTO_PAY_TOKEN = os.getenv("CRYPTO_PAY_TOKEN", "")
CRYPTO_PAY_NETWORK = os.getenv("CRYPTO_PAY_NETWORK", "MAINNET")
SHOP_NAME = os.getenv("SHOP_NAME", "KILL UNONY MOM")
SHOP_CHANNEL = os.getenv("SHOP_CHANNEL", "https://t.me/bot399_start_bot")
BOT_USERNAME = os.getenv("BOT_USERNAME", "bot399_start_bot")
DATABASE_DIR = _resolve_path("DATABASE_DIR", "Users")
COOKIE_FILES_DIR = _resolve_path("COOKIE_FILES_DIR", "Cookies")
CONFIG_FILE = _resolve_path("BOT_CONFIG_FILE", "bot_config.json")
STATS_FILE = _resolve_path("BOT_STATS_FILE", "bot_stats.json")
PROXIES_FILE = _resolve_path("PROXIES_FILE", "proxies.txt")
@@ -61,6 +65,7 @@ CONCURRENT_CHECKS = _env_int("CONCURRENT_CHECKS", 50)
REQUEST_TIMEOUT = _env_int("REQUEST_TIMEOUT", 10)
FRESHER_BATCH_SIZE = _env_int("FRESHER_BATCH_SIZE", 10)
# Инициализация
DATABASE_DIR.mkdir(parents=True, exist_ok=True)
COOKIE_FILES_DIR.mkdir(parents=True, exist_ok=True)
+28 -7
View File
@@ -2,12 +2,21 @@ import asyncio
import logging
from datetime import datetime
from aiosend import CryptoPay, TESTNET, MAINNET
from aiogram import Bot, Dispatcher
from aiogram.enums import ParseMode
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.client.default import DefaultBotProperties
from config import ADMIN_ID, BOT_TOKEN, LOG_BOT_TOKEN, SHOP_NAME
from config import (
ADMIN_ID,
BOT_TOKEN,
CRYPTO_PAY_NETWORK,
CRYPTO_PAY_TOKEN,
LOG_BOT_TOKEN,
SHOP_NAME,
)
from db.storage import load_config, load_stats
from handlers import admin, start, upload, user
from runtime import set_bots
@@ -16,29 +25,40 @@ from utils.logging import log_admin
async def main() -> None:
defaults = DefaultBotProperties(parse_mode=ParseMode.HTML)
bot = Bot(token=BOT_TOKEN, default=defaults)
log_bot = Bot(token=LOG_BOT_TOKEN, default=defaults) if LOG_BOT_TOKEN else None
set_bots(bot, log_bot)
dispatcher = Dispatcher(storage=MemoryStorage())
dispatcher.include_router(start.router)
dispatcher.include_router(user.router)
dispatcher.include_router(admin.router)
dispatcher.include_router(upload.router)
cp_net = TESTNET if CRYPTO_PAY_NETWORK.lower() == "testnet" else MAINNET
cp = CryptoPay(token=CRYPTO_PAY_TOKEN, network=cp_net)
dp = Dispatcher(storage=MemoryStorage())
dp.include_router(start.router)
dp.include_router(user.router)
dp.include_router(admin.router)
dp.include_router(upload.router)
load_config()
load_stats()
await log_admin(
bot,
ADMIN_ID,
f"🟢 <b>{SHOP_NAME}</b> запущен\n{datetime.now().strftime('%d.%m.%Y %H:%M:%S')}",
log_bot,
)
try:
await dispatcher.start_polling(bot)
await dp.start_polling(bot)
await cp.start_polling(bot)
finally:
if log_bot:
await log_bot.session.close()
await cp.session.close()
await bot.session.close()
@@ -51,4 +71,5 @@ if __name__ == "__main__":
logging.StreamHandler(),
],
)
asyncio.run(main())