big update

This commit is contained in:
gpatruno
2026-04-22 22:42:36 +02:00
parent 68cf59ae75
commit 7b2135bfed
25 changed files with 2661 additions and 564 deletions
+81 -17
View File
@@ -668,7 +668,13 @@ class Subtitle_translation:
sprint(self.script_name,"green","finish create_subtitle")
def main_loop(self):
time.sleep(25)
# Attente de démarrage interruptible (si stop() est appelé pendant l'attente)
for _ in range(250): # 25s en pas de 0.1s
if not self.is_running:
return
time.sleep(0.1)
if not self.is_running:
return
sprint(self.script_name,"green", "start main boucle_traitement record")
# debug_print("v", "main_loop record Start", self.type_debug,self.script_name)
@@ -876,7 +882,13 @@ class IA_generator:
def main_loop_ia(self):
time.sleep(20)
# Attente de démarrage interruptible
for _ in range(200): # 20s en pas de 0.1s
if not self.ia_running:
return
time.sleep(0.1)
if not self.ia_running:
return
# sprint(self.script_name,"blue", "main_loop_ia imagine_response start")
# debug_print("v", "main_loop_ia imagine_response start", self.type_debug,self.script_name)
try:
@@ -973,36 +985,67 @@ class messageTwitch:
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)
# Se positionner sur le 1er utilisateur activé
self.indexuser = self._first_enabled_index()
self._apply_user(self.indexuser)
self.ram_msgnow = ""
self.generation_text = ""
self.last_respond_word = ""
def set_user(self,index_user):
def _is_enabled(self, index_user: int) -> bool:
try:
u = self.userjson[index_user]
if isinstance(u, dict):
return bool(u.get("enabled", True))
except Exception:
pass
return True
def _bypass_antiloop(self, index_user: int) -> bool:
try:
u = self.userjson[index_user]
if isinstance(u, dict):
return bool(u.get("interaction_bypass_antiloop", False))
except Exception:
pass
return False
def _first_enabled_index(self) -> int:
for i in range(self.totaluser):
if self._is_enabled(i):
return i
return 0
def _next_enabled_index(self, start_index: int) -> int:
if self.totaluser <= 0:
return 0
for step in range(1, self.totaluser + 1):
i = (start_index + step) % self.totaluser
if self._is_enabled(i):
return i
return start_index
def _apply_user(self, index_user: int):
self.indexuser = index_user
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)
def set_user(self, index_user):
# Si l'utilisateur demandé est désactivé, on l'autorise seulement si bypass anti-boucle est actif
if not self._is_enabled(index_user) and not self._bypass_antiloop(index_user):
index_user = self._next_enabled_index(index_user)
self._apply_user(index_user)
def stop(self):
self.message_running = False
def change_user(self):
# commented for pausing
debug_print("v", "Changement User Twitch", self.type_debug, self.script_name)
if (self.totaluser != 1): # si la liste ne fait pas que 1 de taille
if(self.totaluser-1 > self.indexuser): # si la taille de liste est plus grande que lindex
self.indexuser = self.indexuser + 1
else :
self.indexuser = 0
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._apply_user(self._next_enabled_index(self.indexuser))
def conversation(self):
@@ -1041,7 +1084,22 @@ class messageTwitch:
# Si web_interface n'est pas disponible, on continue normalement
pass
command = '-pseudo "'+self.tw_acc_pseudo+'" -token "'+self.tw_acc_token+'" -twitchname "'+self.channel_name+'" -message " '+self.charactere+' '+Message_text+'"'
# Limite globale de taille des messages Twitch
max_chars = 100
try:
cfg_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "config", "config.json")
with open(cfg_path, "r", encoding="utf-8") as f:
cfg = json.load(f) or {}
max_chars = int(cfg.get("twitch_message_max_chars", 100))
except Exception:
max_chars = 100
payload = f"{self.charactere} {Message_text}".strip()
if max_chars > 0 and len(payload) > max_chars:
cut = max(0, max_chars - 3)
payload = payload[:cut].rstrip() + "..."
command = '-pseudo "'+self.tw_acc_pseudo+'" -token "'+self.tw_acc_token+'" -twitchname "'+self.channel_name+'" -message " '+payload+'"'
# Utiliser le Python de l'environnement virtuel
python_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'env', 'bin', 'python')
@@ -1113,7 +1171,13 @@ class messageTwitch:
def start_main_loop_respond(self):
time.sleep(40) #wait starting script
# Attente de démarrage interruptible (si stop() est appelé pendant l'attente)
for _ in range(400): # 40s en pas de 0.1s
if not self.message_running:
return
time.sleep(0.1)
if not self.message_running:
return
sprint(self.script_name,"blue", "main_loop_respond start")
try:
while self.message_running: