ajout de mémoire avec fichier
This commit is contained in:
+163
-33
@@ -59,6 +59,121 @@ def get_current_time():
|
||||
# return now.strftime("%H:%M")
|
||||
|
||||
|
||||
def get_current_date():
|
||||
current_time = time.time()
|
||||
return time.strftime('%Yy%mm%dd', time.localtime(current_time))
|
||||
|
||||
|
||||
def dict_to_json_string(data):
|
||||
"""Convertit un dictionnaire Python en chaîne JSON.
|
||||
:param data: Dictionnaire Python.
|
||||
:return: Chaîne JSON.
|
||||
"""
|
||||
try:
|
||||
return json.dumps(data, indent=4, ensure_ascii=False)
|
||||
except Exception as e:
|
||||
print(f"Erreur lors de la conversion en JSON : {e}")
|
||||
return None
|
||||
|
||||
def json_string_to_dict(json_string):
|
||||
""" Convertit une chaîne JSON en dictionnaire Python.
|
||||
:param json_string: Chaîne JSON.
|
||||
:return: Dictionnaire Python.
|
||||
"""
|
||||
try:
|
||||
return json.loads(json_string)
|
||||
except Exception as e:
|
||||
print(f"Erreur lors de la conversion en dictionnaire : {e}")
|
||||
return None
|
||||
|
||||
|
||||
class PersistentStorage:
|
||||
def __init__(self, storage_dir="storage"):
|
||||
"""
|
||||
Initialise l'environnement de stockage avec un répertoire dédié.
|
||||
:param storage_dir: Chemin du répertoire de stockage.
|
||||
"""
|
||||
self.storage_dir = storage_dir
|
||||
|
||||
def _get_file_path(self, filename):
|
||||
"""Renvoie le chemin complet d'un fichier dans le répertoire de stockage."""
|
||||
return os.path.join(self.storage_dir, filename + ".json")
|
||||
|
||||
def read(self, filename):
|
||||
"""
|
||||
Lit et retourne le contenu d'un fichier sous forme de dictionnaire.
|
||||
:param filename: Nom du fichier (sans extension).
|
||||
:return: Dictionnaire des données du fichier ou {} si le fichier est vide/inexistant.
|
||||
"""
|
||||
file_path = self._get_file_path(filename)
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8') as file:
|
||||
return json.load(file)
|
||||
except (FileNotFoundError, json.JSONDecodeError):
|
||||
return {}
|
||||
|
||||
def write(self, filename, key, value):
|
||||
"""
|
||||
Ajoute ou met à jour une paire clé-valeur dans un fichier.
|
||||
:param filename: Nom du fichier (sans extension).
|
||||
:param key: Clé à ajouter ou mettre à jour.
|
||||
:param value: Valeur associée.
|
||||
"""
|
||||
if not os.path.exists(self.storage_dir):
|
||||
os.makedirs(self.storage_dir)
|
||||
data = self.read(filename)
|
||||
data[key] = value
|
||||
file_path = self._get_file_path(filename)
|
||||
with open(file_path, 'w', encoding='utf-8') as file:
|
||||
json.dump(data, file, indent=4, ensure_ascii=False)
|
||||
return data
|
||||
|
||||
def delete(self, filename, key):
|
||||
"""
|
||||
Supprime une clé d'un fichier si elle existe.
|
||||
:param filename: Nom du fichier (sans extension).
|
||||
:param key: Clé à supprimer.
|
||||
"""
|
||||
data = self.read(filename)
|
||||
if key in data:
|
||||
del data[key]
|
||||
file_path = self._get_file_path(filename)
|
||||
with open(file_path, 'w', encoding='utf-8') as file:
|
||||
json.dump(data, file, indent=4, ensure_ascii=False)
|
||||
return data
|
||||
|
||||
def list_keys(self, filename):
|
||||
"""
|
||||
Liste toutes les clés présentes dans un fichier.
|
||||
:param filename: Nom du fichier (sans extension).
|
||||
:return: Liste des clés.
|
||||
"""
|
||||
data = self.read(filename)
|
||||
return list(data.keys())
|
||||
|
||||
def query_all(self):
|
||||
"""
|
||||
Interroge tous les fichiers dans le répertoire de stockage et retourne leurs contenus.
|
||||
:return: Dictionnaire de tous les fichiers et leurs données.
|
||||
"""
|
||||
all_data = {}
|
||||
for file in os.listdir(self.storage_dir):
|
||||
if file.endswith(".json"):
|
||||
filename = os.path.splitext(file)[0]
|
||||
all_data[filename] = self.read(filename)
|
||||
return all_data
|
||||
|
||||
|
||||
|
||||
storage = PersistentStorage()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
################### RecordTwitch ########################
|
||||
@@ -67,7 +182,7 @@ class RecordTwitch:
|
||||
self.channel_name = channel_name
|
||||
self.channel_url = "https://www.twitch.tv/" + self.channel_name
|
||||
self.record_time = record_time
|
||||
self.max_timerecordfile = 60
|
||||
self.max_timerecordfile = 30
|
||||
self.running = True
|
||||
self.script_name = "twitch_record"
|
||||
if (self.record_time == -1):
|
||||
@@ -249,6 +364,7 @@ class Subtitle_translation:
|
||||
self.pathjson = pathjson
|
||||
self.reload_json()
|
||||
self.dir_whisperX = "whisperX"
|
||||
self.filename_memory = "subtitle_" +get_current_date()
|
||||
self.subtitle = {}
|
||||
self.all_subtitle = ""
|
||||
self.is_running = True
|
||||
@@ -284,25 +400,14 @@ class Subtitle_translation:
|
||||
|
||||
|
||||
def remove_repetitions(self, message):
|
||||
"""
|
||||
Supprime les répétitions dans un message en conservant uniquement le premier
|
||||
exemple d'une phrase répétée.
|
||||
|
||||
:param message: Le message sous forme de chaîne de caractères
|
||||
:return: Le message sans répétitions
|
||||
"""
|
||||
sprint(self.script_name,"yellow", "remove_repetitions start for: \n" +message)
|
||||
|
||||
words = message.split() # Découpe le texte en mots
|
||||
seen = set() # Pour suivre les mots déjà rencontrés
|
||||
result = [] # Stocke les mots sans répétition
|
||||
|
||||
|
||||
for word in words:
|
||||
if word not in seen:
|
||||
result.append(word)
|
||||
seen.add(word)
|
||||
|
||||
sprint(self.script_name,"green", "remove_repetitions cleaned text : \n" +" ".join(result))
|
||||
return " ".join(result)## str this switch
|
||||
|
||||
@@ -323,7 +428,6 @@ class Subtitle_translation:
|
||||
sprint(self.script_name,"magenta", f"Dernier sous-titre à {last_time} = {last_text}")
|
||||
return last_text
|
||||
|
||||
|
||||
|
||||
def auto_create_subtitle(self,file):
|
||||
sprint(self.script_name,"green",f"start auto_create_subtitle")
|
||||
@@ -336,7 +440,7 @@ class Subtitle_translation:
|
||||
# subtitle_directory = "subtitle"
|
||||
# os.makedirs(subtitle_directory, exist_ok=True)
|
||||
# os.chdir(subtitle_directory)
|
||||
spead_find = ""
|
||||
speak_found = ""
|
||||
sprint(self.script_name,"green", "translation : "+file+" ")
|
||||
|
||||
# whisperx --language fr --compute_type float32 ../record/final_output_audio.mp3
|
||||
@@ -349,15 +453,17 @@ class Subtitle_translation:
|
||||
|
||||
file_noext = file.rsplit('.', 1)[0]
|
||||
with open(file_noext+".txt", "r") as thisfile:
|
||||
spead_find += thisfile.read().replace("'", "").replace('"', "").replace("\n", " ").replace(",", "")
|
||||
speak_found += thisfile.read().replace("'", "").replace('"', "").replace("\n", " ").replace(",", "")
|
||||
|
||||
# parties = file_noext.split('_') # Sépare la base du nom et le numéro + extension
|
||||
# num_ext = parties[-1] # Prend la dernière partie qui contient "007.mp3"
|
||||
spead_find = self.remove_repetitions(spead_find)
|
||||
self.all_subtitle += spead_find+"\n"
|
||||
num_ext = get_current_time()
|
||||
self.subtitle[str(num_ext)] = spead_find
|
||||
sprint(self.script_name,"yellow", "parole du streamer : \n" +spead_find)
|
||||
speak_found = self.remove_repetitions(speak_found)
|
||||
self.all_subtitle += speak_found+"\n"
|
||||
current_time = get_current_time()
|
||||
|
||||
self.subtitle[str(current_time)] = speak_found
|
||||
storage.write(self.filename_memory, str(current_time), speak_found)
|
||||
sprint(self.script_name,"yellow", "parole du streamer : \n" +speak_found)
|
||||
|
||||
# attention a No active speech found in audio
|
||||
# os.chdir("../")
|
||||
@@ -420,6 +526,7 @@ class Subtitle_translation:
|
||||
class IA_generator:
|
||||
def __init__(self,pathjson):
|
||||
self.script_name = "IA_generator"
|
||||
self.filename_memory = "IA_generator_" +get_current_date()
|
||||
self.pathjson = pathjson
|
||||
self.reload_json()
|
||||
self.subtitle = {}
|
||||
@@ -511,6 +618,7 @@ class IA_generator:
|
||||
|
||||
key = get_current_time()
|
||||
self.response_generation[str(key)] = textfinal
|
||||
storage.write(self.filename_memory, str(key), textfinal) #ecrire dans la mémoire fichier
|
||||
|
||||
def setnew_streamer_word_text(self, streamer_word_text):
|
||||
self.streamer_word = streamer_word_text
|
||||
@@ -581,17 +689,21 @@ class IA_generator:
|
||||
################### sendmessageTwitch ########################
|
||||
|
||||
class messageTwitch:
|
||||
def __init__(self, channel_name):
|
||||
|
||||
def __init__(self, config_user, channel_name):
|
||||
self.ia_running = True
|
||||
self.path_file_config_user = config_user
|
||||
self.channel_name = channel_name
|
||||
self.indexuser = 0
|
||||
with open("../config/user.json", 'r') as file:
|
||||
with open(self.path_file_config_user, 'r') as file:
|
||||
self.userjson = json.load(file)
|
||||
self.totaluser = len(self.userjson)
|
||||
|
||||
self.tw_acc_pseudo = get_value_json_list(self.indexuser, "tw_acc_pseudo", self.userjson)
|
||||
self.tw_acc_token = get_value_json_list(self.indexuser, "tw_acc_token", self.userjson)
|
||||
self.charactere = get_value_json_list(self.indexuser, "charactere", self.userjson)
|
||||
|
||||
self.respond_word = ""
|
||||
self.last_respond_word = ""
|
||||
|
||||
|
||||
def set_user(self,index_user):
|
||||
@@ -632,26 +744,44 @@ class messageTwitch:
|
||||
self.send_message_user(user1,"yo @"+pseudo2+" ^^")
|
||||
sleep(10)
|
||||
self.send_message_user(user1,"Heyyy cool ? @"+pseudo1+"")
|
||||
|
||||
|
||||
|
||||
def send_message_user(self,index_user, Message_text):
|
||||
hprint("green","start send_message_user")
|
||||
hprint("cyan","start send_message_user")
|
||||
self.set_user(index_user)
|
||||
command = '-pseudo "'+self.tw_acc_pseudo+'" -token "'+self.tw_acc_token+'" -twitchname "'+self.channel_name+'" -message " '+self.charactere+' '+Message_text+'"'
|
||||
message_tosend = 'python send_message.py '+command
|
||||
hprint("yellow",f"send message = "+str(message_tosend))
|
||||
subprocess.run(message_tosend, shell=True)
|
||||
hprint("yellow",f"Finnish send send_message_user index :" + str(index_user))
|
||||
self.send_message(Message_text)
|
||||
hprint("cyan",f"Finnish send send_message_user index :" + str(index_user))
|
||||
|
||||
|
||||
def send_message(self, Message_text):
|
||||
hprint("green","start send_message")
|
||||
hprint("cyan","start send_message")
|
||||
|
||||
command = '-pseudo "'+self.tw_acc_pseudo+'" -token "'+self.tw_acc_token+'" -twitchname "'+self.channel_name+'" -message " '+self.charactere+' '+Message_text+'"'
|
||||
message_tosend = 'python send_message.py '+command
|
||||
hprint("yellow",f"send message = "+str(message_tosend))
|
||||
message_tosend = 'python send_message.py '+ str(command)
|
||||
hprint("cyan",f"send message = "+str(message_tosend))
|
||||
subprocess.run(message_tosend, shell=True)
|
||||
hprint("yellow",f"Finnish send_message message")
|
||||
self.last_respond_word = Message_text
|
||||
hprint("cyan",f"Finnish send_message message")
|
||||
|
||||
|
||||
|
||||
# def main_loop_respond(self):
|
||||
# time.sleep(20) #wait starting script
|
||||
# sprint(self.script_name,"blue", "main_loop_ia imagine_response start")
|
||||
# try:
|
||||
# while self.ia_running:
|
||||
# # time.sleep(self.loop_timer_ia)
|
||||
# # sprint(self.script_name,"yellow",f"wait {self.loop_timer_ia}s main_loop_ia imagine_response.")
|
||||
# #self.respond_word = getvalue_file()
|
||||
# if(self.last_respond_word != self.respond_word):
|
||||
# self.send_message(self.respond_word)
|
||||
# else:
|
||||
# sprint(self.script_name,"yellow",f"génération déja créer")
|
||||
# except KeyboardInterrupt:
|
||||
# print("Arrêt du script.")
|
||||
# except Exception as e:
|
||||
# sprint(self.script_name,"red", "STOP main_loop_respond Error : "+ str(e))
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user