282 lines
11 KiB
Python
282 lines
11 KiB
Python
from tkinter import *
|
|
from tkinter import messagebox
|
|
import mysql.connector
|
|
from obswebsocket import obsws, requests as obsrequests
|
|
from twitch.helix.api import TwitchHelix
|
|
import webbrowser
|
|
import asyncio
|
|
import re
|
|
|
|
class NouvelleFenetre:
|
|
is_live = False
|
|
|
|
client_id = '6h883my3p6ndqozotnl6nsbllyyr3h' # id de l'app
|
|
|
|
oauth_authorization_url = f"https://id.twitch.tv/oauth2/authorize?client_id={client_id}&redirect_uri=http://localhost&response_type=token&scope=user_read"
|
|
|
|
def __init__(self, root, username, password):
|
|
self.oauth_token = None
|
|
asyncio.run(self.initialize_window(root, username, password))
|
|
self.username = username
|
|
self.password = password
|
|
self.root = root
|
|
|
|
|
|
|
|
self.root.grid_rowconfigure(0, weight=0)
|
|
self.root.grid_rowconfigure(1, weight=0)
|
|
self.root.grid_rowconfigure(2, weight=0)
|
|
self.root.grid_rowconfigure(3, weight=0)
|
|
self.root.grid_rowconfigure(4, weight=0)
|
|
self.root.grid_rowconfigure(5, weight=0)
|
|
self.root.grid_rowconfigure(6, weight=0)
|
|
self.root.grid_rowconfigure(7, weight=0)
|
|
self.root.grid_rowconfigure(8, weight=0)
|
|
self.root.grid_rowconfigure(9, weight=0)
|
|
self.root.grid_rowconfigure(10, weight=0)
|
|
self.root.grid_rowconfigure(11, weight=0)
|
|
self.root.grid_rowconfigure(12, weight=0)
|
|
self.root.grid_rowconfigure(13, weight=0)
|
|
self.root.grid_rowconfigure(14, weight=0)
|
|
self.root.grid_columnconfigure(0, weight=1)
|
|
self.root.grid_columnconfigure(1, weight=0)
|
|
self.root.grid_columnconfigure(2, weight=0)
|
|
self.root.grid_columnconfigure(3, weight=0)
|
|
|
|
self.obs_host = "localhost" # Adresse IP de votre ordinateur où OBS est en cours d'exécution
|
|
self.obs_port = 4455 # Port par défaut utilisé par OBSWebsocket
|
|
self.obs_password = "MPcZLZfViZihHqmg" # Mot de passe OBSWebsocket
|
|
|
|
|
|
self.twitch_key_from_database = self.get_twitch_key_from_database(username)
|
|
|
|
|
|
|
|
async def initialize_window(self, root, username, password):
|
|
self.root = Toplevel(root)
|
|
self.root.title("OBS Extension Multistreaming")
|
|
self.root.geometry("1920x1080")
|
|
self.username = username
|
|
self.password = password
|
|
|
|
self.lancer_auth_twitch()
|
|
|
|
self.oauth_token = self.get_oauth_token_from_database(username)
|
|
|
|
await self.initialize_twitch()
|
|
|
|
label = Label(self.root, text=f"Bienvenue, {username}!")
|
|
label.grid(row=0, column=0)
|
|
|
|
label = Label(self.root, text="Clé Twitch :")
|
|
label.grid(row=2, column=0)
|
|
|
|
self.entry_twitch = Entry(self.root)
|
|
self.entry_twitch.grid(row=3, column=0)
|
|
|
|
boutonvalidation = Button(self.root, text="Envoyé", command=lambda: self.set_key_twitch(username))
|
|
boutonvalidation.grid(row=4, column=0)
|
|
|
|
boutondediffusiontwitch = Button(self.root, text="Diffusion de Twitch On/Off", command=lambda: asyncio.run(self.configure_obs_for_twitch(self.twitch_key_from_database)))
|
|
boutondediffusiontwitch.grid(row=4, column=3)
|
|
|
|
label = Label(self.root, text="Clé Youtube :")
|
|
label.grid(row=5, column=0)
|
|
|
|
self.entry_youtube = Entry(self.root)
|
|
self.entry_youtube.grid(row=6, column=0)
|
|
|
|
boutonvalidation2 = Button(self.root, text="Envoyé", command=lambda: self.set_key_youtube(username))
|
|
boutonvalidation2.grid(row=7, column=0)
|
|
|
|
boutondediffusionyoutube = Button(self.root, text="Diffusion de YouTube On/Off")
|
|
boutondediffusionyoutube.grid(row=7, column=3)
|
|
|
|
bouton_fermer = Button(self.root, text="Fermer", command=self.fermer_et_reafficher)
|
|
bouton_fermer.grid(row=13, column=0)
|
|
|
|
|
|
|
|
def fermer_et_reafficher(self):
|
|
self.root.destroy()
|
|
self.ws.disconnect()
|
|
self.root.master.deiconify()
|
|
|
|
def get_key_twitch(self):
|
|
self.twitch = self.entry_twitch.get()
|
|
print(self.twitch)
|
|
|
|
def get_key_youtube(self):
|
|
self.youtube = self.entry_youtube.get()
|
|
print(self.youtube)
|
|
|
|
def set_key_twitch(self, username):
|
|
try:
|
|
cnx = mysql.connector.connect(user='root', password='',
|
|
host='127.0.0.1',
|
|
database='obs_project')
|
|
cur = cnx.cursor()
|
|
|
|
query = "SELECT * FROM utilisateurs WHERE username = %s"
|
|
cur.execute(query, (username,))
|
|
|
|
user = cur.fetchone()
|
|
|
|
if user:
|
|
new_twitch_key = self.entry_twitch.get()
|
|
update_query = "UPDATE twitch SET twitch_key = %s WHERE username = %s"
|
|
cur.execute(update_query, (new_twitch_key, username))
|
|
cnx.commit()
|
|
print(f"La clé a été mis à jour pour {username} avec la clé {new_twitch_key}")
|
|
else:
|
|
print(f"Utilisateur {username} non trouvée")
|
|
|
|
except mysql.connector.Error as err:
|
|
print(f"Erreur: {err}")
|
|
messagebox.showerror("Erreur", "Une erreur a eu lieu pour mettre à jour votre clé")
|
|
|
|
finally:
|
|
cur.close()
|
|
cnx.close()
|
|
|
|
def set_key_youtube(self, username):
|
|
try:
|
|
cnx = mysql.connector.connect(user='root', password='',
|
|
host='127.0.0.1',
|
|
database='obs_project')
|
|
cur = cnx.cursor()
|
|
|
|
query = "SELECT * FROM utilisateurs WHERE username = %s"
|
|
cur.execute(query, (username,))
|
|
|
|
user = cur.fetchone()
|
|
|
|
if user:
|
|
new_youtube_key = self.entry_youtube.get()
|
|
update_query = "UPDATE youtube SET youtube_key = %s WHERE username = %s"
|
|
cur.execute(update_query, (new_youtube_key, username))
|
|
cnx.commit()
|
|
print(f"La clé a été mis à jour pour {username} avec la clé {new_youtube_key}")
|
|
else:
|
|
print(f"Utilisateur {username} non trouvée")
|
|
|
|
except mysql.connector.Error as err:
|
|
print(f"Erreur: {err}")
|
|
messagebox.showerror("Erreur", "Une erreur a eu lieu pour mettre à jour votre clé")
|
|
|
|
finally:
|
|
cur.close()
|
|
cnx.close()
|
|
|
|
def get_twitch_key_from_database(self, username):
|
|
try:
|
|
cnx = mysql.connector.connect(user='root', password='',
|
|
host='127.0.0.1',
|
|
database='obs_project')
|
|
cur = cnx.cursor()
|
|
|
|
query = "SELECT twitch_key FROM twitch WHERE username = %s"
|
|
cur.execute(query, (username,))
|
|
twitch_key = cur.fetchone()
|
|
|
|
if twitch_key:
|
|
return twitch_key[0]
|
|
else:
|
|
print(f"Clé Twitch non trouvée pour l'utilisateur {username}")
|
|
return None
|
|
|
|
except mysql.connector.Error as err:
|
|
print(f"Erreur: {err}")
|
|
messagebox.showerror("Erreur", "Une erreur a eu lieu pour récupérer la clé Twitch")
|
|
|
|
finally:
|
|
cur.close()
|
|
cnx.close()
|
|
|
|
async def configure_obs_for_twitch(self, twitch_key_from_database):
|
|
try:
|
|
if twitch_key_from_database is not None:
|
|
if not self.is_live:
|
|
print("Connexion à OBS via Websocket avec les paramètres suivants :")
|
|
print("Host:", self.obs_host)
|
|
print("Port:", self.obs_port)
|
|
print("Password:", self.obs_password)
|
|
print("Twitch Stream Key:", twitch_key_from_database)
|
|
|
|
self.obs_ws = obsws(self.obs_host, self.obs_port, self.obs_password)
|
|
self.obs_ws.connect()
|
|
|
|
start_stream_request = obsrequests.StartStreaming(stream_key=twitch_key_from_database)
|
|
self.obs_ws.call(start_stream_request)
|
|
|
|
self.is_live = True
|
|
else:
|
|
print("Arrêt du streaming Twitch.")
|
|
self.obs_ws.call(obsrequests.StopStreaming())
|
|
self.obs_ws.disconnect()
|
|
self.is_live = False
|
|
else:
|
|
print("La clé Twitch est manquante.")
|
|
except Exception as e:
|
|
print(f"Une erreur s'est produite lors de la configuration d'OBS pour Twitch : {e}")
|
|
|
|
|
|
async def initialize_twitch(self):
|
|
try:
|
|
if self.oauth_token:
|
|
twitch = TwitchHelix(self.client_id, self.oauth_token)
|
|
users = twitch.get_users()
|
|
if users:
|
|
print("Utilisateur Twitch trouvé:")
|
|
print("ID:", users[0].id)
|
|
print("Nom d'utilisateur:", users[0].display_name)
|
|
else:
|
|
print("Utilisateur Twitch non trouvé.")
|
|
else:
|
|
print("Le token OAuth Twitch n'est pas disponible. Assurez-vous de le récupérer depuis la base de données.")
|
|
except Exception as e:
|
|
print(f"Une erreur s'est produite lors de la récupération de l'utilisateur Twitch : {e}")
|
|
|
|
|
|
def lancer_auth_twitch(self):
|
|
oauth_token = self.get_oauth_token_from_database(self.username)
|
|
print(f"Token OAuth récupéré pour {self.username}: {oauth_token}")
|
|
|
|
if oauth_token is None or oauth_token.strip() == '':
|
|
webbrowser.open(self.oauth_authorization_url)
|
|
messagebox.showinfo("Authentification Twitch", "Veuillez autoriser l'accès à Twitch dans le navigateur Web qui s'est ouvert.")
|
|
else:
|
|
messagebox.showinfo("Authentification Twitch", "L'authentification Twitch n'est pas nécessaire car le token OAuth est déjà présent dans la base de données.")
|
|
|
|
|
|
def get_oauth_token_from_database(self, username):
|
|
try:
|
|
cnx = mysql.connector.connect(user='root', password='',
|
|
host='127.0.0.1',
|
|
database='obs_project')
|
|
cur = cnx.cursor()
|
|
|
|
query = "SELECT OAuth_Key FROM twitch WHERE username = %s"
|
|
cur.execute(query, (username,))
|
|
oauth_token = cur.fetchone()
|
|
|
|
print(f"Résultat de la requête pour l'utilisateur {username}: {oauth_token}")
|
|
|
|
if oauth_token and oauth_token[0].strip():
|
|
print(f"OAuth token trouvé pour l'utilisateur {username}: {oauth_token[0]}")
|
|
return oauth_token[0]
|
|
else:
|
|
print(f"OAuth token non trouvé pour l'utilisateur {username}")
|
|
return None
|
|
|
|
except mysql.connector.Error as err:
|
|
print(f"Erreur: {err}")
|
|
messagebox.showerror("Erreur", "Une erreur a eu lieu pour récupérer le token OAuth")
|
|
|
|
finally:
|
|
cur.close()
|
|
cnx.close()
|
|
|
|
|
|
|
|
|