Третий стрим

This commit is contained in:
2024-03-17 21:28:49 +04:00
parent a498a04481
commit 17cd64bdbc
29 changed files with 618 additions and 50 deletions

View File

@ -0,0 +1,60 @@
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()