/
HitriyKrab
/
FilmsBot
Обзор
Документация
Войти
/
HitriyKrab
/
FilmsBot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
SearchingFilmsBot/handlers.py
161 строка
6 KB
ХитрыйКраб
first_commit
23 янв 2026, 19:24
23 янв 2026, 19:24
574bba1
Код
Авторство
О чём код?
from aiogram import types, Router from aiogram.filters import Command from database import get_or_create_user, add_search_history, get_user_history from movie_api import (search_movies_by_title, search_movies_by_low_rating, search_movies_by_rating, search_movies_by_country, search_movies_by_year, search_movies_by_director) router = Router() @router.message(Command("start")) async def start_command(message: types.Message): await message.answer( 'Привет! Используйте команды: /movie_search, /movie_by_rating, /low_budget_movie, /high_budget_movie, /history' ) @router.message(Command("movie_search")) async def movie_search(message: types.Message, command: Command): args = command.args if not args: await message.answer('Пожалуйста, укажите название фильма после команды.') return # Для простоты: формат "название|жанр|кол-во" parts = args.split('|') title = parts[0].strip() genre = parts[1].strip() if len(parts) > 1 else None count = int(parts[2]) if len(parts) > 2 and parts[2].isdigit() else 5 results = search_movies_by_title(title, genre, count) if not results: await message.answer('Фильмы не найдены.') return user = get_or_create_user(message.from_user.id) messages = [] for movie in results: add_search_history(user, args, movie) text = f"""Название: {movie.get('Title')} Описание: {movie.get('Plot')} Рейтинг: {movie.get('imdbRating')} Год производства: {movie.get('Year')} Жанр: {movie.get('Genre')} Возрастной рейтинг: {movie.get('Rated')} Постер: {movie.get('Poster')}""" messages.append(text) for msg in messages: await message.answer(msg) @router.message(Command("history")) async def history(message: types.Message): user = get_or_create_user(message.from_user.id) records = get_user_history(user) if not records.exists(): await message.answer('История пуста.') return for rec in records: text = f"""Дата поиска: {rec.date.strftime("%Y-%m-%d %H:%M")} Название: {rec.movie_title} Описание: {rec.description} Рейтинг: {rec.rating} Год производства: {rec.year} Жанр: {rec.genre} Возрастной рейтинг: {rec.age_rating} Постер: {rec.poster}""" await message.answer(text) @router.message(Command("movie_by_rating")) async def movie_by_rating(message: types.Message, command: Command): try: min_rating = float(command.args) # Запрос к API с фильтром по рейтингу results = search_movies_by_rating(min_rating, max_results=5) if not results: await message.answer('Фильмы не найдены.') return for movie in results: text = f"""Название: {movie.get('Title')} Описание: {movie.get('Plot')} Рейтинг: {movie.get('imdbRating')} Год производства: {movie.get('Year')} Жанр: {movie.get('Genre')} Возрастной рейтинг: {movie.get('Rated')} Постер: {movie.get('Poster')}""" await message.answer(text) except (ValueError, TypeError): await message.answer('Укажите число после команды, например: /movie_by_rating 7') @router.message(Command("low_rating_movie")) async def low_rating_movie(message: types.Message, command: Command): try: max_rating = float(command.args) results = search_movies_by_low_rating(max_rating, max_results=5) if not results: await message.answer('Фильмы не найдены.') return for movie in results: text = f"""{movie.get('Poster')} Название: {movie.get('Title')} Описание: {movie.get('Plot')} Рейтинг: {movie.get('imdbRating')} Год производства: {movie.get('Year')} Жанр: {movie.get('Genre')} Возрастной рейтинг: {movie.get('Rated')}""" await message.answer(text) except (ValueError, TypeError): await message.answer('Укажите число после команды, например: /low_rating_movie 5') @router.message(Command("country_search")) async def country_search(message: types.Message, command: Command): country = command.args if not country: await message.answer('Укажите страну, например: /country_search Россия') return results = search_movies_by_country(country) # выводите результаты аналогично другим командам @router.message(Command("year_search")) async def year_search(message: types.Message, command: Command): year = command.args if not year or not year.isdigit(): await message.answer('Укажите год выпуска, например: /year_search 2020') return results = search_movies_by_year(int(year), max_results=5) if not results: await message.answer('Фильмы не найдены.') return for movie in results: text = f"""Название: {movie.get('Title')} Описание: {movie.get('Plot')} Рейтинг: {movie.get('imdbRating')} Год выпуска: {movie.get('Year')} Жанр: {movie.get('Genre')} Возрастной рейтинг: {movie.get('Rated')} Постер: {movie.get('Poster')}""" await message.answer(text) @router.message(Command("director_search")) async def director_search(message: types.Message, command: Command): director = command.args if not director: await message.answer('Укажите режиссера, например: /director_search Нолан') return results = search_movies_by_director(director, max_results=5) if not results: await message.answer('Фильмы не найдены.') return for movie in results: text = f"""Название: {movie.get('Title')} Описание: {movie.get('Plot')} Рейтинг: {movie.get('imdbRating')} Год выпуска: {movie.get('Year')} Режиссер: {movie.get('Director')} Жанр: {movie.get('Genre')} Возрастной рейтинг: {movie.get('Rated')} Постер: {movie.get('Poster')}""" await message.answer(text)