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