from aiogram.fsm.context import FSMContext from aiogram.types import Message, CallbackQuery from app.callbacks.callback_favorites import AddFavoriteCallback, DelFavoriteCallback from app.keyboards.favorites_keyboards import favorite_list, add_favorite_inline, add_del_favorite_inline from app.utils.db_actions import get_user, create_user, get_favorites, add_favorite, del_favorite from app.utils.statesform import FavoritesCommandsSteps async def favorites_command(message: Message): user = await get_user(message.from_user.id) if not user: user = await create_user(message.from_user.id) favorites = await get_favorites(user.id) if not favorites: inline_keyboard = await add_favorite_inline(user) await message.answer("Нет команд в избранном.", reply_markup=inline_keyboard) else: inline_keyboard = await add_del_favorite_inline(user) await message.answer("Выберите действие:", reply_markup=inline_keyboard) keyboard = await favorite_list(favorites) await message.answer("Выберите команду из списка ниже:", reply_markup=keyboard) async def add_favorite_callback(callback: CallbackQuery, callback_data: AddFavoriteCallback, state: FSMContext): await callback.message.answer("Введите команду.") await state.set_data({"user_id": callback_data.user_id}) await state.set_state(FavoritesCommandsSteps.ADD) async def add_favorite_state(message: Message, state: FSMContext): data = await state.get_data() new_command = await add_favorite(user_id=data.get("user_id"), command=message.text) await message.answer(f"Добавлена команда: {new_command.command}") await state.clear() async def del_favorite_callback(callback: CallbackQuery, callback_data: DelFavoriteCallback, state: FSMContext): favorites = await get_favorites(callback_data.user_id) favorites_text = "\n".join([f"{i}: {favorite.command}" for i, favorite in enumerate(favorites)]) await callback.message.answer(f"Введите номер команды для удаления:\n{favorites_text}") await state.set_data({"favorites": favorites}) await state.set_state(FavoritesCommandsSteps.DEL) async def del_favorite_state(message: Message, state: FSMContext): data = await state.get_data() try: choice = int(message.text) except ValueError: await message.answer("Введите число!") await state.set_state(FavoritesCommandsSteps.DEL) else: favorite = data.get("favorites")[choice] await del_favorite(favorite.id) await message.answer("Команда успешно удалена.") await state.clear()