# - *- coding: utf- 8 - *- from aiogram import Router, Bot, F from aiogram.filters import StateFilter from aiogram.types import CallbackQuery, Message from tgbot.database import Paymentsx from tgbot.keyboards.inline_admin import payment_yoomoney_finl, close_finl, payment_cryptobot_finl, payment_stars_finl from tgbot.services.api_cryptobot import CryptobotAPI from tgbot.services.api_stars import StarsAPI from tgbot.services.api_yoomoney import YoomoneyAPI from tgbot.utils.const_functions import ded, is_number, to_number from tgbot.utils.misc.bot_logging import bot_logger from tgbot.utils.misc.bot_models import FSM, ARS router = Router(name=__name__) # Управление - CryptoBot @router.message(F.text == "🔷 CryptoBot") async def payments_cryptobot_open(message: Message, bot: Bot, state: FSM, arSession: ARS): await state.clear() await message.answer( "🔷 Управление - CryptoBot", reply_markup=await payment_cryptobot_finl(), ) # Управление - ЮMoney @router.message(F.text == "🔮 ЮMoney") async def payments_yoomoney_open(message: Message, bot: Bot, state: FSM, arSession: ARS): await state.clear() await message.answer( "🔮 Управление - ЮMoney", reply_markup=await payment_yoomoney_finl(), ) # Управление - Звёзды @router.message(F.text == "⭐️ Звёзды") async def payments_stars_open(message: Message, bot: Bot, state: FSM, arSession: ARS): await state.clear() await message.answer( "⭐️ Управление - Звёзды", reply_markup=await payment_stars_finl(), ) ################################################################################ ################################### CRYPTOBOT ################################## # Баланс - CryptoBot @router.callback_query(F.data == "payment_cryptobot_balance") async def payments_cryptobot_balance(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): response = await ( await CryptobotAPI.connect( bot=bot, arSession=arSession, update=call, skipping_error=True, ) ).balance() await call.message.answer( response, reply_markup=close_finl(), ) # Информация - CryptoBot @router.callback_query(F.data == "payment_cryptobot_check") async def payments_cryptobot_check(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): status, response = await ( await CryptobotAPI.connect( bot=bot, arSession=arSession, update=call, skipping_error=True, ) ).check() await call.message.answer( response, reply_markup=close_finl(), ) # Изменение - CryptoBot @router.callback_query(F.data == "payment_cryptobot_edit") async def payments_cryptobot_edit(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): await state.set_state("here_cryptobot_token") await call.message.edit_text( ded(f""" 🔷 Изменение @CryptoBot кошелька - Инструкция ➖➖➖➖➖➖➖➖➖➖ ▪️ Создайте Приложение в "Crypto Pay" и отправьте токен """), disable_web_page_preview=True, ) # Выключатель - CryptoBot @router.callback_query(F.data.startswith("payment_cryptobot_status:")) async def payments_cryptobot_status(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): get_status = call.data.split(":")[1] get_payments = await Paymentsx().get() if get_status == "True" and get_payments.cryptobot_token == "None": return await call.answer("❌ Токен данной платежной системы не был добавлен", True) await Paymentsx().update(status_cryptobot=get_status) await call.message.edit_text( "🔷 Управление - CryptoBot", reply_markup=await payment_cryptobot_finl(), ) ############################## ПРИНЯТИЕ CRYPTOBOT ############################## # Принятие токена Cryptobot @router.message(StateFilter("here_cryptobot_token")) async def payments_cryptobot_get(message: Message, bot: Bot, state: FSM, arSession: ARS): get_token = message.text await state.clear() cache_message = await message.answer("🔷 Проверка введённых CryptoBot данных... 🔄") status, response = await ( await CryptobotAPI.connect( bot=bot, arSession=arSession, update=message, skipping_error=True, token=get_token, ) ).check() if status: await Paymentsx().update(cryptobot_token=get_token) await cache_message.edit_text("🔷 CryptoBot кошелёк был успешно изменён ✅") else: await cache_message.edit_text("🔷 Не удалось изменить CryptoBot кошелёк ❌") await message.answer( "🔷 Управление - CryptoBot", reply_markup=await payment_cryptobot_finl(), ) ################################################################################ #################################### ЮMoney #################################### # Баланс - ЮMoney @router.callback_query(F.data == "payment_yoomoney_balance") async def payments_yoomoney_balance(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): response = await ( await YoomoneyAPI.connect( bot=bot, arSession=arSession, update=call, skipping_error=True, ) ).balance() await call.message.answer( response, reply_markup=close_finl(), ) # Информация - ЮMoney @router.callback_query(F.data == "payment_yoomoney_check") async def payments_yoomoney_check(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): response = await ( await YoomoneyAPI.connect( bot=bot, arSession=arSession, update=call, skipping_error=True, ) ).check() await call.message.answer( response, reply_markup=close_finl(), ) # Изменение - ЮMoney @router.callback_query(F.data == "payment_yoomoney_edit") async def payments_yoomoney_edit(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): response = await ( await YoomoneyAPI.connect( bot=bot, arSession=arSession, ) ).authorization_get() await state.set_state("here_yoomoney_token") await call.message.edit_text( ded(f""" 🔮 Изменение ЮMoney кошелька - Инструкция ➖➖➖➖➖➖➖➖➖➖ ▪️ Отправьте ссылку/код из адресной строки ▪️ {response} """), disable_web_page_preview=True, ) # Выключатель - ЮMoney @router.callback_query(F.data.startswith("payment_yoomoney_status:")) async def payments_yoomoney_status(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): get_status = call.data.split(":")[1] get_payments = await Paymentsx().get() if get_status == "True" and get_payments.yoomoney_token == "None": return await call.answer("❌ Токен данной платежной системы не был добавлен", True) await Paymentsx().update(status_yoomoney=get_status) await call.message.edit_text( "🔮 Управление - ЮMoney", reply_markup=await payment_yoomoney_finl(), ) ################################ ПРИНЯТИЕ ЮMONEY ############################### # Принятие токена ЮMoney @router.message(StateFilter("here_yoomoney_token")) async def payments_yoomoney_get(message: Message, bot: Bot, state: FSM, arSession: ARS): get_code = message.text try: get_code = get_code[get_code.index("code=") + 5:].replace(" ", "") except Exception: bot_logger.debug("ЮMoney code= не найден в сообщении, пробую использовать текст как код", exc_info=True) cache_message = await message.answer("🔮 Проверка введённых ЮMoney данных... 🔄") status, token, response = await ( await YoomoneyAPI.connect( bot=bot, arSession=arSession, ) ).authorization_enter(str(get_code)) if status: await Paymentsx().update(yoomoney_token=token) await cache_message.edit_text(response) await state.clear() await message.answer( "🔮 Управление - ЮMoney", reply_markup=await payment_yoomoney_finl(), ) ################################################################################ #################################### ЗВЁЗДЫ #################################### # Баланс - Звёзды @router.callback_query(F.data == "payment_stars_balance") async def payments_stars_balance(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): response = await ( await StarsAPI.connect( bot=bot, arSession=arSession, update=call, skipping_error=True, ) ).balance() await call.message.answer( response, reply_markup=close_finl(), ) # Информация - Звёзды @router.callback_query(F.data == "payment_stars_check") async def payments_stars_check(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): status, response = await ( await StarsAPI.connect( bot=bot, arSession=arSession, update=call, skipping_error=True, ) ).check() await call.message.answer( response, reply_markup=close_finl(), ) # Изменение - Звёзды @router.callback_query(F.data == "payment_stars_edit") async def payments_stars_edit(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): get_payments = await Paymentsx().get() await state.set_state("here_stars_course") await call.message.edit_text( ded(f""" ⭐️ Изменение курса Telegram Stars ➖➖➖➖➖➖➖➖➖➖ ▪️ Текущий курс: 1 ⭐️ = {get_payments.stars_course}₽ ▪️ Отправьте новый курс в рублях за одну звезду """), disable_web_page_preview=True, ) # Выключатель - Звёзды @router.callback_query(F.data.startswith("payment_stars_status:")) async def payments_stars_status(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): get_status = call.data.split(":")[1] await Paymentsx().update(status_stars=get_status) await call.message.edit_text( "⭐️ Управление - Звёзды", reply_markup=await payment_stars_finl(), ) ############################# ПРИНЯТИЕ КУРСА ЗВЁЗД ############################# # Принятие курса Telegram Stars @router.message(StateFilter("here_stars_course")) async def payments_stars_course_get(message: Message, bot: Bot, state: FSM, arSession: ARS): if not is_number(message.text): return await message.answer( "❌ Введите число. Например: 1.5" ) stars_course = float(to_number(message.text)) if stars_course <= 0: return await message.answer("❌ Курс должен быть больше нуля") await Paymentsx().update(stars_course=stars_course) await state.clear() await message.answer( f"⭐️ Курс Telegram Stars изменён: 1 ⭐️ = {stars_course}₽", ) await message.answer( "⭐️ Управление - Звёзды", reply_markup=await payment_stars_finl(), )