From 00c4e87f69a2a72d0c27613f137469acd016ba38 Mon Sep 17 00:00:00 2001 From: gigi_dsss Date: Tue, 3 Aug 2021 00:52:56 +0200 Subject: [PATCH] ma super modif --- Plex Discord Activity/README.md | 77 ++++++ Plex Discord Activity/pda.py | 413 ++++++++++++++++++++++++++++++++ 2 files changed, 490 insertions(+) create mode 100644 Plex Discord Activity/README.md create mode 100644 Plex Discord Activity/pda.py diff --git a/Plex Discord Activity/README.md b/Plex Discord Activity/README.md new file mode 100644 index 0000000..b82e35a --- /dev/null +++ b/Plex Discord Activity/README.md @@ -0,0 +1,77 @@ +# Plex Discord Activity + +**Plex Discord Activity est un logiciel en Python. Il a été récuperé déjà depuis le dépot d'un utilisateur GitHub mais a été simplifié de sorte a ce que la pré-configuration soit la plus simple possible** + +Il y a eu peu de modifications, mais elle vous simplifie grandement la vie + +## Attention + +Sachez que pour le script fonctionne, il faut qu'il tourne sur le même PC que votre application Discord. Malheureusement faire tourner ce script sur un serveur en tâche de fond ne donnera aucun résultat... + +## Installation + +Pour cela, commencez déjà par installer Python3 sur votre ordinateur si cela n'est pas déjà fait... + +Ensuite installez ces 2 bibliothèques Python via pip3: + +```bash +pip3 install plexapi +pip3 install websocket-client==0.48.0 +``` + +## Configuration + +Éditez le document pma.py et éditez ce paragraphe seulement: +```python +### SEULEMENT CE QUE VOUS DEVEZ EDITER + +MyDomain = "https://your.plex.dns:32400" #Soit via votre nom de domaine, soit via le domaine de Plex, c'est à dire, https://app.plex.tv +Serveur = "MyPlex" #Le nom de votre Serveur Plex, visible dans Paramètres > Général > Nom d'usage +NomUser = "username" #Le nom d'utilisateur Plex pour récupérer les métadonnées et les informations de lecture en temps réel +MotDePasse = "password" #Votre mot de passe de votre compte Plex +MonToken = "your_token" #Votre Token, accessible a la fin de l'url lorsque vous consultez le fichier XML de l'un de vos médias +BlackList = ["Musique", "BackingTracks"] #séparée par des virgules avec espace, entourées par des "", entrent 2 balises [], ex: ["bib1", "bib2"] +UserOnly = "username" #Si vous avez crée des utilisateurs gérés, pour éviter de partager l'état de lecture d'un autre utilisateur que vous-même, précisez le psuedo du bon utilisateur a priori le même que le 3ème paramètre que vous... +InfosSupp = "true" #Ceci partage les métadonnées de votre épisode si c'est sur True, sinon mettez False pour n'afficher que l'état de lecture +TempsRestant = "true" #True = Afficher le temps restant de lecture / False = Afficher le nombre de minutes que vous avez déjà consulté depuis le démarrage de l'épisode + +### END DE CE QUE VOUS DEVEZ EDITER +``` + +Voici un résumé des paramètres: + +**Attention a ne pas supprimer des guillemets ou des crochets... Si vous ne voulez pas préciser de valeur, laissez les guillemets vides ou indiquez-y ``none`` !** + +**Serveur**: C'est le nom de votre serveur Plex. Vous le trouverez dans ``Paramètres > Général > Nom d'usage`` + +**NomUser**: Votre nom d'utilisateur Plex associé à votre compte. + +**MotDePasse**: Votre mot de passe de l'utilisateur Plex associé à votre compte. + +**MonToken**: Token que vous pouvez obtenir en consultant le fichier XML d'un de vos média. Allez sur un épisode ou film précis, allez dans ``Voir informations`` puis ``Voir le XML``. Ensuite regardez à la fin de votre URL, vous devriez avoir: **Plex-Token=0x0x0xx0x00xx0x0** + +**BlackList**: Vous pouvez décider de ne pas partager sur Discord les médias d'une bibliothèque définie, indiquez-y entre guillemets et eux-même entre crochets, le nom des Bibliothèques. +Exemple: +```python +BlackList = ["Musique", "BackingTracks"] +``` +**UserOnly**: Si vous avez crée des utilisateurs gérés, pour éviter de partager l'état de lecture d'un autre utilisateur que vous-même, précisez le psuedo du bon utilisateur qui à priori est le même que celui du paramètre ``username``... + +**InfosSupp**: Vous permet de partager davantage d'infos sur le média, à savoir les métadonnées, etc. (Réponse: True / False) + +**TempsRestant**: Vous permet de préciser si vous voulez indiquer le temps restant du média ou la position actuelle (Réponse: True (Il reste 05:00 minutes) / False (Vous êtes à 15:00 minutes sur 20:00 minutes)) + +## Utilisation + +``` +python3 pma.py +``` +*Patientez +/- 20 secondes pour que le script démarre... Le script lancera tout seul la page web Plex* + +## Source +Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. + + + +## License +[MIT](https://choosealicense.com/licenses/mit/) diff --git a/Plex Discord Activity/pda.py b/Plex Discord Activity/pda.py new file mode 100644 index 0000000..39fa285 --- /dev/null +++ b/Plex Discord Activity/pda.py @@ -0,0 +1,413 @@ +import asyncio +import datetime +import hashlib +import json +import os +import plexapi.myplex +import struct +import subprocess +import sys +import tempfile +import threading +import time +import webbrowser + +### SEULEMENT CE QUE VOUS DEVEZ EDITER + +MyDomain = "https://your.plex.dns:32400" #Soit via votre nom de domaine, soit via le domaine de Plex, c'est à dire, https://app.plex.tv +Serveur = "MyPlex" #Le nom de votre Serveur Plex, visible dans Paramètres > Général > Nom d'usage +NomUser = "username" #Le nom d'utilisateur Plex pour récupérer les métadonnées et les informations de lecture en temps réel +MotDePasse = "password" #Votre mot de passe de votre compte Plex +MonToken = "your_token" #Votre Token, accessible a la fin de l'url lorsque vous consultez le fichier XML de l'un de vos médias +BlackList = ["Musique", "BackingTracks"] #séparée par des virgules avec espace, entourées par des "", entrent 2 balises [], ex: ["bib1", "bib2"] +UserOnly = "username" #Si vous avez crée des utilisateurs gérés, pour éviter de partager l'état de lecture d'un autre utilisateur que vous-même, précisez le psuedo du bon utilisateur a priori le même que le 3ème paramètre que vous... +InfosSupp = "true" #Ceci partage les métadonnées de votre épisode si c'est sur True, sinon mettez False pour n'afficher que l'état de lecture +TempsRestant = "true" #True = Afficher le temps restant de lecture / False = Afficher le nombre de minutes que vous avez déjà consulté depuis le démarrage de l'épisode + +### END DE CE QUE VOUS DEVEZ EDITER + +webbrowser.open(MyDomain) + +class plexConfig: + + extraLogging = (InfosSupp) + timeRemaining = (TempsRestant) + + def __init__(self, serverName = "", username = "", password = "", token = "", listenForUser = "", blacklistedLibraries = None, whitelistedLibraries = None, clientID = "413407336082833418"): + self.serverName = serverName + self.username = username + self.password = password + self.token = token + self.listenForUser = (username if listenForUser == "" else listenForUser).lower() + self.blacklistedLibraries = blacklistedLibraries + self.whitelistedLibraries = whitelistedLibraries + self.clientID = clientID + +plexConfigs = [ + plexConfig(serverName = (Serveur), username = (NomUser), password = (MotDePasse), token = (MonToken), blacklistedLibraries = (BlackList), listenForUser = (UserOnly)) +] + +class discordRichPresence: + + def __init__(self, clientID, child): + self.IPCPipe = ((os.environ.get("XDG_RUNTIME_DIR", None) or os.environ.get("TMPDIR", None) or os.environ.get("TMP", None) or os.environ.get("TEMP", None) or "/tmp") + "/discord-ipc-0") if isLinux else "\\\\?\\pipe\\discord-ipc-0" + self.clientID = clientID + self.pipeReader = None + self.pipeWriter = None + self.process = None + self.running = False + self.child = child + + async def read(self): + try: + data = await self.pipeReader.read(1024) + self.child.log("[READ] " + str(json.loads(data[8:].decode("utf-8")))) + except Exception as e: + self.child.log("[READ] " + str(e)) + self.stop() + + def write(self, op, payload): + payload = json.dumps(payload) + self.child.log("[WRITE] " + str(payload)) + data = self.pipeWriter.write(struct.pack(" 0] + else: + if (text["h"] == 0): + del text["h"] + text = [str(v).rjust(2, "0") for k, v in text.items()] + return joiner.join(text) + +discordRichPresencePlexInstances = [] +for config in plexConfigs: + discordRichPresencePlexInstances.append(discordRichPresencePlex(config)) +try: + for discordRichPresencePlexInstance in discordRichPresencePlexInstances: + discordRichPresencePlexInstance.run() + while (True): + time.sleep(3600) +except KeyboardInterrupt: + for discordRichPresencePlexInstance in discordRichPresencePlexInstances: + discordRichPresencePlexInstance.reset() +except Exception as e: + print("Error: " + str(e))