62 lines
2.2 KiB
Python
62 lines
2.2 KiB
Python
# bot/main.py
|
|
|
|
import discord
|
|
from discord.ext import commands
|
|
from discord import app_commands
|
|
from tautulli_client import TautulliClient
|
|
from recommender import Recommender
|
|
from config import DISCORD_BOT_TOKEN
|
|
|
|
intents = discord.Intents.default()
|
|
client = commands.Bot(command_prefix="!", intents=intents)
|
|
tree = client.tree
|
|
|
|
tautulli = TautulliClient()
|
|
recommender = Recommender()
|
|
|
|
@client.event
|
|
async def on_ready():
|
|
print(f"🤖 Logged in as {client.user} (ID: {client.user.id})")
|
|
await tree.sync()
|
|
print("✅ Slash commands synced.")
|
|
|
|
@tree.command(name="recommend", description="Recommend movies or TV shows for a Plex user")
|
|
@app_commands.describe(
|
|
username="Plex username (case-sensitive)",
|
|
media_type="Choose 'movie' or 'tv'"
|
|
)
|
|
async def recommend(interaction: discord.Interaction, username: str, media_type: str):
|
|
await interaction.response.defer() # Acknowledge the request
|
|
|
|
try:
|
|
#users = tautulli._request("get_users")
|
|
#print("👤 Tautulli Users:")
|
|
#for u in users:
|
|
# print(f"{u.get('username')}")
|
|
# Convert Discord input to Plex-friendly type
|
|
|
|
history = tautulli.get_user_watch_history(username=username, media_type=media_type.lower())
|
|
if not history:
|
|
await interaction.followup.send(f"⚠️ No recent {media_type} history found for `{username}`.")
|
|
return
|
|
|
|
watched_titles = [entry["title"] for entry in history]
|
|
result = recommender.recommend(watched_titles, media_type=media_type.lower())
|
|
|
|
response = f"🎬 **{media_type.title()} Recommendations for `{username}`:**\n\n"
|
|
if result["available"]:
|
|
response += "✅ **Available on Plex:**\n" + "\n".join(f"- {title}" for title in result["available"]) + "\n\n"
|
|
if result["requestable"]:
|
|
response += "🛒 **Requestable:**\n" + "\n".join(f"- {title}" for title in result["requestable"])
|
|
if not result["available"] and not result["requestable"]:
|
|
response += "❌ No recommendations found."
|
|
|
|
await interaction.followup.send(response)
|
|
|
|
except Exception as e:
|
|
await interaction.followup.send(f"❌ Error: {str(e)}")
|
|
print("Error in /recommend:", e)
|
|
|
|
if __name__ == "__main__":
|
|
client.run(DISCORD_BOT_TOKEN)
|