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:
parent
b68c31c7e8
commit
4146a188f5
@ -13,8 +13,8 @@ class Request(commands.GroupCog, name="request"):
|
|||||||
@app_commands.describe(name="Name of the movie to add")
|
@app_commands.describe(name="Name of the movie to add")
|
||||||
async def request_movie(self, interaction: discord.Interaction, name: str):
|
async def request_movie(self, interaction: discord.Interaction, name: str):
|
||||||
"Request a movie to be added to the Radarr library"
|
"Request a movie to be added to the Radarr library"
|
||||||
get_movies_response = get_movies(name)
|
movie_data = get_movies(name)
|
||||||
if get_movies_response == "NO RESULTS":
|
if movie_data == "NO RESULTS":
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="No Results",
|
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.",
|
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)
|
return await interaction.response.send_message(embed=embed, ephemeral=True)
|
||||||
|
|
||||||
if get_movies_response == "ALREADY ADDED":
|
if movie_data == "ALREADY ADDED":
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Already Added",
|
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.",
|
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)
|
return await interaction.response.send_message(embed=embed, ephemeral=True)
|
||||||
|
|
||||||
movies, tmdb_ids = get_movies_response
|
|
||||||
|
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Results Found",
|
title="Results Found",
|
||||||
description="Please select the movie you would like to add from the dropdown below.",
|
description="Please select the movie you would like to add from the dropdown below.",
|
||||||
color=0xD01B86
|
color=0xD01B86
|
||||||
)
|
)
|
||||||
view = AddMovieView(movies, tmdb_ids)
|
view = AddMovieView(movie_data)
|
||||||
await interaction.response.send_message(embed=embed, view=view, ephemeral=True)
|
await interaction.response.send_message(embed=embed, view=view, ephemeral=True)
|
||||||
|
|
||||||
@app_commands.command(name="show")
|
@app_commands.command(name="show")
|
||||||
|
@ -30,25 +30,26 @@ def get_movies(name: str):
|
|||||||
if response[0]["added"] != "0001-01-01T05:51:00Z":
|
if response[0]["added"] != "0001-01-01T05:51:00Z":
|
||||||
return "ALREADY ADDED"
|
return "ALREADY ADDED"
|
||||||
|
|
||||||
# Add the top 5 movies and their years to a list of dictionaries and their respective tmdbIds
|
movie_data = []
|
||||||
movies = [
|
|
||||||
{"title": response[i]["title"], "year": response[i]["year"]}
|
|
||||||
for i in range(min(5, len(response)))
|
|
||||||
]
|
|
||||||
tmdb_ids = {}
|
|
||||||
for i in range(min(5, len(response))):
|
for i in range(min(5, len(response))):
|
||||||
tmdb_ids[response[i]["tmdbId"]] = {"description": response[i]["overview"]}
|
movie_data.append(
|
||||||
# Try to choose from one of the usual 2 poster images available,
|
{
|
||||||
# if not, then just set the "poster" to None
|
"title": response[i]["title"],
|
||||||
|
"year": response[i]["year"],
|
||||||
|
"tmdbId": response[i]["tmdbId"],
|
||||||
|
"description": response[i]["overview"],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
tmdb_ids[response[i]["tmdbId"]]["remotePoster"] = response[i]["images"][0]["remoteUrl"]
|
movie_data[i]["remotePoster"] = response[i]["images"][0]["remoteUrl"]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
tmdb_ids[response[i]["tmdbId"]]["remotePoster"] = response[i]["images"][1]["remoteUrl"]
|
movie_data[i]["remotePoster"] = response[i]["images"][1]["remoteUrl"]
|
||||||
except IndexError:
|
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):
|
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)
|
super().__init__(timeout=timeout)
|
||||||
self.add_item(AddMovieDropdown(movies, tmdb_ids))
|
self.add_item(AddMovieDropdown(movie_data))
|
||||||
|
|
||||||
|
|
||||||
class AddMovieDropdown(discord.ui.Select):
|
class AddMovieDropdown(discord.ui.Select):
|
||||||
def __init__(self, movies: list, tmdb_ids: dict, *, timeout=180.0):
|
def __init__(self, movie_data: list, *, timeout=180.0):
|
||||||
self.movies = movies
|
self.movie_data = movie_data
|
||||||
self.tmdb_ids = tmdb_ids
|
# 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__(
|
super().__init__(
|
||||||
placeholder="Select from the dropdown",
|
placeholder="Select from the dropdown",
|
||||||
options=[
|
options=options,
|
||||||
discord.SelectOption(label=f"{movie['title']} ({movie['year']})")
|
|
||||||
for movie in movies
|
|
||||||
],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
async def callback(self, interaction: discord.Interaction):
|
async def callback(self, interaction: discord.Interaction):
|
||||||
# Convert the options to a list of strings and get the index of the selected option
|
index = int(self.values[0])
|
||||||
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]
|
|
||||||
|
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Is this the movie you want to add?",
|
title="Is this the movie you want to add?",
|
||||||
description=f"**{self.movies[index]['title']}**\n\n{tmdbFull['description']}",
|
description=f"**{self.movie_data[index]['title']}**\n\n{self.movie_data[index]['description']}",
|
||||||
color=0xD01B86
|
color=0xD01B86,
|
||||||
)
|
)
|
||||||
embed.set_image(url=tmdbFull["remotePoster"])
|
embed.set_image(url=self.movie_data[index]["remotePoster"])
|
||||||
view = RequestButtonView(tmdb_id)
|
view = RequestButtonView(self.movie_data[index]["tmdbId"])
|
||||||
await interaction.response.edit_message(embed=embed, view=view)
|
await interaction.response.edit_message(embed=embed, view=view)
|
||||||
|
|
||||||
|
|
||||||
@ -131,15 +133,9 @@ class RequestButtonView(discord.ui.View):
|
|||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Movie Requested",
|
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.",
|
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)
|
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
|
# Keep track of the movie for the `/status` command
|
||||||
db = sqlite3.connect("cordarr.db")
|
db = sqlite3.connect("cordarr.db")
|
||||||
@ -158,6 +154,6 @@ class RequestButtonView(discord.ui.View):
|
|||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Request Cancelled",
|
title="Request Cancelled",
|
||||||
description="Request has been cancelled. If you would like to request a different movie, run the `/request movie` command again.",
|
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)
|
await interaction.response.edit_message(embed=embed, view=None)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user