feat(crypto): add CryptoPay with network support
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
# Обязательные поля
|
||||
BOT_TOKEN=
|
||||
ADMIN_ID=
|
||||
|
||||
CRYPTO_PAY_TOKEN=
|
||||
CRYPTO_PAY_NETWORK=
|
||||
|
||||
# Бот для логгинга (логи будут в этом боте, можно указать один и тот же бот на главный и логгинга)
|
||||
LOG_BOT_TOKEN=
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user