update update
This commit is contained in:
+171
-27
@@ -31,6 +31,9 @@
|
||||
<a class="nav-link navbar-sitemap-link" data-main-tab="interaction-tab" href="#" onclick="activateMainTab('interaction-tab'); return false;">
|
||||
<i class="fas fa-at me-1"></i>Interaction chat
|
||||
</a>
|
||||
<a class="nav-link navbar-sitemap-link" data-main-tab="clips-tab" href="#" onclick="activateMainTab('clips-tab'); return false;">
|
||||
<i class="fas fa-film me-1"></i>Clips
|
||||
</a>
|
||||
<a class="nav-link navbar-sitemap-link" data-main-tab="settings-tab" href="#" onclick="activateMainTab('settings-tab'); return false;">
|
||||
<i class="fas fa-sliders-h me-1"></i>Paramètres
|
||||
</a>
|
||||
@@ -75,6 +78,11 @@
|
||||
<i class="fas fa-at me-2"></i>Interaction chat
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="clips-tab" data-bs-toggle="tab" data-bs-target="#clips" type="button">
|
||||
<i class="fas fa-film me-2"></i>Clips
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="settings-tab" data-bs-toggle="tab" data-bs-target="#settings" type="button">
|
||||
<i class="fas fa-sliders-h me-2"></i>Paramètres
|
||||
@@ -196,21 +204,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-xl-4">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<div>
|
||||
<div class="fw-semibold">Envoi Messages Chat</div>
|
||||
<div class="small text-muted">Interrupteur global: autorise/bloque tout envoi sur Twitch.</div>
|
||||
</div>
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" id="chatMessageToggle" onchange="toggleChatMessage()">
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-2">
|
||||
<small class="text-muted" id="chatMessageStatus">Désactivé</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-xl-6">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<div>
|
||||
@@ -308,7 +301,12 @@
|
||||
<div class="col-md-6">
|
||||
<div class="card bg-secondary">
|
||||
<div class="card-header">
|
||||
<h5><i class="fas fa-microphone me-2"></i>Dernier Texte Détecté</h5>
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0"><i class="fas fa-microphone me-2"></i>Dernier Texte Détecté</h5>
|
||||
<select class="form-select form-select-sm" id="subtitles-flux-select" style="max-width: 220px;" onchange="onSubtitlesFluxChange()">
|
||||
<option value="-1">Flux…</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="alert alert-warning" id="last-subtitle">
|
||||
@@ -337,8 +335,11 @@
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="card bg-secondary">
|
||||
<div class="card-header">
|
||||
<h5><i class="fas fa-list me-2"></i>Historique des Sous-titres</h5>
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0"><i class="fas fa-list me-2"></i>Historique des Sous-titres</h5>
|
||||
<button class="btn btn-outline-light btn-sm" onclick="refreshSubtitlesAll()">
|
||||
<i class="fas fa-sync me-1"></i>Rafraîchir
|
||||
</button>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div id="subtitles-history" class="subtitle-history">
|
||||
@@ -348,6 +349,59 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-3 g-3">
|
||||
<div class="col-md-7">
|
||||
<div class="card bg-secondary">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0"><i class="fas fa-bolt me-2"></i>Règles (sous-titres → actions)</h5>
|
||||
<div class="d-flex gap-2">
|
||||
<button class="btn btn-outline-light btn-sm" onclick="refreshSubtitleRules()">
|
||||
<i class="fas fa-sync me-1"></i>Recharger
|
||||
</button>
|
||||
<button class="btn btn-success btn-sm" onclick="saveSubtitleRules()">
|
||||
<i class="fas fa-save me-1"></i>Sauvegarder
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-4">
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" id="subtitle-rules-enabled">
|
||||
<label class="form-check-label" for="subtitle-rules-enabled">Actif</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="border-secondary my-3">
|
||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
||||
<h6 class="mb-0"><i class="fas fa-list me-2"></i>Règles</h6>
|
||||
<button class="btn btn-primary btn-sm" onclick="addSubtitleRule()">
|
||||
<i class="fas fa-plus me-1"></i>Ajouter règle
|
||||
</button>
|
||||
</div>
|
||||
<div id="subtitle-rules" class="d-flex flex-column gap-2"></div>
|
||||
<div class="form-text text-muted mt-2">
|
||||
Déclenche une action quand un sous-titre contient un mot/texte.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<div class="card bg-secondary">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0"><i class="fas fa-clipboard-list me-2"></i>Logs règles</h5>
|
||||
<button class="btn btn-outline-light btn-sm" onclick="refreshSubtitleRulesLog()">
|
||||
<i class="fas fa-sync me-1"></i>Rafraîchir
|
||||
</button>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div id="subtitle-rules-log" class="subtitle-history">
|
||||
<div class="text-muted text-center">Aucun log</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Interaction Chat Tab -->
|
||||
@@ -377,8 +431,8 @@
|
||||
<div class="col-md-4">
|
||||
<label class="form-label small text-muted" for="interaction-mode">Mode</label>
|
||||
<select class="form-select form-select-sm" id="interaction-mode">
|
||||
<option value="predefined">Réponses préenregistrées (défaut)</option>
|
||||
<option value="tgpt">TGPT</option>
|
||||
<option value="predefined">Réponses préenregistrées</option>
|
||||
<option value="tgpt">TGPT (IA)</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
@@ -387,13 +441,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-3 mt-1">
|
||||
<div class="col-md-4">
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" id="interaction-tgpt-enabled">
|
||||
<label class="form-check-label" for="interaction-tgpt-enabled">TGPT activé</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-3 mt-1" id="interaction-tgpt-settings">
|
||||
<div class="col-md-5">
|
||||
<label class="form-label small text-muted" for="interaction-tgpt-preprompt">Préprompt TGPT (global)</label>
|
||||
<textarea class="form-control" id="interaction-tgpt-preprompt" rows="2" placeholder="Ex: Réponds brièvement en français."></textarea>
|
||||
@@ -457,6 +505,86 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Clips Tab -->
|
||||
<div class="tab-pane fade" id="clips" role="tabpanel">
|
||||
<div class="row g-3">
|
||||
<div class="col-lg-7">
|
||||
<div class="card bg-secondary">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0"><i class="fas fa-film me-2"></i>Créer un clip</h5>
|
||||
<button class="btn btn-outline-light btn-sm" onclick="prefillClipChannelFromActiveFlux()" title="Utiliser le flux actif">
|
||||
<i class="fas fa-wand-magic-sparkles me-1"></i>Auto
|
||||
</button>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<label class="form-label small text-muted" for="clips-user-select">Utilisateur (token)</label>
|
||||
<select class="form-select form-select-sm user-selector" id="clips-user-select">
|
||||
<option value="-1">Sélectionner un utilisateur...</option>
|
||||
</select>
|
||||
<div class="form-text text-muted">Le token doit avoir le scope <code>clips:edit</code>.</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label small text-muted" for="clips-channel-login">Chaîne Twitch (login)</label>
|
||||
<input class="form-control form-control-sm" id="clips-channel-login" type="text" placeholder="ex: exoticnaturees">
|
||||
<div class="form-text text-muted">Entrez le login sans URL. Le @ est accepté.</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check form-switch mt-4">
|
||||
<input class="form-check-input" type="checkbox" id="clips-has-delay">
|
||||
<label class="form-check-label" for="clips-has-delay">has_delay</label>
|
||||
</div>
|
||||
<div class="form-text text-muted">À activer si le stream a un délai (anti-streamsniping).</div>
|
||||
</div>
|
||||
<div class="col-12 d-flex gap-2">
|
||||
<button class="btn btn-success" onclick="createClip()">
|
||||
<i class="fas fa-scissors me-2"></i>Créer le clip
|
||||
</button>
|
||||
<button class="btn btn-outline-light" onclick="clearClipResult()">
|
||||
<i class="fas fa-eraser me-2"></i>Effacer
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="border-secondary my-3">
|
||||
|
||||
<div id="clips-result" class="d-none">
|
||||
<div class="alert alert-info mb-2">
|
||||
<div class="fw-semibold mb-1">Résultat</div>
|
||||
<div class="small">
|
||||
<div>Clip: <a id="clips-public-url" href="#" target="_blank" rel="noopener noreferrer">—</a></div>
|
||||
<div>Edit: <a id="clips-edit-url" href="#" target="_blank" rel="noopener noreferrer">—</a></div>
|
||||
<div class="text-muted mt-1">ID: <span id="clips-id">—</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-5">
|
||||
<div class="card bg-secondary">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0"><i class="fas fa-gears me-2"></i>Automatisation (futur)</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="small text-muted">
|
||||
Une base est prête côté API pour brancher une automatisation (ex: clip sur mot-clé, intervalle, événement).
|
||||
Pour l’instant, aucune boucle n’est lancée automatiquement.
|
||||
</div>
|
||||
<div class="mt-3">
|
||||
<button class="btn btn-outline-light btn-sm" onclick="checkClipAutomationStatus()">
|
||||
<i class="fas fa-circle-info me-1"></i>Statut
|
||||
</button>
|
||||
<div class="mt-2 small text-muted" id="clips-automation-status">—</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Settings Tab -->
|
||||
<div class="tab-pane fade" id="settings" role="tabpanel">
|
||||
<div class="card bg-secondary">
|
||||
@@ -542,6 +670,22 @@
|
||||
Enregistrer l'audio du stream
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-check mt-2">
|
||||
<input class="form-check-input" type="checkbox" id="send-messages" checked>
|
||||
<label class="form-check-label" for="send-messages">
|
||||
Autoriser l’envoi de messages sur ce stream
|
||||
</label>
|
||||
<div class="form-text text-muted">Contrôle par flux.</div>
|
||||
</div>
|
||||
<div class="form-check mt-2">
|
||||
<input class="form-check-input" type="checkbox" id="enable-ia" checked>
|
||||
<label class="form-check-label" for="enable-ia">
|
||||
Activer génération TGPT (IA) à partir des sous-titres
|
||||
</label>
|
||||
<div class="form-text text-muted">
|
||||
Si désactivé: pas de génération TGPT et pas d’envoi automatique des messages générés.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
|
||||
|
||||
Reference in New Issue
Block a user