# This file is part of python-cinema-club-bot # contributed in 2024 by Mikhail Kirillov (~w96k) # To the extent possible under law, the author(s) have dedicated all copyright # and related and neighboring rights to this software to the public domain # worldwide. This software is distributed without any warranty. # You should have received a copy of the CC0 Public Domain Dedication along # with this software. If not, see: # from telegram import Update, error from telegram.ext import ContextTypes from imdb import Cinemagoer from utils import context_init, choose_next_user, normalize_username, \ init_new_event from predicates import has_finished_movie from strings import MOVIE_NOT_PROVIDED, EXPECTED_ONE_MOVIE, \ MOVIE_ANOTHER_USER, FETCHING_MOVIE, FETCHING_ERROR, \ MOVIE_REMOVE, MOVIE_SET, MOVIES_LIST, NO_MOVIES, ADD_MORE_USERS imdb = Cinemagoer() async def movie( update: Update, context: ContextTypes.DEFAULT_TYPE ) -> None: context_init(context) users = context.chat_data["users"] if users == []: raise error.TelegramError(ADD_MORE_USERS) chooser = users[0] username = update.message.from_user.username if has_finished_movie(context): users = context.chat_data["users"] = choose_next_user(context) if "@"+username != chooser: raise error.TelegramError(MOVIE_ANOTHER_USER.format(user=chooser)) if context.args == []: raise error.TelegramError(MOVIE_NOT_PROVIDED) if len(context.args) > 1: raise error.TelegramError(EXPECTED_ONE_MOVIE) movie_id = context.args[0] await update.message.reply_text(FETCHING_MOVIE.format(id=movie_id)) try: movie = imdb.get_movie(movie_id) except: raise error.TelegramError(FETCHING_ERROR) movie_dict = dict( title=movie.data.get("title"), id=movie.getID(), user=update.effective_user.username, rating=movie.data.get("rating"), genres=movie.data.get("genres"), runtime=movie.data.get("runtimes"), ) if len(context.chat_data["movies"]) > 0 and \ context.chat_data["movies"][-1]["user"] == username: context.chat_data["movies"][-1] = movie_dict last_event = context.chat_data["events"][-1] \ if len(context.chat_data["events"]) > 0 else None if last_event and context.chat_data["events"][-1]["user"] == username: last_event["title"] = movie_dict["title"] context.chat_data["events"][-1] = last_event else: init_new_event(context, users[0], movie_dict["title"]) context.chat_data["movies"].append(movie_dict) await update.message.reply_text( MOVIE_SET.format(title=movie_dict["title"], user=movie_dict["user"]) ) async def movies( update: Update, context: ContextTypes.DEFAULT_TYPE ) -> None: context_init(context) movies = context.chat_data["movies"] movies_formatted: str = "" for movie in movies: movies_formatted += MOVIES_LIST.format( title=movie["title"], user=movie["user"] ) if movies_formatted == "": movies_formatted = NO_MOVIES await update.message.reply_text(movies_formatted)