# - *- coding: utf- 8 - *- from math import isfinite from aiogram import Router, Bot, F from aiogram.filters import StateFilter from aiogram.types import CallbackQuery, Message from tgbot.database import Settingsx, Userx from tgbot.keyboards.inline_admin import settings_status_finl, settings_finl 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 from tgbot.utils.misc_functions import send_admins, insert_tags router = Router(name=__name__) # Изменение данных @router.message(F.text == "🖍 Изменить данные") async def settings_data_edit(message: Message, bot: Bot, state: FSM, arSession: ARS): await state.clear() await message.answer( "🖍 Изменение данных бота", reply_markup=await settings_finl(), ) # Выключатели бота @router.message(F.text == "🕹 Выключатели") async def settings_status_edit(message: Message, bot: Bot, state: FSM, arSession: ARS): await state.clear() await message.answer( "🕹 Включение и выключение основных функций", reply_markup=await settings_status_finl(), ) ################################################################################ ################################## ВЫКЛЮЧАТЕЛИ ################################# # Включение/выключение тех работ @router.callback_query(F.data.startswith("settings_status_work:")) async def settings_status_work( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): get_status = call.data.split(":")[1] get_user = await Userx().get_required(user_id=call.from_user.id) await Settingsx().update(status_work=get_status) if get_status == "True": send_text = "🔴 Отправил бота на технические работы" else: send_text = "🟢 Вывел бота из технических работ" await send_admins( bot=bot, text=ded(f""" 👤 Администратор {get_user.user_name} {send_text} """), not_me=get_user.user_id, ) await call.message.edit_reply_markup(reply_markup=await settings_status_finl()) # Включение/выключение покупок @router.callback_query(F.data.startswith("settings_status_buy:")) async def settings_status_buy( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): get_status = call.data.split(":")[1] get_user = await Userx().get_required(user_id=call.from_user.id) await Settingsx().update(status_buy=get_status) if get_status == "True": send_text = "🟢 Включил покупки в боте" else: send_text = "🔴 Выключил покупки в боте" await send_admins( bot=bot, text=ded(f""" 👤 Администратор {get_user.user_name} {send_text} """), not_me=get_user.user_id, ) await call.message.edit_reply_markup(reply_markup=await settings_status_finl()) # Включение/выключение пополнений @router.callback_query(F.data.startswith("settings_status_refill:")) async def settings_status_refill( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): get_status = call.data.split(":")[1] get_user = await Userx().get_required(user_id=call.from_user.id) await Settingsx().update(status_refill=get_status) if get_status == "True": send_text = "🟢 Включил пополнения в боте" else: send_text = "🔴 Выключил пополнения в боте" await send_admins( bot, f"👤 Администратор {get_user.user_name}\n" f"{send_text}", not_me=get_user.user_id, ) await call.message.edit_reply_markup(reply_markup=await settings_status_finl()) # Включение/выключение реферальной системы @router.callback_query(F.data.startswith("settings_status_referral:")) async def settings_status_referral( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): get_status = call.data.split(":")[1] get_user = await Userx().get_required(user_id=call.from_user.id) await Settingsx().update(status_referral=get_status) if get_status == "True": send_text = "🟢 Включил реферальную систему в боте" else: send_text = "🔴 Выключил реферальную систему в боте" await send_admins( bot, f"👤 Администратор {get_user.user_name}\n" f"{send_text}", not_me=get_user.user_id, ) await call.message.edit_reply_markup(reply_markup=await settings_status_finl()) # Включение/выключение уведомлений о покупках @router.callback_query(F.data.startswith("settings_notification_buy:")) async def settings_notification_buy( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): get_status = call.data.split(":")[1] get_user = await Userx().get_required(user_id=call.from_user.id) await Settingsx().update(notification_buy=get_status) if get_status == "True": send_text = "🟢 Включил уведомления о покупках в боте" else: send_text = "🔴 Выключил уведомления о покупках в боте" await send_admins( bot, f"👤 Администратор {get_user.user_name}\n" f"{send_text}", not_me=get_user.user_id, ) await call.message.edit_reply_markup(reply_markup=await settings_status_finl()) # Включение/выключение уведомлений о пополнениях @router.callback_query(F.data.startswith("settings_notification_refill:")) async def settings_notification_refill( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): get_status = call.data.split(":")[1] get_user = await Userx().get_required(user_id=call.from_user.id) await Settingsx().update(notification_refill=get_status) if get_status == "True": send_text = "🟢 Включил уведомления о пополнениях в боте" else: send_text = "🔴 Выключил уведомления о пополнениях в боте" await send_admins( bot, f"👤 Администратор {get_user.user_name}\n" f"{send_text}", not_me=get_user.user_id, ) await call.message.edit_reply_markup(reply_markup=await settings_status_finl()) ################################################################################ ############################### ИЗМЕНЕНИЕ ДАННЫХ ############################### # Изменение FAQ @router.callback_query(F.data == "settings_edit_faq") async def settings_faq_edit(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): await state.clear() await state.set_state("here_settings_faq") await call.message.edit_text(ded(""" ❔ Введите новый текст для FAQ ❕ Вы можете использовать заготовленный синтаксис и HTML разметку: ▪️ {username} - логин пользоваля ▪️ {user_id} - айди пользователя ▪️ {firstname} - имя пользователя """)) # Изменение поддержки @router.callback_query(F.data == "settings_edit_support") async def settings_support_edit( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): await state.clear() await state.set_state("here_settings_support") await call.message.edit_text( "☎️ Отправьте юзернейм для поддержки\n" "❕ Юзернейм пользователя/бота/канала/чата", ) # Изменение отображения/скрытия категорий без товаров @router.callback_query(F.data.startswith("settings_edit_hide_category:")) async def settings_edit_hide_category( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): status = call.data.split(":")[1] await Settingsx().update(misc_hide_category=status) await call.message.edit_text( "🖍 Изменение данных бота", reply_markup=await settings_finl(), ) # Изменение отображения/скрытия позиций без товаров @router.callback_query(F.data.startswith("settings_edit_hide_position:")) async def settings_edit_hide_position( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): status = call.data.split(":")[1] await Settingsx().update(misc_hide_position=status) await call.message.edit_text( "🖍 Изменение данных бота", reply_markup=await settings_finl(), ) # Изменение метода добавления товаров @router.callback_query(F.data.startswith("settings_edit_method_prod:")) async def settings_edit_method_prod( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): method = call.data.split(":")[1] await Settingsx().update(misc_method_prod=method) await call.message.edit_text( "🖍 Изменение данных бота", reply_markup=await settings_finl(), ) ################################################################################ ################################ ПРИНЯТИЕ ДАННЫХ ############################### # Принятие FAQ @router.message(F.text, StateFilter("here_settings_faq")) async def settings_faq_get(message: Message, bot: Bot, state: FSM, arSession: ARS): get_message = await insert_tags(message.from_user.id, message.text) try: await (await message.answer(get_message)).delete() except Exception: bot_logger.debug("Некорректная HTML-разметка FAQ", exc_info=True) return await message.answer( "❌ Ошибка синтаксиса HTML\n" "❔ Введите новый текст для FAQ", ) await state.clear() await Settingsx().update(misc_faq=message.text) await message.answer( "🖍 Изменение данных бота", reply_markup=await settings_finl(), ) # Принятие поддержки @router.callback_query(F.data == "settings_edit_referral_bonus") async def settings_edit_referral_bonus( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): await state.clear() await state.set_state("here_settings_referral_bonus") await call.message.edit_text( "🤝 Введите фиксированный бонус за приглашение в рублях" ) @router.callback_query(F.data == "settings_edit_referral_percent") async def settings_edit_referral_percent( call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS ): await state.clear() await state.set_state("here_settings_referral_percent") await call.message.edit_text( "📈 Введите процент дохода с пополнений от 0 до 100" ) @router.message(F.text, StateFilter("here_settings_referral_bonus")) async def settings_referral_bonus_get( message: Message, bot: Bot, state: FSM, arSession: ARS ): if not is_number(message.text): return await message.answer( "❌ Введите неотрицательное число в рублях" ) referral_bonus = float(to_number(message.text)) if not isfinite(referral_bonus) or referral_bonus < 0: return await message.answer( "❌ Введите неотрицательное число в рублях" ) await Settingsx().update(referral_bonus_rub=round(referral_bonus, 2)) await state.clear() await message.answer( "🖍 Изменение данных бота", reply_markup=await settings_finl(), ) @router.message(F.text, StateFilter("here_settings_referral_percent")) async def settings_referral_percent_get( message: Message, bot: Bot, state: FSM, arSession: ARS ): if not is_number(message.text): return await message.answer("❌ Введите число от 0 до 100") referral_percent = float(to_number(message.text)) if not isfinite(referral_percent) or not 0 <= referral_percent <= 100: return await message.answer("❌ Введите число от 0 до 100") await Settingsx().update(referral_refill_percent=round(referral_percent, 2)) await state.clear() await message.answer( "🖍 Изменение данных бота", reply_markup=await settings_finl(), ) @router.message(F.text, StateFilter("here_settings_support")) async def settings_support_get(message: Message, bot: Bot, state: FSM, arSession: ARS): get_support = message.text if get_support.startswith("@"): get_support = get_support[1:] await Settingsx().update(misc_support=get_support) await state.clear() await message.answer( "🖍 Изменение данных бота", reply_markup=await settings_finl(), )