from sqlite3 import IntegrityError
from typing import Union
from aiogram import Dispatcher, F, types
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.types import Message, CallbackQuery
from aiogram.utils.markdown import hbold
from bot.core_bot import Form, add_region_to_database, disable_buttons
from bot.decorators import user_permission
from bot.keyboards.inline_keyboard import RetailerKeyboards, CancelActionCallback, RetailerCallback, SalesDataKeyboards, UnloadDataKeyboards
async def return_to_main_menu(event: Union[Message, CallbackQuery], message_text: str, state: FSMContext=None):
if state:
await state.clear()
keyboard = RetailerKeyboards().create_main_keyboard()
if isinstance(event, CallbackQuery):
await event.message.edit_reply_markup(reply_markup=disable_buttons(event.message.reply_markup))
await event.message.answer(
text=message_text,
reply_markup=keyboard
)
elif isinstance(event, Message):
# await event.message.edit_reply_markup(reply_markup=disable_buttons(event.message.reply_markup))
await event.answer(
text=message_text,
reply_markup=keyboard
)
else:
raise ValueError("Unsupported event type passed to return_to_main_menu.")
class GeneralControlHandler:
def __init__(self, dp: Dispatcher):
self.dp = dp
self.register_handlers()
def register_handlers(self):
@self.dp.message(Command("activate_menu"))
@user_permission
async def activate_menu(message: Message) -> None:
"""Handler for showing retailers"""
main_keyboard = RetailerKeyboards().create_main_keyboard()
await message.answer(
"Главное меню",
reply_markup=main_keyboard
)
@self.dp.callback_query(CancelActionCallback.filter(F.foo == 'cancel_action'))
async def command_cancel_action(
query: CallbackQuery,
state: FSMContext,
):
await return_to_main_menu(query, message_text='Действие отменено. Возвращение в главное меню:', state=state)
@self.dp.message(Command("id"))
async def command_id(message: types.Message) -> None:
"""
This handler receives messages with `/id` command
"""
if message.chat.id == message.from_user.id:
response_text = f"Ваш id: {hbold(message.from_user.id)}"
else:
response_text = (
f"ID Группы: {hbold(message.chat.id)}\n"
f"Ваш id: {hbold(message.from_user.id)}"
)
await message.answer(text=response_text, parse_mode='HTML')
@self.dp.callback_query(RetailerCallback.filter(F.foo == 'remove_data_menu'))
@user_permission
async def command_remove_data_menu(
query: CallbackQuery,
state: FSMContext,
):
message = "Добро пожаловать в меню удаления данных"
keyboard = SalesDataKeyboards().delete_data_keyboard()
await query.message.edit_text(
text=message,
reply_markup=keyboard
)
# await return_to_main_menu(query, message_text='Действие отменено. Возвращение в главное меню:', state=state)
#download_data_menu
@self.dp.callback_query(RetailerCallback.filter(F.foo == 'download_data_menu'))
@user_permission
async def command_download_data_menu(
query: CallbackQuery,
state: FSMContext,
):
message = "Добро пожаловать в меню выгрузки данных!"
keyboard = UnloadDataKeyboards().unload_data_keyboard()
await query.message.edit_text(
text=message,
reply_markup=keyboard
)
#Кнопка спецификации
@self.dp.callback_query(CancelActionCallback.filter(F.foo == 'cancel_action'))
async def command_cancel_action(
query: CallbackQuery,
state: FSMContext,
):
await return_to_main_menu(query, message_text='Действие отменено. Возвращение в главное меню:',
state=state)