Fix option value already exists errors

An error would occur if two movies with the same name and year were returned. This has been fixed, and the TMDB ID is also added to the dropdown description.
This commit is contained in:
Parker M. 2024-05-19 18:59:04 -05:00
parent b68c31c7e8
commit 4146a188f5
No known key found for this signature in database
GPG Key ID: 95CD2E0C7E329F2A
2 changed files with 41 additions and 47 deletions

View File

@ -13,8 +13,8 @@ class Request(commands.GroupCog, name="request"):
@app_commands.describe(name="Name of the movie to add")
async def request_movie(self, interaction: discord.Interaction, name: str):
"Request a movie to be added to the Radarr library"
get_movies_response = get_movies(name)
if get_movies_response == "NO RESULTS":
movie_data = get_movies(name)
if movie_data == "NO RESULTS":
embed = discord.Embed(
title="No Results",
description="No results were found for the given movie name. If you are unable to find the movie, contact an administrator to have it added manually.",
@ -22,7 +22,7 @@ class Request(commands.GroupCog, name="request"):
)
return await interaction.response.send_message(embed=embed, ephemeral=True)
if get_movies_response == "ALREADY ADDED":
if movie_data == "ALREADY ADDED":
embed = discord.Embed(
title="Already Added",
description="The movie you are trying to add has already been added to the Radarr library.\n\nYou can check the download status of your requests movies by running the `/status` command.",
@ -30,14 +30,12 @@ class Request(commands.GroupCog, name="request"):
)
return await interaction.response.send_message(embed=embed, ephemeral=True)
movies, tmdb_ids = get_movies_response
embed = discord.Embed(
title="Results Found",
description="Please select the movie you would like to add from the dropdown below.",
color=0xD01B86
)
view = AddMovieView(movies, tmdb_ids)
view = AddMovieView(movie_data)
await interaction.response.send_message(embed=embed, view=view, ephemeral=True)
@app_commands.command(name="show")

View File

@ -30,25 +30,26 @@ def get_movies(name: str):
if response[0]["added"] != "0001-01-01T05:51:00Z":
return "ALREADY ADDED"
# Add the top 5 movies and their years to a list of dictionaries and their respective tmdbIds
movies = [
{"title": response[i]["title"], "year": response[i]["year"]}
for i in range(min(5, len(response)))
]
tmdb_ids = {}
movie_data = []
for i in range(min(5, len(response))):
tmdb_ids[response[i]["tmdbId"]] = {"description": response[i]["overview"]}
# Try to choose from one of the usual 2 poster images available,
# if not, then just set the "poster" to None
movie_data.append(
{
"title": response[i]["title"],
"year": response[i]["year"],
"tmdbId": response[i]["tmdbId"],
"description": response[i]["overview"],
}
)
try:
try:
tmdb_ids[response[i]["tmdbId"]]["remotePoster"] = response[i]["images"][0]["remoteUrl"]
movie_data[i]["remotePoster"] = response[i]["images"][0]["remoteUrl"]
except IndexError:
tmdb_ids[response[i]["tmdbId"]]["remotePoster"] = response[i]["images"][1]["remoteUrl"]
movie_data[i]["remotePoster"] = response[i]["images"][1]["remoteUrl"]
except IndexError:
tmdb_ids[response[i]["tmdbId"]]["remotePoster"] = None
movie_data[i]["remotePoster"] = None
return movies, tmdb_ids
return movie_data
"""
@ -79,39 +80,40 @@ def add_movie(tmdb_id: int):
class AddMovieView(discord.ui.View):
def __init__(self, movies: list, tmdb_ids: dict, *, timeout=180.0):
def __init__(self, movie_data: list, *, timeout=180.0):
super().__init__(timeout=timeout)
self.add_item(AddMovieDropdown(movies, tmdb_ids))
self.add_item(AddMovieDropdown(movie_data))
class AddMovieDropdown(discord.ui.Select):
def __init__(self, movies: list, tmdb_ids: dict, *, timeout=180.0):
self.movies = movies
self.tmdb_ids = tmdb_ids
def __init__(self, movie_data: list, *, timeout=180.0):
self.movie_data = movie_data
# Create the options list to show the movie title, year, and tmdbId
options = []
for i in range(len(movie_data)):
options.append(
discord.SelectOption(
label=f"{movie_data[i]['title']} ({movie_data[i]['year']})",
description=f"TMDB ID: {movie_data[i]['tmdbId']}",
value=i,
)
)
super().__init__(
placeholder="Select from the dropdown",
options=[
discord.SelectOption(label=f"{movie['title']} ({movie['year']})")
for movie in movies
],
options=options,
)
async def callback(self, interaction: discord.Interaction):
# Convert the options to a list of strings and get the index of the selected option
string_options = [option.label for option in self.options]
index = string_options.index(interaction.data["values"][0])
# Convert the tmdbIds dictionary to a list and get the tmdbId of the selected movie
tmdb_id_list = list(self.tmdb_ids.keys())
tmdb_id = tmdb_id_list[index]
tmdbFull = self.tmdb_ids[tmdb_id]
index = int(self.values[0])
embed = discord.Embed(
title="Is this the movie you want to add?",
description=f"**{self.movies[index]['title']}**\n\n{tmdbFull['description']}",
color=0xD01B86
description=f"**{self.movie_data[index]['title']}**\n\n{self.movie_data[index]['description']}",
color=0xD01B86,
)
embed.set_image(url=tmdbFull["remotePoster"])
view = RequestButtonView(tmdb_id)
embed.set_image(url=self.movie_data[index]["remotePoster"])
view = RequestButtonView(self.movie_data[index]["tmdbId"])
await interaction.response.edit_message(embed=embed, view=view)
@ -131,15 +133,9 @@ class RequestButtonView(discord.ui.View):
embed = discord.Embed(
title="Movie Requested",
description=f"**{movie_title}** has been requested and will be added to the Radarr library. You can check the download status of your requested movies by running the `/status` command. Please wait ~5 minutes for Radarr to find a download for the movie.",
color=0xD01B86
color=0xD01B86,
)
await interaction.response.edit_message(embed=embed, view=None)
# # Add the movie to the Radarr library
# requests.post(
# f"{RADARR_HOST_URL}/api/v3/command",
# headers=RADARR_HEADERS,
# json={"name": "MoviesSearch", "movieIds": movie_id},
# )
# Keep track of the movie for the `/status` command
db = sqlite3.connect("cordarr.db")
@ -158,6 +154,6 @@ class RequestButtonView(discord.ui.View):
embed = discord.Embed(
title="Request Cancelled",
description="Request has been cancelled. If you would like to request a different movie, run the `/request movie` command again.",
color=0xD01B86
color=0xD01B86,
)
await interaction.response.edit_message(embed=embed, view=None)