Files
Guh_RPC_Manager/RPC_Manager.py
2025-12-08 13:56:55 +01:00

174 lines
5.3 KiB
Python

from pypresence import Presence
import time
import os
# ========= CONFIG =========
CLIENT_ID = "TON_CLIENT_ID_ICI" # à récupérer sur https://discord.com/developers
# =========================
def ask_buttons():
"""
Crée jusqu'à 2 boutons au format attendu par Discord :
[{"label": "...", "url": "https://..."}]
Doc pypresence: paramètre 'buttons' de Presence.update() :contentReference[oaicite:3]{index=3}
"""
buttons = []
for i in range(1, 3):
label = input(f"Label du bouton {i} (laisser vide pour arrêter) : ").strip()
if not label:
break
url = input(f"URL du bouton {i} (https://...) : ").strip()
if not url:
print("URL vide, bouton ignoré.")
continue
buttons.append({"label": label, "url": url})
return buttons if buttons else None
def ask_party_size():
"""
Discord / pypresence : party_size = [current, max] :contentReference[oaicite:4]{index=4}
"""
text = input("Taille de party (format actuel/max, ex 1/4, vide pour aucune) : ").strip()
if not text:
return None
try:
cur_str, max_str = text.split("/")
return [int(cur_str), int(max_str)]
except Exception:
print("Format invalide, party ignorée.")
return None
def build_activity_kwargs():
"""
Construit les kwargs passés à Presence.update(**kwargs)
en suivant la structure de l'objet activity de la doc Discord. :contentReference[oaicite:5]{index=5}
"""
print("\n--- Texte principal ---")
details = input("details (ligne du haut, ce que tu fais) : ").strip()
state = input("state (ligne du bas, statut / contexte) : ").strip()
use_timer = input("Afficher un timer de durée ? (y/n) : ").lower().startswith("y")
start_ts = int(time.time() * 1000) if use_timer else None # ms epoch, comme dans la doc pypresence :contentReference[oaicite:6]{index=6}
print("\n--- Images (assets) ---")
large_image = input("large_image (nom d'asset, vide = rien) : ").strip() or None
large_text = input("large_text (tooltip de la grande image, vide = rien) : ").strip() or None
small_image = input("small_image (nom d'asset, vide = rien) : ").strip() or None
small_text = input("small_text (tooltip petite image, vide = rien) : ").strip() or None
print("\n--- Party (optionnel) ---")
party_size = ask_party_size()
print("\n--- Boutons (optionnel, max 2) ---")
buttons = ask_buttons()
kwargs = {}
# → activity.details / activity.state
if details:
kwargs["details"] = details
if state:
kwargs["state"] = state
# → activity.timestamps.start
if start_ts is not None:
kwargs["start"] = start_ts
# → activity.assets
if large_image:
kwargs["large_image"] = large_image
if large_text:
kwargs["large_text"] = large_text
if small_image:
kwargs["small_image"] = small_image
if small_text:
kwargs["small_text"] = small_text
# → activity.party
if party_size:
kwargs["party_size"] = party_size
# → activity.buttons
if buttons:
kwargs["buttons"] = buttons
kwargs["instance"] = True
return kwargs
def main_menu():
if CLIENT_ID == "1447561790564204687":
print("[!] Pense à mettre ton CLIENT_ID dans le script avant de lancer.")
return
rpc = Presence(CLIENT_ID)
connected = False
while True:
print("\n=== Discord RPC Manager (style doc officielle) ===")
print("1) Se connecter / reconnecter à Discord")
print("2) Mettre à jour la Rich Presence")
print("3) Effacer la Rich Presence")
print("4) Quitter")
choice = input("Choix : ").strip()
if choice == "1":
if connected:
print("[i] Déjà connecté.")
continue
try:
rpc.connect()
connected = True
print("[+] Connecté à Discord.")
except Exception as e:
print("[!] Erreur de connexion :", e)
elif choice == "2":
if not connected:
try:
rpc.connect()
connected = True
print("[+] Connecté à Discord.")
except Exception as e:
print("[!] Impossible de se connecter :", e)
continue
kwargs = build_activity_kwargs()
try:
rpc.update(**kwargs)
print("[+] Rich Presence mise à jour avec succès !")
except Exception as e:
print("[!] Erreur lors de la mise à jour :", e)
elif choice == "3":
if not connected:
print("[i] Pas connecté.")
continue
try:
rpc.clear()
print("[i] Rich Presence effacée.")
except Exception as e:
print("[!] Erreur lors de l'effacement :", e)
elif choice == "4":
print("Fermeture...")
if connected:
try:
rpc.clear()
rpc.close()
except Exception:
pass
break
else:
print("[!] Choix invalide.")
if __name__ == "__main__":
main_menu()