aboutsummaryrefslogtreecommitdiff
path: root/code/func
diff options
context:
space:
mode:
authorParker <contact@pkrm.dev>2025-01-19 23:41:53 -0600
committerParker <contact@pkrm.dev>2025-01-19 23:41:53 -0600
commitb5bd2e36b6597303985eb9dc897e04d452950372 (patch)
tree697e269911c752ce8c196c7be486df5b5871b85a /code/func
parent86b12da175593f91cb5e3266826a60d1b26f6144 (diff)
Overhaul + Sonarr support!
Diffstat (limited to 'code/func')
-rw-r--r--code/func/jellyfin.py91
-rw-r--r--code/func/radarr.py165
2 files changed, 0 insertions, 256 deletions
diff --git a/code/func/jellyfin.py b/code/func/jellyfin.py
deleted file mode 100644
index f31ec04..0000000
--- a/code/func/jellyfin.py
+++ /dev/null
@@ -1,91 +0,0 @@
-import datetime
-import requests
-import random
-import string
-import sqlite3
-from wonderwords import RandomWord
-
-from global_variables import JELLYFIN_URL, JELLYFIN_HEADERS, ACCOUNT_TIME, SIMPLE_PASSWORDS
-
-"""
-Create a new Jellyfin account for the user and return the username and password
-"""
-
-
-def create_jellyfin_account(user_id):
- username = RandomWord().word(word_min_length=5, word_max_length=5)
- if SIMPLE_PASSWORDS:
- password = RandomWord().word(word_min_length=5, word_max_length=10)
- else:
- password = "".join(random.choices(string.ascii_lowercase + string.digits, k=15))
-
- deletion_time = datetime.datetime.now() + datetime.timedelta(hours=ACCOUNT_TIME)
- # Create the new Jellyfin account
- request_1 = requests.post(
- f"{JELLYFIN_URL}/Users/New",
- headers=JELLYFIN_HEADERS,
- json={"Name": username, "Password": password},
- )
- if request_1.status_code != 200:
- return False
-
- # Get the user ID of the new account
- jellyfin_user_id = request_1.json()["Id"]
- # Get the account policy and make edits
- request_2 = requests.get(
- f"{JELLYFIN_URL}/Users/{jellyfin_user_id}", headers=JELLYFIN_HEADERS
- )
- if request_2.status_code != 200:
- return False
-
- account_policy = request_2.json()
- account_policy["Policy"]["SyncPlayAccess"] = "JoinGroups"
- account_policy["Policy"]["EnableContentDownloading"] = False
- account_policy["Policy"]["InvalidLoginAttemptCount"] = 3
- account_policy["Policy"]["MaxActiveSessions"] = 1
- # Update the user with the newly edited policy
- request_3 = requests.post(
- f"{JELLYFIN_URL}/Users?userId={jellyfin_user_id}",
- headers=JELLYFIN_HEADERS,
- json=account_policy,
- )
- if request_3.status_code != 204:
- return False
-
- # Add the information to the database
- db = sqlite3.connect("cordarr.db")
- cursor = db.cursor()
- cursor.execute(
- "INSERT INTO jellyfin_accounts (user_id, jellyfin_user_id, deletion_time) VALUES (?, ?, ?)",
- (user_id, jellyfin_user_id, deletion_time),
- )
- db.commit()
- db.close()
-
- return username, password
-
-
-"""
-Delete a specific Jellyfin account and return True/False
-"""
-
-
-def delete_jellyfin_account(jellyfin_user_id):
- request = requests.delete(
- f"{JELLYFIN_URL}/Users/{jellyfin_user_id}",
- headers=JELLYFIN_HEADERS,
- )
- # If 204 - account deleted
- # If 404 - account not found
- # Either way, remove account from database
- if request.status_code in (404, 204):
- db = sqlite3.connect("cordarr.db")
- cursor = db.cursor()
- cursor.execute(
- "DELETE FROM jellyfin_accounts WHERE jellyfin_user_id = ?",
- (jellyfin_user_id,),
- )
- db.commit()
- db.close()
- return True
- return False \ No newline at end of file
diff --git a/code/func/radarr.py b/code/func/radarr.py
deleted file mode 100644
index cc45586..0000000
--- a/code/func/radarr.py
+++ /dev/null
@@ -1,165 +0,0 @@
-import requests
-import sqlite3
-import discord
-
-from global_variables import (
- RADARR_HOST_URL,
- RADARR_HEADERS,
- ROOT_FOLDER_PATH,
- QUALITY_PROFILE_ID,
-)
-
-"""
-Add a specific movie to the Radarr library
-"""
-
-
-def get_movies(name: str):
- # Remove leading/trailing whitespace and replace spaces with URL encoding
- name = name.strip().replace(" ", "%20")
-
- # Send a request to the Radarr API to search for the movie
- response = requests.get(
- f"{RADARR_HOST_URL}/api/v3/movie/lookup?term={name}", headers=RADARR_HEADERS
- ).json()
-
- if len(response) == 0:
- return "NO RESULTS"
- # If the movie has alreadt been added, then the added date will be
- # something other than 0001-01-01T05:51:00Z
- if response[0]["added"] != "0001-01-01T05:51:00Z":
- return "ALREADY ADDED"
-
- movie_data = []
- for i in range(min(5, len(response))):
- movie_data.append(
- {
- "title": response[i]["title"],
- "year": response[i]["year"],
- "tmdbId": response[i]["tmdbId"],
- "description": response[i]["overview"],
- }
- )
-
- try:
- try:
- movie_data[i]["remotePoster"] = response[i]["images"][0]["remoteUrl"]
- except IndexError:
- movie_data[i]["remotePoster"] = response[i]["images"][1]["remoteUrl"]
- except IndexError:
- movie_data[i]["remotePoster"] = None
-
- return movie_data
-
-
-"""
-Send a request to the Radarr API to add the movie
-"""
-
-
-def add_movie(tmdb_id: int):
- # Get the necessary data for the movie
- data = requests.get(
- f"{RADARR_HOST_URL}/api/v3/movie/lookup/tmdb?tmdbId={tmdb_id}",
- headers=RADARR_HEADERS,
- ).json()
-
- movie_title = data["title"]
- # Change the qualityProfileId, monitored, and rootFolderPath values
- data["qualityProfileId"] = QUALITY_PROFILE_ID
- data["monitored"] = True
- data["rootFolderPath"] = ROOT_FOLDER_PATH
- # Send the request to add the movie
- response = requests.post(
- f"{RADARR_HOST_URL}/api/v3/movie", headers=RADARR_HEADERS, json=data
- ).json()
- movie_id = response["id"]
-
- # Return the movie_title, movie_id
- return movie_title, movie_id
-
-
-class AddMovieView(discord.ui.View):
- def __init__(self, movie_data: list, *, timeout=180.0):
- super().__init__(timeout=timeout)
- self.add_item(AddMovieDropdown(movie_data))
-
-
-class AddMovieDropdown(discord.ui.Select):
- 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=options,
- )
-
- async def callback(self, interaction: discord.Interaction):
- index = int(self.values[0])
-
- embed = discord.Embed(
- title="Is this the movie you want to add?",
- description=f"**{self.movie_data[index]['title']}**\n\n{self.movie_data[index]['description']}",
- color=0xD01B86,
- )
- 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)
-
-
-class RequestButtonView(discord.ui.View):
- def __init__(self, tmdb_id: int, *, timeout=180.0):
- super().__init__(timeout=timeout)
- self.tmdb_id = tmdb_id
-
- @discord.ui.button(label="Request", style=discord.ButtonStyle.success)
- async def request_button(
- self, interaction: discord.Interaction, button: discord.ui.Button
- ):
- # Add the movie to the Radarr library
- movie_title, movie_id = add_movie(self.tmdb_id)
-
- # Alert the user that the movie has been added
- 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,
- )
- await interaction.response.edit_message(embed=embed, view=None)
- # Force Radarr to search for the movie
- 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")
- cursor = db.cursor()
- cursor.execute(
- "INSERT INTO movies VALUES (?, ?, ?)",
- (interaction.user.id, movie_id, movie_title),
- )
- db.commit()
- db.close()
-
- @discord.ui.button(label="Don't Request", style=discord.ButtonStyle.danger)
- async def dont_request_button(
- self, interaction: discord.Interaction, button: discord.ui.Button
- ):
- 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,
- )
- await interaction.response.edit_message(embed=embed, view=None)