Files

284 lines
10 KiB
Python

# - *- 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.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(
"<b>🖍 Изменение данных бота</b>",
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(
"<b>🕹 Включение и выключение основных функций</b>",
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"""
👤 Администратор <a href='tg://user?id={get_user.user_id}'>{get_user.user_name}</a>
{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"""
👤 Администратор <a href='tg://user?id={get_user.user_id}'>{get_user.user_name}</a>
{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"👤 Администратор <a href='tg://user?id={get_user.user_id}'>{get_user.user_name}</a>\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"👤 Администратор <a href='tg://user?id={get_user.user_id}'>{get_user.user_name}</a>\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"👤 Администратор <a href='tg://user?id={get_user.user_id}'>{get_user.user_name}</a>\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("""
<b>❔ Введите новый текст для FAQ</b>
❕ Вы можете использовать заготовленный синтаксис и HTML разметку:
▪️ <code>{username}</code> - логин пользоваля
▪️ <code>{user_id}</code> - айди пользователя
▪️ <code>{firstname}</code> - имя пользователя
"""))
# Изменение поддержки
@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(
"<b>☎️ Отправьте юзернейм для поддержки</b>\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(
"<b>🖍 Изменение данных бота</b>",
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(
"<b>🖍 Изменение данных бота</b>",
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(
"<b>🖍 Изменение данных бота</b>",
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(
"<b>❌ Ошибка синтаксиса HTML</b>\n" "❔ Введите новый текст для FAQ",
)
await state.clear()
await Settingsx().update(misc_faq=message.text)
await message.answer(
"<b>🖍 Изменение данных бота</b>",
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(
"<b>🖍 Изменение данных бота</b>",
reply_markup=await settings_finl(),
)