async def movie_details(self, ctx: SlashContext, title: str): try: await ctx.defer() details = self.movie.get_movie_rates(title) embed_msg = embeds.Embed( title="{} - {}".format(details["name"], details["averageRate"]), description="seen : " + self.__convert_movie_date__(details["seen"]), colour=EMBEDDED_COLOR) for detail in details["spectatorRates"]: embed_msg.add_field(name=detail["spectator"], value=detail["rate"], inline=False) await utils.send_embedded(self.movie_channel(), embed_msg) await utils.send_empty_message(ctx) except msqbot_error.MsqDataBaseError: logging.exception(ERROR_PREFIX, exc_info=True) await utils.send_error(ctx, msqbot_error.MSQbotError().message) except movie_error.NoMovieFound as e: await utils.send_error(ctx, e.message) except commands.errors.MissingRequiredArgument: await utils.send_error(ctx, msqbot_error.NoParameterGiven().message)
async def too_watch_movies(self, ctx: SlashContext): try: await ctx.defer() movies = self.movie.get_unseen_movie() paginator = CustomPaginator() paged_movies = paginator.divide_into_page(movies) embeds_pages = [] for page in paged_movies: embed_msg = embeds.Embed( title="To Watch List", description="movies yet to be seen", colour=EMBEDDED_COLOR).set_footer(text="{}/{}".format( paged_movies.index(page) + 1, paginator.nb_pages + 1)) for movie in page: embed_msg.add_field(name=movie["name"], value="added: {}".format( self.__convert_movie_date__( movie["added"])), inline=False) embeds_pages.append(embed_msg) await paginator.start(ctx, embeds_pages) await utils.send_empty_message(ctx) except msqbot_error.MsqDataBaseError: logging.exception(ERROR_PREFIX, exc_info=True) await utils.send_error(ctx, msqbot_error.MSQbotError().message) except movie_error.NoUnseenMovieFound as e: await utils.send_success(ctx, e.message)
async def movie_list(self, ctx: SlashContext, sort: str = None, direction: str = None): try: await ctx.defer() # try all combination to avoid sending incomplete query movies = None if sort is None and direction is None: movies = self.movie.get_list_movies_by() elif sort != None and direction is None: movies = self.movie.get_list_movies_by(sort=sort) elif direction != None and sort is None: movies = self.movie.get_list_movies_by(growth=direction) else: movies = self.movie.get_list_movies_by(sort, direction) paginator = CustomPaginator() paged_movies = paginator.divide_into_page(movies) embeds_pages = [] for page in paged_movies: message = embeds.Embed( title="Movie List", description="sorted by {}".format( sort if sort is not None else "default"), colour=EMBEDDED_COLOR).set_footer(text="{}/{}".format( paged_movies.index(page) + 1, paginator.nb_pages + 1)) for movie in page: message.add_field( name="{} - {}".format( movie["name"], movie["average_rate"] if movie["average_rate"] is not None else "-"), value="added: {} | seen: {}".format( self.__convert_movie_date__(movie["added"]), self.__convert_movie_date__(movie["seen"])), inline=False) embeds_pages.append(message) await paginator.start(ctx, embeds_pages) await utils.send_empty_message(ctx) except msqbot_error.MSQbotError: logging.exception(ERROR_PREFIX, exc_info=True) await utils.send_error(ctx, msqbot_error.MSQbotError().message) except movie_error.NoMovieFound as e: await utils.send_success(ctx, e.message) except commands.errors.MissingRequiredArgument: await utils.send_error(ctx, msqbot_error.NoParameterGiven().message)
async def add_new_movie(self, ctx: SlashContext, title: str): try: await ctx.defer() self.movie.add_movie(title) await utils.send_success( ctx, "'{}' has been added to the list".format(title)) except msqbot_error.MSQbotError: logging.exception(ERROR_PREFIX, exc_info=True) await utils.send_error(msqbot_error.MSQbotError().message) except commands.errors.MissingRequiredArgument: await utils.send_error(ctx, msqbot_error.NoParameterGiven().message)
async def change_movie_name(self, ctx: SlashContext, current_title: str, new_title: str): try: await ctx.defer() self.movie.change_movie_name(current_title, new_title) await utils.send_success( ctx, "The changed from '{}' to '{}'".format(current_title, new_title)) except msqbot_error.MSQbotError: logging.exception(ERROR_PREFIX, exc_info=True) await utils.send_error(ctx, msqbot_error.MSQbotError().message) except commands.errors.MissingRequiredArgument: await utils.send_error(ctx, msqbot_error.NoParameterGiven().message)
async def random_movie(self, ctx): try: random_movie = self.movie.get_random_movie() embed_msg = embeds.Embed(colour=EMBEDDED_COLOR) embed_msg.add_field(name=random_movie["name"], value="added: {}".format( self.__convert_movie_date__( random_movie["added"]))) await utils.send_embedded(self.movie_channel(), embed_msg) await utils.send_empty_message(ctx) except msqbot_error.MsqDataBaseError: logging.exception(ERROR_PREFIX, exc_info=True) await utils.send_error(ctx, msqbot_error.MSQbotError().message) except movie_error.NoUnseenMovieFound as e: await utils.send_success(ctx, e.message)
async def rate_movie(self, ctx: SlashContext, title: str, rate: str): try: await ctx.defer() movie_rate = float(rate) spectator_id = int(ctx.author.id) spectator_name = ctx.author.name self.movie.rate_movie(movie_rate, spectator_id, spectator_name, title) await utils.reply_interaction( ctx, "{} gave a rate of **{}/10** to **{}**".format( spectator_name, movie_rate, title)) except msqbot_error.MSQbotError: logging.exception(ERROR_PREFIX, exc_info=True) await utils.send_error(ctx, msqbot_error.MSQbotError().message) except movie_error.InvalidRate as e: await utils.send_error(ctx, e.message) except commands.errors.MissingRequiredArgument: await utils.send_error(ctx, msqbot_error.NoParameterGiven().message)
async def spectator_details(self, ctx: SlashContext, spectator: str): try: await ctx.defer() spectator_id = utils.get_id_from_tag(self.bot, spectator) details = self.movie.get_spectator_details(spectator_id) paginator = CustomPaginator() paged_movies = paginator.divide_into_page( details["spectatorRates"]) embeds_pages = [] for page in paged_movies: embed_msg = embeds.Embed( title=details["name"], description="average rate : " + str(details["averageRate"]), colour=EMBEDDED_COLOR).set_footer(text="{}/{}".format( paged_movies.index(page) + 1, paginator.nb_pages + 1)) for detail in page: embed_msg.add_field(name=detail["movie"], value=detail["rate"], inline=False) embeds_pages.append(embed_msg) await paginator.start(ctx, embeds_pages) await utils.send_empty_message() except msqbot_error.MsqDataBaseError: logging.exception(ERROR_PREFIX, exc_info=True) await utils.send_error(ctx, msqbot_error.MSQbotError().message) except movie_error.NoMovieFound as e: await utils.send_error(ctx, e.message) except commands.errors.MissingRequiredArgument: await utils.send_error(ctx, msqbot_error.NoParameterGiven().message)