forked from FOSS/AutoShop-Djimbo
refactor: remove Yoomoney payment integration
This commit is contained in:
@@ -4,12 +4,14 @@ 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.keyboards.inline_admin import (
|
||||
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__)
|
||||
@@ -17,7 +19,9 @@ router = Router(name=__name__)
|
||||
|
||||
# Управление - CryptoBot
|
||||
@router.message(F.text == "🔷 CryptoBot")
|
||||
async def payments_cryptobot_open(message: Message, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def payments_cryptobot_open(
|
||||
message: Message, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
await state.clear()
|
||||
|
||||
await message.answer(
|
||||
@@ -26,17 +30,6 @@ async def payments_cryptobot_open(message: Message, bot: Bot, state: FSM, arSess
|
||||
)
|
||||
|
||||
|
||||
# Управление - Ю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(
|
||||
"<b>🔮 Управление - ЮMoney</b>",
|
||||
reply_markup=await payment_yoomoney_finl(),
|
||||
)
|
||||
|
||||
|
||||
# Управление - Звёзды
|
||||
@router.message(F.text == "⭐️ Звёзды")
|
||||
async def payments_stars_open(message: Message, bot: Bot, state: FSM, arSession: ARS):
|
||||
@@ -52,7 +45,9 @@ async def payments_stars_open(message: Message, bot: Bot, state: FSM, arSession:
|
||||
################################### CRYPTOBOT ##################################
|
||||
# Баланс - CryptoBot
|
||||
@router.callback_query(F.data == "payment_cryptobot_balance")
|
||||
async def payments_cryptobot_balance(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def payments_cryptobot_balance(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
response = await (
|
||||
await CryptobotAPI.connect(
|
||||
bot=bot,
|
||||
@@ -70,7 +65,9 @@ async def payments_cryptobot_balance(call: CallbackQuery, bot: Bot, state: FSM,
|
||||
|
||||
# Информация - CryptoBot
|
||||
@router.callback_query(F.data == "payment_cryptobot_check")
|
||||
async def payments_cryptobot_check(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def payments_cryptobot_check(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
status, response = await (
|
||||
await CryptobotAPI.connect(
|
||||
bot=bot,
|
||||
@@ -88,7 +85,9 @@ async def payments_cryptobot_check(call: CallbackQuery, bot: Bot, state: FSM, ar
|
||||
|
||||
# Изменение - CryptoBot
|
||||
@router.callback_query(F.data == "payment_cryptobot_edit")
|
||||
async def payments_cryptobot_edit(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
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"""
|
||||
@@ -102,13 +101,17 @@ async def payments_cryptobot_edit(call: CallbackQuery, bot: Bot, state: FSM, arS
|
||||
|
||||
# Выключатель - CryptoBot
|
||||
@router.callback_query(F.data.startswith("payment_cryptobot_status:"))
|
||||
async def payments_cryptobot_status(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
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)
|
||||
return await call.answer(
|
||||
"❌ Токен данной платежной системы не был добавлен", True
|
||||
)
|
||||
|
||||
await Paymentsx().update(status_cryptobot=get_status)
|
||||
|
||||
@@ -121,12 +124,16 @@ async def payments_cryptobot_status(call: CallbackQuery, bot: Bot, state: FSM, a
|
||||
############################## ПРИНЯТИЕ CRYPTOBOT ##############################
|
||||
# Принятие токена Cryptobot
|
||||
@router.message(StateFilter("here_cryptobot_token"))
|
||||
async def payments_cryptobot_get(message: Message, bot: Bot, state: FSM, arSession: ARS):
|
||||
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("<b>🔷 Проверка введённых CryptoBot данных... 🔄</b>")
|
||||
cache_message = await message.answer(
|
||||
"<b>🔷 Проверка введённых CryptoBot данных... 🔄</b>"
|
||||
)
|
||||
|
||||
status, response = await (
|
||||
await CryptobotAPI.connect(
|
||||
@@ -140,9 +147,13 @@ async def payments_cryptobot_get(message: Message, bot: Bot, state: FSM, arSessi
|
||||
|
||||
if status:
|
||||
await Paymentsx().update(cryptobot_token=get_token)
|
||||
await cache_message.edit_text("<b>🔷 CryptoBot кошелёк был успешно изменён ✅</b>")
|
||||
await cache_message.edit_text(
|
||||
"<b>🔷 CryptoBot кошелёк был успешно изменён ✅</b>"
|
||||
)
|
||||
else:
|
||||
await cache_message.edit_text("<b>🔷 Не удалось изменить CryptoBot кошелёк ❌</b>")
|
||||
await cache_message.edit_text(
|
||||
"<b>🔷 Не удалось изменить CryptoBot кошелёк ❌</b>"
|
||||
)
|
||||
|
||||
await message.answer(
|
||||
"<b>🔷 Управление - CryptoBot</b>",
|
||||
@@ -150,121 +161,13 @@ async def payments_cryptobot_get(message: Message, bot: Bot, state: FSM, arSessi
|
||||
)
|
||||
|
||||
|
||||
################################################################################
|
||||
#################################### Ю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"""
|
||||
<b>🔮 Изменение ЮMoney кошелька - <a href='https://teletype.in/@djimbox/djimboshop-yoomoney'>Инструкция</a></b>
|
||||
➖➖➖➖➖➖➖➖➖➖
|
||||
▪️ Отправьте ссылку/код из адресной строки
|
||||
▪️ {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(
|
||||
"<b>🔮 Управление - ЮMoney</b>",
|
||||
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("<b>🔮 Проверка введённых ЮMoney данных... 🔄</b>")
|
||||
|
||||
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(
|
||||
"<b>🔮 Управление - ЮMoney</b>",
|
||||
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):
|
||||
async def payments_stars_balance(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
response = await (
|
||||
await StarsAPI.connect(
|
||||
bot=bot,
|
||||
@@ -282,7 +185,9 @@ async def payments_stars_balance(call: CallbackQuery, bot: Bot, state: FSM, arSe
|
||||
|
||||
# Информация - Звёзды
|
||||
@router.callback_query(F.data == "payment_stars_check")
|
||||
async def payments_stars_check(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def payments_stars_check(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
status, response = await (
|
||||
await StarsAPI.connect(
|
||||
bot=bot,
|
||||
@@ -300,7 +205,9 @@ async def payments_stars_check(call: CallbackQuery, bot: Bot, state: FSM, arSess
|
||||
|
||||
# Изменение - Звёзды
|
||||
@router.callback_query(F.data == "payment_stars_edit")
|
||||
async def payments_stars_edit(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
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")
|
||||
@@ -317,7 +224,9 @@ async def payments_stars_edit(call: CallbackQuery, bot: Bot, state: FSM, arSessi
|
||||
|
||||
# Выключатель - Звёзды
|
||||
@router.callback_query(F.data.startswith("payment_stars_status:"))
|
||||
async def payments_stars_status(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
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)
|
||||
@@ -331,7 +240,9 @@ async def payments_stars_status(call: CallbackQuery, bot: Bot, state: FSM, arSes
|
||||
############################# ПРИНЯТИЕ КУРСА ЗВЁЗД #############################
|
||||
# Принятие курса Telegram Stars
|
||||
@router.message(StateFilter("here_stars_course"))
|
||||
async def payments_stars_course_get(message: Message, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def payments_stars_course_get(
|
||||
message: Message, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
if not is_number(message.text):
|
||||
return await message.answer(
|
||||
"<b>❌ Введите число. Например: <code>1.5</code></b>"
|
||||
|
||||
+23
-18
@@ -14,21 +14,20 @@ from tgbot.utils.text_functions import position_open_user
|
||||
|
||||
# Игнор-колбэки покупок
|
||||
prohibit_buy = (
|
||||
'buy_category_swipe',
|
||||
'buy_category_open',
|
||||
'buy_position_swipe',
|
||||
'buy_position_open',
|
||||
'buy_item_open',
|
||||
'buy_item_confirm',
|
||||
"buy_category_swipe",
|
||||
"buy_category_open",
|
||||
"buy_position_swipe",
|
||||
"buy_position_open",
|
||||
"buy_item_open",
|
||||
"buy_item_confirm",
|
||||
)
|
||||
|
||||
# Игнор-колбэки пополнений
|
||||
prohibit_refill = (
|
||||
'user_refill',
|
||||
'user_refill_method',
|
||||
'Pay:Cryptobot',
|
||||
'Pay:Yoomoney',
|
||||
'Pay:',
|
||||
"user_refill",
|
||||
"user_refill_method",
|
||||
"Pay:Cryptobot",
|
||||
"Pay:",
|
||||
)
|
||||
|
||||
router = Router(name=__name__)
|
||||
@@ -54,7 +53,9 @@ async def filter_work_message(message: Message, bot: Bot, state: FSM, arSession:
|
||||
|
||||
# Фильтр на технические работы - колбэк
|
||||
@router.callback_query(IsWork())
|
||||
async def filter_work_callback(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def filter_work_callback(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
await state.clear()
|
||||
|
||||
await call.answer("⛔ Бот находится на технических работах.", True)
|
||||
@@ -64,7 +65,7 @@ async def filter_work_callback(call: CallbackQuery, bot: Bot, state: FSM, arSess
|
||||
################################# СТАТУС ПОКУПОК ###############################
|
||||
# Фильтр на доступность покупок - сообщение
|
||||
@router.message(IsBuy(), F.text == "🎁 Купить")
|
||||
@router.message(IsBuy(), StateFilter('here_item_count'))
|
||||
@router.message(IsBuy(), StateFilter("here_item_count"))
|
||||
async def filter_buy_message(message: Message, bot: Bot, state: FSM, arSession: ARS):
|
||||
await state.clear()
|
||||
|
||||
@@ -73,7 +74,9 @@ async def filter_buy_message(message: Message, bot: Bot, state: FSM, arSession:
|
||||
|
||||
# Фильтр на доступность покупок - колбэк
|
||||
@router.callback_query(IsBuy(), F.data.startswith(prohibit_buy))
|
||||
async def filter_buy_callback(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def filter_buy_callback(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
await state.clear()
|
||||
|
||||
await call.answer("⛔ Покупки временно отключены.", True)
|
||||
@@ -82,7 +85,7 @@ async def filter_buy_callback(call: CallbackQuery, bot: Bot, state: FSM, arSessi
|
||||
################################################################################
|
||||
############################### СТАТУС ПОПОЛНЕНИЙ ##############################
|
||||
# Фильтр на доступность пополнения - сообщение
|
||||
@router.message(IsRefill(), StateFilter('here_refill_amount'))
|
||||
@router.message(IsRefill(), StateFilter("here_refill_amount"))
|
||||
async def filter_refill_message(message: Message, bot: Bot, state: FSM, arSession: ARS):
|
||||
await state.clear()
|
||||
|
||||
@@ -91,7 +94,9 @@ async def filter_refill_message(message: Message, bot: Bot, state: FSM, arSessio
|
||||
|
||||
# Фильтр на доступность пополнения - колбэк
|
||||
@router.callback_query(IsRefill(), F.data.startswith(prohibit_refill))
|
||||
async def filter_refill_callback(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def filter_refill_callback(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
await state.clear()
|
||||
|
||||
await call.answer("⛔ Пополнение временно отключено.", True)
|
||||
@@ -100,7 +105,7 @@ async def filter_refill_callback(call: CallbackQuery, bot: Bot, state: FSM, arSe
|
||||
################################################################################
|
||||
#################################### ПРОЧЕЕ ####################################
|
||||
# Открытие главного меню
|
||||
@router.message(F.text.in_(('🔙 Главное меню', '/start')))
|
||||
@router.message(F.text.in_(("🔙 Главное меню", "/start")))
|
||||
async def main_start(message: Message, bot: Bot, state: FSM, arSession: ARS):
|
||||
await state.clear()
|
||||
|
||||
@@ -115,7 +120,7 @@ async def main_start(message: Message, bot: Bot, state: FSM, arSession: ARS):
|
||||
|
||||
|
||||
# Открытие диплинков
|
||||
@router.message(F.text.startswith('/start '))
|
||||
@router.message(F.text.startswith("/start "))
|
||||
async def main_start_deeplink(message: Message, bot: Bot, state: FSM, arSession: ARS):
|
||||
deepling_args = message.text[7:]
|
||||
|
||||
|
||||
@@ -5,10 +5,21 @@ from aiogram import Router, Bot, F
|
||||
from aiogram.filters import StateFilter
|
||||
from aiogram.types import CallbackQuery, Message
|
||||
|
||||
from tgbot.database import Positionx, Userx, Categoryx, Itemx, Paymentsx, Purchasesx, Settingsx
|
||||
from tgbot.database import (
|
||||
Positionx,
|
||||
Userx,
|
||||
Categoryx,
|
||||
Itemx,
|
||||
Paymentsx,
|
||||
Purchasesx,
|
||||
Settingsx,
|
||||
)
|
||||
from tgbot.keyboards.inline_user import refill_method_buy_finl
|
||||
from tgbot.keyboards.inline_user_page import *
|
||||
from tgbot.keyboards.inline_user_products import products_buy_confirm_finl, products_return_finl
|
||||
from tgbot.keyboards.inline_user_products import (
|
||||
products_buy_confirm_finl,
|
||||
products_return_finl,
|
||||
)
|
||||
from tgbot.keyboards.reply_main import menu_frep
|
||||
from tgbot.utils.const_functions import ded, del_message, convert_date, send_admins
|
||||
from tgbot.utils.misc.bot_models import FSM, ARS
|
||||
@@ -20,7 +31,9 @@ router = Router(name=__name__)
|
||||
|
||||
# Страницы выбора категории для покупки товара
|
||||
@router.callback_query(F.data.startswith("buy_category_swipe:"))
|
||||
async def user_buy_category_swipe(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def user_buy_category_swipe(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
remover = int(call.data.split(":")[1])
|
||||
|
||||
await call.message.edit_text(
|
||||
@@ -31,7 +44,9 @@ async def user_buy_category_swipe(call: CallbackQuery, bot: Bot, state: FSM, arS
|
||||
|
||||
# Открытие категории с выбором позиции для покупки товара
|
||||
@router.callback_query(F.data.startswith("buy_category_open:"))
|
||||
async def user_buy_category_open(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def user_buy_category_open(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
category_id = int(call.data.split(":")[1])
|
||||
remover = int(call.data.split(":")[2])
|
||||
|
||||
@@ -55,7 +70,9 @@ async def user_buy_category_open(call: CallbackQuery, bot: Bot, state: FSM, arSe
|
||||
|
||||
# Страницы выбора позиции для покупки товара
|
||||
@router.callback_query(F.data.startswith("buy_position_swipe:"))
|
||||
async def user_buy_position_swipe(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def user_buy_position_swipe(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
category_id = int(call.data.split(":")[1])
|
||||
remover = int(call.data.split(":")[2])
|
||||
|
||||
@@ -70,7 +87,9 @@ async def user_buy_position_swipe(call: CallbackQuery, bot: Bot, state: FSM, arS
|
||||
|
||||
# Открытие позиции для покупки товара
|
||||
@router.callback_query(F.data.startswith("buy_position_open:"))
|
||||
async def user_buy_position_open(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def user_buy_position_open(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
position_id = int(call.data.split(":")[1])
|
||||
remover = int(call.data.split(":")[2])
|
||||
|
||||
@@ -94,7 +113,7 @@ async def user_buy_open(call: CallbackQuery, bot: Bot, state: FSM, arSession: AR
|
||||
|
||||
# Проверка, имеется ли на балансе пользователя достаточно средств
|
||||
if get_user.user_balance < get_position.position_price:
|
||||
if get_payments.status_cryptobot == "True" or get_payments.status_yoomoney == "True":
|
||||
if get_payments.status_cryptobot == "True":
|
||||
await call.message.answer(
|
||||
"<b>❗ На вашем счёте недостаточно средств</b>\n"
|
||||
"💰 Выберите способ пополнения баланса",
|
||||
@@ -103,7 +122,9 @@ async def user_buy_open(call: CallbackQuery, bot: Bot, state: FSM, arSession: AR
|
||||
|
||||
return await call.answer(cache_time=5)
|
||||
else:
|
||||
return await call.answer("❗ У вас недостаточно средств. Пополните баланс", True)
|
||||
return await call.answer(
|
||||
"❗ У вас недостаточно средств. Пополните баланс", True
|
||||
)
|
||||
|
||||
if len(get_items) < 1:
|
||||
return await call.answer("❗ Товаров нет в наличии", True)
|
||||
@@ -133,7 +154,9 @@ async def user_buy_open(call: CallbackQuery, bot: Bot, state: FSM, arSession: AR
|
||||
▪️ Количество: <code>1шт</code>
|
||||
▪️ Сумма к покупке: <code>{get_position.position_price}₽</code>
|
||||
"""),
|
||||
reply_markup=products_buy_confirm_finl(position_id, get_position.category_id, 1),
|
||||
reply_markup=products_buy_confirm_finl(
|
||||
position_id, get_position.category_id, 1
|
||||
),
|
||||
)
|
||||
else:
|
||||
await state.update_data(here_buy_position_id=position_id)
|
||||
@@ -155,7 +178,7 @@ async def user_buy_open(call: CallbackQuery, bot: Bot, state: FSM, arSession: AR
|
||||
# Принятие количества товаров для покупки
|
||||
@router.message(F.text, StateFilter("here_item_count"))
|
||||
async def user_buy_count(message: Message, bot: Bot, state: FSM, arSession: ARS):
|
||||
position_id = (await state.get_data())['here_buy_position_id']
|
||||
position_id = (await state.get_data())["here_buy_position_id"]
|
||||
|
||||
get_position = await Positionx().get_required(position_id=position_id)
|
||||
get_user = await Userx().get_required(user_id=message.from_user.id)
|
||||
@@ -191,7 +214,9 @@ async def user_buy_count(message: Message, bot: Bot, state: FSM, arSession: ARS)
|
||||
# Если товаров нет в наличии
|
||||
if len(get_items) < 1:
|
||||
await state.clear()
|
||||
return await message.answer("<b>🎁 Товар который вы хотели купить, закончился</b>")
|
||||
return await message.answer(
|
||||
"<b>🎁 Товар который вы хотели купить, закончился</b>"
|
||||
)
|
||||
|
||||
# Если введено кол-во товаров меньше 1 или меньше кол-ва имеющегося в наличии
|
||||
if get_count < 1 or get_count > len(get_items):
|
||||
@@ -217,7 +242,9 @@ async def user_buy_count(message: Message, bot: Bot, state: FSM, arSession: ARS)
|
||||
▪️ Количество: <code>{get_count}шт</code>
|
||||
▪️ Сумма к покупке: <code>{amount_pay}₽</code>
|
||||
"""),
|
||||
reply_markup=products_buy_confirm_finl(position_id, get_position.category_id, get_count),
|
||||
reply_markup=products_buy_confirm_finl(
|
||||
position_id, get_position.category_id, get_count
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -240,9 +267,13 @@ async def user_buy_confirm(call: CallbackQuery, bot: Bot, state: FSM, arSession:
|
||||
elif purchase_result == "POSITION_NOT_FOUND":
|
||||
return await call.message.edit_text("<b>❌ Позиция не была найдена</b>")
|
||||
elif purchase_result == "NOT_ENOUGH_ITEMS":
|
||||
return await call.message.edit_text("<b>❌ В наличии недостаточно товаров. Попробуйте другое кол-во</b>")
|
||||
return await call.message.edit_text(
|
||||
"<b>❌ В наличии недостаточно товаров. Попробуйте другое кол-во</b>"
|
||||
)
|
||||
elif purchase_result == "NOT_ENOUGH_BALANCE":
|
||||
return await call.message.edit_text("<b>❌ На вашем балансе недостаточно средств</b>")
|
||||
return await call.message.edit_text(
|
||||
"<b>❌ На вашем балансе недостаточно средств</b>"
|
||||
)
|
||||
|
||||
get_user = await Userx().get_required(user_id=call.from_user.id)
|
||||
get_settings = await Settingsx().get()
|
||||
@@ -272,5 +303,5 @@ async def user_buy_confirm(call: CallbackQuery, bot: Bot, state: FSM, arSession:
|
||||
▪️ Пользователь: <b>@{get_user.user_login}</b> | <a href='tg://user?id={get_user.user_id}'>{get_user.user_name}</a> | <code>{get_user.user_id}</code>
|
||||
▪️ Товар: <code>{purchase_result.position_name} | {purchase_result.purchase_count}шт | {purchase_result.purchase_price}₽</code>
|
||||
▪️ Чек: <code>#{purchase_result.receipt}</code>
|
||||
""")
|
||||
"""),
|
||||
)
|
||||
|
||||
@@ -9,7 +9,6 @@ from tgbot.database import Paymentsx, Refillx, Userx, Settingsx
|
||||
from tgbot.keyboards.inline_user import refill_bill_finl, refill_method_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 is_number, to_number, gen_id, ded
|
||||
from tgbot.utils.misc.bot_logging import bot_logger
|
||||
from tgbot.utils.misc.bot_models import FSM, ARS
|
||||
@@ -26,9 +25,8 @@ async def refill_method_list(call: CallbackQuery, bot: Bot, state: FSM, arSessio
|
||||
get_payments = await Paymentsx().get()
|
||||
|
||||
if (
|
||||
get_payments.status_cryptobot == "False" and
|
||||
get_payments.status_yoomoney == "False" and
|
||||
get_payments.status_stars == "False"
|
||||
get_payments.status_cryptobot == "False"
|
||||
and get_payments.status_stars == "False"
|
||||
):
|
||||
return await call.answer("❗️ Пополнения временно недоступны", True)
|
||||
|
||||
@@ -40,17 +38,21 @@ async def refill_method_list(call: CallbackQuery, bot: Bot, state: FSM, arSessio
|
||||
|
||||
# Выбор способа пополнения
|
||||
@router.callback_query(F.data.startswith("user_refill_method:"))
|
||||
async def refill_method_select(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def refill_method_select(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
refill_method = call.data.split(":")[1]
|
||||
|
||||
get_payments = await Paymentsx().get()
|
||||
|
||||
if refill_method == "Cryptobot" and get_payments.status_cryptobot == "False":
|
||||
return await call.answer("❌ Пополнение данным способом временно недоступно", True)
|
||||
elif refill_method == "Yoomoney" and get_payments.status_yoomoney == "False":
|
||||
return await call.answer("❌ Пополнение данным способом временно недоступно", True)
|
||||
return await call.answer(
|
||||
"❌ Пополнение данным способом временно недоступно", True
|
||||
)
|
||||
elif refill_method == "Stars" and get_payments.status_stars == "False":
|
||||
return await call.answer("❌ Пополнение данным способом временно недоступно", True)
|
||||
return await call.answer(
|
||||
"❌ Пополнение данным способом временно недоступно", True
|
||||
)
|
||||
|
||||
await state.update_data(here_refill_method=refill_method)
|
||||
|
||||
@@ -83,7 +85,7 @@ async def refill_amount_get(message: Message, bot: Bot, state: FSM, arSession: A
|
||||
cache_message = await message.answer("<b>♻️ Подождите, платёж генерируется..</b>")
|
||||
|
||||
refill_amount = to_number(message.text)
|
||||
refill_method = (await state.get_data())['here_refill_method']
|
||||
refill_method = (await state.get_data())["here_refill_method"]
|
||||
await state.clear()
|
||||
|
||||
# Генерация платежа
|
||||
@@ -95,14 +97,7 @@ async def refill_amount_get(message: Message, bot: Bot, state: FSM, arSession: A
|
||||
update=cache_message,
|
||||
)
|
||||
).bill(refill_amount)
|
||||
elif refill_method == "Yoomoney":
|
||||
bill_message, bill_link, bill_receipt = await (
|
||||
await YoomoneyAPI.connect(
|
||||
bot=bot,
|
||||
arSession=arSession,
|
||||
update=cache_message,
|
||||
)
|
||||
).bill(refill_amount)
|
||||
|
||||
elif refill_method == "Stars":
|
||||
bill_message, bill_link, bill_receipt = await (
|
||||
await StarsAPI.connect(
|
||||
@@ -130,48 +125,13 @@ async def refill_amount_get(message: Message, bot: Bot, state: FSM, arSession: A
|
||||
|
||||
################################################################################
|
||||
############################### ПРОВЕРКА ПЛАТЕЖЕЙ ##############################
|
||||
# Проверка оплаты - ЮMoney
|
||||
@router.callback_query(F.data.startswith('Pay:Yoomoney'))
|
||||
async def refill_check_yoomoney(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
pay_method = call.data.split(":")[1]
|
||||
pay_receipt = call.data.split(":")[2]
|
||||
|
||||
pay_status, pay_amount = await (
|
||||
await YoomoneyAPI.connect(
|
||||
bot=bot,
|
||||
arSession=arSession,
|
||||
update=call,
|
||||
)
|
||||
).bill_check(pay_receipt)
|
||||
|
||||
if pay_status == 0:
|
||||
refill_status = await refill_success(
|
||||
bot=bot,
|
||||
call=call,
|
||||
pay_method=pay_method,
|
||||
pay_amount=pay_amount,
|
||||
pay_receipt=int(pay_receipt),
|
||||
pay_comment=pay_receipt,
|
||||
)
|
||||
|
||||
if refill_status == "ALREADY":
|
||||
await call.answer("❗ Ваше пополнение уже зачислено.", True, cache_time=60)
|
||||
await delete_refill_message(bot, call.message.chat.id, call.message.message_id)
|
||||
elif refill_status == "USER_NOT_FOUND":
|
||||
await call.answer("❗ Пользователь не найден. Напишите в поддержку.", True, cache_time=30)
|
||||
elif pay_status == 1:
|
||||
await call.answer("❗️ Не удалось проверить платёж. Попробуйте позже", True, cache_time=30)
|
||||
elif pay_status == 2:
|
||||
await call.answer("❗️ Оплата не была найдена. Попробуйте позже", True, cache_time=5)
|
||||
elif pay_status == 3:
|
||||
await call.answer("❗️ Оплата была произведена не в рублях", True, cache_time=5)
|
||||
else:
|
||||
await call.answer(f"❗ Неизвестная ошибка {pay_status}. Обратитесь в поддержку.", True, cache_time=5)
|
||||
|
||||
|
||||
# Проверка оплаты - Cryptobot
|
||||
@router.callback_query(F.data.startswith('Pay:Cryptobot'))
|
||||
async def refill_check_cryptobot(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
@router.callback_query(F.data.startswith("Pay:Cryptobot"))
|
||||
async def refill_check_cryptobot(
|
||||
call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
pay_method = call.data.split(":")[1]
|
||||
pay_comment = call.data.split(":")[2]
|
||||
|
||||
@@ -194,22 +154,34 @@ async def refill_check_cryptobot(call: CallbackQuery, bot: Bot, state: FSM, arSe
|
||||
|
||||
if refill_status == "ALREADY":
|
||||
await call.answer("❗ Ваше пополнение уже зачислено.", True, cache_time=60)
|
||||
await delete_refill_message(bot, call.message.chat.id, call.message.message_id)
|
||||
await delete_refill_message(
|
||||
bot, call.message.chat.id, call.message.message_id
|
||||
)
|
||||
elif refill_status == "USER_NOT_FOUND":
|
||||
await call.answer("❗ Пользователь не найден. Напишите в поддержку.", True, cache_time=30)
|
||||
await call.answer(
|
||||
"❗ Пользователь не найден. Напишите в поддержку.", True, cache_time=30
|
||||
)
|
||||
elif pay_status == 1:
|
||||
await call.answer("❗️ Не удалось проверить платёж. Попробуйте позже", True, cache_time=30)
|
||||
await call.answer(
|
||||
"❗️ Не удалось проверить платёж. Попробуйте позже", True, cache_time=30
|
||||
)
|
||||
elif pay_status == 2:
|
||||
await call.answer("❗️ Оплата не была найдена. Попробуйте позже", True, cache_time=5)
|
||||
await call.answer(
|
||||
"❗️ Оплата не была найдена. Попробуйте позже", True, cache_time=5
|
||||
)
|
||||
elif pay_status == 3:
|
||||
await call.answer("❗️ Вы не успели оплатить счёт", True, cache_time=5)
|
||||
await call.message.edit_reply_markup()
|
||||
else:
|
||||
await call.answer(f"❗ Неизвестная ошибка {pay_status}. Обратитесь в поддержку.", True, cache_time=5)
|
||||
await call.answer(
|
||||
f"❗ Неизвестная ошибка {pay_status}. Обратитесь в поддержку.",
|
||||
True,
|
||||
cache_time=5,
|
||||
)
|
||||
|
||||
|
||||
# Проверка оплаты - Звёзды
|
||||
@router.callback_query(F.data.startswith('Pay:Stars'))
|
||||
@router.callback_query(F.data.startswith("Pay:Stars"))
|
||||
async def refill_check_stars(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
pay_method = call.data.split(":")[1]
|
||||
pay_receipt = int(call.data.split(":")[2])
|
||||
@@ -233,22 +205,36 @@ async def refill_check_stars(call: CallbackQuery, bot: Bot, state: FSM, arSessio
|
||||
|
||||
if refill_status == "ALREADY":
|
||||
await call.answer("❗ Ваше пополнение уже зачислено.", True, cache_time=60)
|
||||
await delete_refill_message(bot, call.message.chat.id, call.message.message_id)
|
||||
await delete_refill_message(
|
||||
bot, call.message.chat.id, call.message.message_id
|
||||
)
|
||||
elif refill_status == "USER_NOT_FOUND":
|
||||
await call.answer("❗ Пользователь не найден. Напишите в поддержку.", True, cache_time=30)
|
||||
await call.answer(
|
||||
"❗ Пользователь не найден. Напишите в поддержку.", True, cache_time=30
|
||||
)
|
||||
elif pay_status == 1:
|
||||
await call.answer("❗️ Не удалось проверить платёж. Попробуйте позже", True, cache_time=30)
|
||||
await call.answer(
|
||||
"❗️ Не удалось проверить платёж. Попробуйте позже", True, cache_time=30
|
||||
)
|
||||
elif pay_status == 2:
|
||||
await call.answer("❗️ Оплата не была найдена. Попробуйте позже", True, cache_time=5)
|
||||
await call.answer(
|
||||
"❗️ Оплата не была найдена. Попробуйте позже", True, cache_time=5
|
||||
)
|
||||
else:
|
||||
await call.answer(f"❗ Неизвестная ошибка {pay_status}. Обратитесь в поддержку.", True, cache_time=5)
|
||||
await call.answer(
|
||||
f"❗ Неизвестная ошибка {pay_status}. Обратитесь в поддержку.",
|
||||
True,
|
||||
cache_time=5,
|
||||
)
|
||||
|
||||
|
||||
################################################################################
|
||||
#################################### ЗВЁЗДЫ ####################################
|
||||
# Подтверждение платежа Telegram Stars
|
||||
@router.pre_checkout_query()
|
||||
async def refill_stars_pre_checkout(query: PreCheckoutQuery, bot: Bot, state: FSM, arSession: ARS):
|
||||
async def refill_stars_pre_checkout(
|
||||
query: PreCheckoutQuery, bot: Bot, state: FSM, arSession: ARS
|
||||
):
|
||||
await (
|
||||
await StarsAPI.connect(
|
||||
bot=bot,
|
||||
@@ -277,7 +263,9 @@ async def refill_stars_success(message: Message, bot: Bot, state: FSM, arSession
|
||||
stars_api.parse_successful_payment(payment)
|
||||
)
|
||||
except ValueError:
|
||||
bot_logger.warning("Некорректная successful_payment для Telegram Stars", exc_info=True)
|
||||
bot_logger.warning(
|
||||
"Некорректная successful_payment для Telegram Stars", exc_info=True
|
||||
)
|
||||
return
|
||||
|
||||
refill_status, receipt = await save_refill_success(
|
||||
@@ -293,12 +281,10 @@ async def refill_stars_success(message: Message, bot: Bot, state: FSM, arSession
|
||||
if bill_chat_id == message.chat.id:
|
||||
await delete_refill_message(bot, bill_chat_id, bill_message_id)
|
||||
|
||||
await message.answer(
|
||||
ded(f"""
|
||||
await message.answer(ded(f"""
|
||||
<b>💰 Вы пополнили баланс на сумму <code>{pay_amount}₽</code>. Удачи ❤️
|
||||
🧾 Чек: <code>#{receipt}</code></b>
|
||||
""")
|
||||
)
|
||||
"""))
|
||||
elif refill_status == "ALREADY":
|
||||
if bill_chat_id == message.chat.id:
|
||||
await delete_refill_message(bot, bill_chat_id, bill_message_id)
|
||||
@@ -312,12 +298,12 @@ async def refill_stars_success(message: Message, bot: Bot, state: FSM, arSession
|
||||
#################################### ПРОЧЕЕ ####################################
|
||||
# Зачисление средств
|
||||
async def refill_success(
|
||||
bot: Bot,
|
||||
call: CallbackQuery,
|
||||
pay_method: str,
|
||||
pay_amount: float,
|
||||
pay_receipt: Optional[int] = None,
|
||||
pay_comment: Optional[str] = None,
|
||||
bot: Bot,
|
||||
call: CallbackQuery,
|
||||
pay_method: str,
|
||||
pay_amount: float,
|
||||
pay_receipt: Optional[int] = None,
|
||||
pay_comment: Optional[str] = None,
|
||||
):
|
||||
user_id = call.from_user.id
|
||||
|
||||
@@ -338,19 +324,19 @@ async def refill_success(
|
||||
if response_success != "ok":
|
||||
return response_success
|
||||
|
||||
await call.message.answer(
|
||||
ded(f"""
|
||||
await call.message.answer(ded(f"""
|
||||
<b>💰 Вы пополнили баланс на сумму <code>{pay_amount}₽</code>. Удачи ❤️
|
||||
🧾 Чек: <code>#{receipt}</code></b>
|
||||
""")
|
||||
)
|
||||
"""))
|
||||
await delete_refill_message(bot, call.message.chat.id, call.message.message_id)
|
||||
|
||||
return response_success
|
||||
|
||||
|
||||
# Удаление сообщения со счётом
|
||||
async def delete_refill_message(bot: Bot, chat_id: Optional[int], message_id: Optional[int]) -> None:
|
||||
async def delete_refill_message(
|
||||
bot: Bot, chat_id: Optional[int], message_id: Optional[int]
|
||||
) -> None:
|
||||
if chat_id is None or message_id is None:
|
||||
return
|
||||
|
||||
@@ -362,16 +348,14 @@ async def delete_refill_message(bot: Bot, chat_id: Optional[int], message_id: Op
|
||||
|
||||
# Сохранение пополнения и уведомление админов
|
||||
async def save_refill_success(
|
||||
bot: Bot,
|
||||
user_id: int,
|
||||
pay_method: str,
|
||||
pay_amount: float,
|
||||
pay_receipt: int,
|
||||
pay_comment: str,
|
||||
bot: Bot,
|
||||
user_id: int,
|
||||
pay_method: str,
|
||||
pay_amount: float,
|
||||
pay_receipt: int,
|
||||
pay_comment: str,
|
||||
) -> Tuple[str, int]:
|
||||
if pay_method == "Yoomoney":
|
||||
text_method = "ЮMoney"
|
||||
elif pay_method == "Cryptobot":
|
||||
if pay_method == "Cryptobot":
|
||||
text_method = "CryptoBot"
|
||||
elif pay_method == "Stars":
|
||||
text_method = "Telegram Stars"
|
||||
@@ -401,7 +385,7 @@ async def save_refill_success(
|
||||
▪️ Пользователь: <b>@{get_user.user_login}</b> | <a href='tg://user?id={user_id}'>{get_user.user_name}</a> | <code>{user_id}</code>
|
||||
▪️ Сумма пополнения: <code>{pay_amount}₽</code> <code>({text_method})</code>
|
||||
▪️ Чек: <code>#{pay_receipt}</code>
|
||||
""")
|
||||
"""),
|
||||
)
|
||||
|
||||
return response_success, pay_receipt
|
||||
|
||||
Reference in New Issue
Block a user