# - *- coding: utf- 8 - *- from aiogram import Router, Bot, F from aiogram.filters import StateFilter from aiogram.types import Message, CallbackQuery from tgbot.database import Settingsx, Positionx, Categoryx from tgbot.keyboards.inline_user import user_support_finl from tgbot.keyboards.inline_user_page import prod_item_position_swipe_fp from tgbot.keyboards.reply_main import menu_frep from tgbot.utils.const_functions import ded from tgbot.utils.misc.bot_filters import IsBuy, IsRefill, IsWork from tgbot.utils.misc.bot_models import FSM, ARS 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", ) # Игнор-колбэки пополнений prohibit_refill = ( "user_refill", "user_refill_method", "Pay:Cryptobot", "Pay:", ) router = Router(name=__name__) ################################################################################ ########################### СТАТУС ТЕХНИЧЕСКИХ РАБОТ ########################### # Фильтр на технические работы - сообщение @router.message(IsWork()) async def filter_work_message(message: Message, bot: Bot, state: FSM, arSession: ARS): await state.clear() get_settings = await Settingsx().get() if get_settings.misc_support != "None": return await message.answer( "⛔ Бот находится на технических работах", reply_markup=user_support_finl(get_settings.misc_support), ) await message.answer("⛔ Бот находится на технических работах") # Фильтр на технические работы - колбэк @router.callback_query(IsWork()) async def filter_work_callback( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): await state.clear() await call.answer("⛔ Бот находится на технических работах.", True) ################################################################################ ################################# СТАТУС ПОКУПОК ############################### # Фильтр на доступность покупок - сообщение @router.message(IsBuy(), F.text == "🎁 Купить") @router.message(IsBuy(), StateFilter("here_item_count")) async def filter_buy_message(message: Message, bot: Bot, state: FSM, arSession: ARS): await state.clear() await message.answer("⛔ Покупки временно отключены") # Фильтр на доступность покупок - колбэк @router.callback_query(IsBuy(), F.data.startswith(prohibit_buy)) async def filter_buy_callback( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): await state.clear() await call.answer("⛔ Покупки временно отключены.", True) ################################################################################ ############################### СТАТУС ПОПОЛНЕНИЙ ############################## # Фильтр на доступность пополнения - сообщение @router.message(IsRefill(), StateFilter("here_refill_amount")) async def filter_refill_message(message: Message, bot: Bot, state: FSM, arSession: ARS): await state.clear() await message.answer("⛔ Пополнение временно отключено") # Фильтр на доступность пополнения - колбэк @router.callback_query(IsRefill(), F.data.startswith(prohibit_refill)) async def filter_refill_callback( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): await state.clear() await call.answer("⛔ Пополнение временно отключено.", True) ################################################################################ #################################### ПРОЧЕЕ #################################### # Открытие главного меню @router.message(F.text.in_(("🔙 Главное меню", "/start"))) async def main_start(message: Message, bot: Bot, state: FSM, arSession: ARS): await state.clear() await message.answer( ded(""" 🔸 Бот готов к использованию. 🔸 Если не появились вспомогательные кнопки 🔸 Введите /start """), reply_markup=menu_frep(message.from_user.id), ) # Открытие диплинков @router.message(F.text.startswith("/start ")) async def main_start_deeplink(message: Message, bot: Bot, state: FSM, arSession: ARS): deepling_args = message.text[7:] if deepling_args.startswith("p_"): position_id_raw = deepling_args[2:] if not position_id_raw.isdigit(): return position_id = int(position_id_raw) get_position = await Positionx().get(position_id=position_id) if get_position is not None: await position_open_user(bot, message.from_user.id, position_id, 0) elif deepling_args.startswith("c_"): category_id_raw = deepling_args[2:] if not category_id_raw.isdigit(): return category_id = int(category_id_raw) get_category = await Categoryx().get(category_id=category_id) if get_category is not None: await message.answer( f"🎁 Текущая категория: {get_category.category_name}", reply_markup=await prod_item_position_swipe_fp(0, category_id), )