# - *- coding: utf- 8 - *- 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.services.api_discord import DiscordDJ, DiscordAPI from tgbot.utils.const_functions import ded 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_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(), ) # Изменение дискорд вебхука @router.callback_query(F.data == "settings_edit_discord_webhook") async def settings_discord_edit(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): await state.clear() get_discord_public_webhook = await ( DiscordDJ( arSession=arSession, bot=bot, ) ).export_webhook() await state.set_state("here_settings_discord_webhook") await call.message.edit_text( ded(f""" 🧿 Отправьте новый вебхук дискорда ❕ Для удаления вебхука введите 0 ❕ Вы можете использовать публичный вебхук, но ответственность за его использование лежит только на вас ▪️ Публичный вебхук: {get_discord_public_webhook} """) ) # Изменение текстового хостинга по умолчанию @router.callback_query(F.data == "settings_edit_hosting_text") async def settings_edit_hosting_text(call: CallbackQuery, bot: Bot, state: FSM, arSession: ARS): get_settings = await Settingsx().get() if get_settings.misc_hosting_text == "telegraph": await Settingsx().update(misc_hosting_text="pastie") elif get_settings.misc_hosting_text == "pastie": await Settingsx().update(misc_hosting_text="friendpaste") elif get_settings.misc_hosting_text == "friendpaste": await Settingsx().update(misc_hosting_text="snippet") elif get_settings.misc_hosting_text == "snippet": await Settingsx().update(misc_hosting_text="telegraph") 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.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(), ) # Принятие дискорд вебхука @router.message(F.text, StateFilter("here_settings_discord_webhook")) async def settings_discord_get(message: Message, bot: Bot, state: FSM, arSession: ARS): get_discord_webhook = message.text # Удаление вебхука if get_discord_webhook == "0": await Settingsx().update( misc_discord_webhook_url="None", misc_discord_webhook_name="None", ) return await message.answer( "⚙️ Настройки бота", reply_markup=await settings_finl(), ) # Добавление нового вебхука cache_message = await message.answer("♻️ Проверка дискорд вебхука..") if "api" in get_discord_webhook and "webhooks" in get_discord_webhook: discord_webhook_status, discord_webhook_name = await ( await DiscordAPI.connect( bot=bot, arSession=arSession, update=message, webhook_url=get_discord_webhook, skipping_error=True, ) ).check() if discord_webhook_status: await state.clear() await Settingsx().update( misc_discord_webhook_url=message.text, misc_discord_webhook_name=discord_webhook_name, ) return await cache_message.edit_text( "⚙️ Настройки бота", reply_markup=await settings_finl(), ) # Обработка ошибки добавления вебхука get_discord_public_webhook = await ( DiscordDJ( arSession=arSession, bot=bot, ) ).export_webhook() await cache_message.edit_text( ded(f""" ❌ Указан некорректный вебхук ➖➖➖➖➖➖➖➖➖➖ 🧿 Отправьте новый вебхук дискорда ❕ Для удаления вебхука введите 0 ❕ Вы можете использовать публичный вебхук, но ответственность за его использование лежит только на вас ▪️ Публичный вебхук: {get_discord_public_webhook} """) )