Update overseerr.py

This commit is contained in:
pacnpal
2024-09-30 20:46:28 -04:00
parent 63049c1e2b
commit 63b68afbf3

View File

@@ -1,12 +1,13 @@
from redbot.core import commands, Config from redbot.core import commands, Config
from redbot.core.bot import Red from redbot.core.bot import Red
import aiohttp
import asyncio import asyncio
import json import json
class Overseerr(commands.Cog): class Overseerr(commands.Cog):
def __init__(self, bot: Red): def __init__(self, bot: Red):
self.bot = bot self.bot = bot
self.config = Config.get_conf(self, identifier=336473788746) self.config = Config.get_conf(self, identifier=1234567890)
default_global = { default_global = {
"overseerr_url": None, "overseerr_url": None,
"overseerr_api_key": None, "overseerr_api_key": None,
@@ -43,23 +44,24 @@ class Overseerr(commands.Cog):
overseerr_url = await self.config.overseerr_url() overseerr_url = await self.config.overseerr_url()
overseerr_api_key = await self.config.overseerr_api_key() overseerr_api_key = await self.config.overseerr_api_key()
url = f"{overseerr_url}/api/v1/{'movie' if media_type == 'movie' else 'tv'}/{media_id}" url = f"{overseerr_url}/api/v1/{'movie' if media_type == 'movie' else 'tv'}/{media_id}"
headers = {"X-Api-key": overseerr_api_key} headers = {"X-Api-Key": overseerr_api_key}
async with self.bot.session.get(url, headers=headers) as resp: async with aiohttp.ClientSession() as session:
if resp.status == 200: async with session.get(url, headers=headers) as resp:
data = await resp.json() if resp.status == 200:
status = "Available" if data.get('mediaInfo', {}).get('status') == 3 else "Not Available" data = await resp.json()
if data.get('request'): status = "Available" if data.get('mediaInfo', {}).get('status') == 3 else "Not Available"
status += " (Requested)" if data.get('request'):
return status status += " (Requested)"
return "Status Unknown" return status
return "Status Unknown"
@commands.command() @commands.command()
async def request(self, ctx: commands.Context, *, query: str): async def request(self, ctx: commands.Context, *, query: str):
"""Search and request a movie or TV show on Overseerr.""" """Search and request a movie or TV show on Overseerr."""
overseerr_url = await self.config.overseerr_url() overseerr_url = await self.config.overseerr_url()
overseerr_api_key = await self.config.overseerr_api_key() overseerr_api_key = await self.config.overseerr_api_key()
if not overseerr_url or not overseerr_api_key: if not overseerr_url or not overseerr_api_key:
await ctx.send("Overseerr is not configured. Please ask an admin to set it up.") await ctx.send("Overseerr is not configured. Please ask an admin to set it up.")
return return
@@ -73,8 +75,9 @@ class Overseerr(commands.Cog):
} }
# Search for the movie or TV show # Search for the movie or TV show
async with self.bot.session.get(search_url, headers=headers, params={"query": query}) as resp: async with aiohttp.ClientSession() as session:
search_results = await resp.json() async with session.get(search_url, headers=headers, params={"query": query}) as resp:
search_results = await resp.json()
if not search_results['results']: if not search_results['results']:
await ctx.send(f"No results found for '{query}'.") await ctx.send(f"No results found for '{query}'.")
@@ -122,13 +125,14 @@ class Overseerr(commands.Cog):
"mediaType": media_type "mediaType": media_type
} }
async with self.bot.session.post(request_url, headers=headers, json=request_data) as resp: async with aiohttp.ClientSession() as session:
if resp.status == 200: async with session.post(request_url, headers=headers, json=request_data) as resp:
response_data = await resp.json() if resp.status == 200:
request_id = response_data.get('id') response_data = await resp.json()
await ctx.send(f"Successfully requested {media_type} '{selected_result['title']}'! Request ID: {request_id}") request_id = response_data.get('id')
else: await ctx.send(f"Successfully requested {media_type} '{selected_result['title']}'! Request ID: {request_id}")
await ctx.send(f"Failed to request {media_type} '{selected_result['title']}'. Please try again later.") else:
await ctx.send(f"Failed to request {media_type} '{selected_result['title']}'. Please try again later.")
@commands.command() @commands.command()
async def approve(self, ctx: commands.Context, request_id: int): async def approve(self, ctx: commands.Context, request_id: int):
@@ -140,7 +144,7 @@ class Overseerr(commands.Cog):
overseerr_url = await self.config.overseerr_url() overseerr_url = await self.config.overseerr_url()
overseerr_api_key = await self.config.overseerr_api_key() overseerr_api_key = await self.config.overseerr_api_key()
if not overseerr_url or not overseerr_api_key: if not overseerr_url or not overseerr_api_key:
await ctx.send("Overseerr is not configured. Please ask an admin to set it up.") await ctx.send("Overseerr is not configured. Please ask an admin to set it up.")
return return
@@ -152,11 +156,12 @@ class Overseerr(commands.Cog):
"Content-Type": "application/json" "Content-Type": "application/json"
} }
async with self.bot.session.post(approve_url, headers=headers) as resp: async with aiohttp.ClientSession() as session:
if resp.status == 200: async with session.post(approve_url, headers=headers) as resp:
await ctx.send(f"Request {request_id} has been approved!") if resp.status == 200:
else: await ctx.send(f"Request {request_id} has been approved!")
await ctx.send(f"Failed to approve request {request_id}. Please check the request ID and try again.") else:
await ctx.send(f"Failed to approve request {request_id}. Please check the request ID and try again.")
def setup(bot: Red): def setup(bot: Red):
bot.add_cog(Overseerr(bot)) bot.add_cog(Overseerr(bot))