message achoix
This commit is contained in:
+6
-6
@@ -1,12 +1,12 @@
|
||||
[
|
||||
{
|
||||
"tw_acc_pseudo": "exoticnaturees",
|
||||
"tw_acc_token": "oauth:57ht6937k5du8bex534eetd1epydvg",
|
||||
"charactere": "Kappa"
|
||||
"tw_acc_pseudo": "ForFunIlluminaty",
|
||||
"tw_acc_token": "oauth:8ushh9h0qwywqznsulbdr66wt2xjht",
|
||||
"charactere": ")"
|
||||
},
|
||||
{
|
||||
"tw_acc_pseudo": "ForFunIlluminaty",
|
||||
"tw_acc_token": "oauth:c5zoigy66klbfldh54h6kapv118mif",
|
||||
"charactere": "🤖"
|
||||
"tw_acc_pseudo": "SnowLunaSoft",
|
||||
"tw_acc_token": "oauth:l348b8e7g7srjnc8trnxjqe2i2boq2",
|
||||
"charactere": "Kappa"
|
||||
}
|
||||
]
|
||||
Submodule
+1
Submodule debug_ia_clone added at bb743c5722
@@ -1008,7 +1008,10 @@ class messageTwitch:
|
||||
def send_message(self, Message_text):
|
||||
try:
|
||||
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 '+ str(command)
|
||||
|
||||
# Utiliser le Python de l'environnement virtuel
|
||||
python_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'env', 'bin', 'python')
|
||||
message_tosend = python_path + ' send_message.py '+ str(command)
|
||||
|
||||
debug_print("d", f"send message = "+str(message_tosend), self.type_debug, self.script_name)
|
||||
sprint(self.script_name,"cyan",f"send message = "+str(message_tosend))
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,14 @@
|
||||
import asyncio
|
||||
import argparse
|
||||
import sys
|
||||
import os
|
||||
from urllib.parse import urlparse
|
||||
|
||||
# Ajouter le chemin de l'environnement virtuel
|
||||
venv_path = os.path.join(os.path.dirname(__file__), 'env', 'lib', 'python3.10', 'site-packages')
|
||||
if venv_path not in sys.path:
|
||||
sys.path.insert(0, venv_path)
|
||||
|
||||
from pytmi import Client # Assurez-vous que c'est le nom correct de votre module et qu'il est correctement installé.
|
||||
|
||||
async def send_message_to_twitch_stream(pseudo, token, stream_url, message):
|
||||
@@ -20,6 +28,9 @@ async def send_message_to_twitch_stream(pseudo, token, stream_url, message):
|
||||
# Attendre un peu avant de se déconnecter pour s'assurer que le message est envoyé
|
||||
await asyncio.sleep(2)
|
||||
print("Déconnexion...")
|
||||
except AssertionError as e:
|
||||
print(f"Erreur d'assertion (client déjà connecté ou paramètres invalides): {e}")
|
||||
print("Vérifiez que le token et le pseudo sont corrects")
|
||||
except Exception as e:
|
||||
print(f"Erreur lors de l'interaction avec Twitch: {type(e).__name__}, {e}")
|
||||
except AttributeError as e:
|
||||
|
||||
@@ -8,6 +8,20 @@ import sys
|
||||
import subprocess
|
||||
import argparse
|
||||
|
||||
# Configurer l'environnement Python pour l'interface web
|
||||
def setup_environment():
|
||||
"""Configurer l'environnement Python"""
|
||||
# Ajouter le chemin de l'environnement virtuel au PYTHONPATH
|
||||
venv_path = os.path.join(os.path.dirname(__file__), 'env', 'lib', 'python3.10', 'site-packages')
|
||||
if venv_path not in sys.path:
|
||||
sys.path.insert(0, venv_path)
|
||||
print(f"✓ Environnement Python configuré: {venv_path}")
|
||||
|
||||
# Ajouter le répertoire courant au PYTHONPATH
|
||||
current_dir = os.path.dirname(__file__)
|
||||
if current_dir not in sys.path:
|
||||
sys.path.insert(0, current_dir)
|
||||
|
||||
def check_dependencies():
|
||||
"""Vérifier que les dépendances sont installées"""
|
||||
try:
|
||||
|
||||
+59
-1
@@ -735,5 +735,63 @@ body {
|
||||
|
||||
.user-status.testing {
|
||||
background-color: var(--warning-color);
|
||||
animation: pulse 1s infinite;
|
||||
}
|
||||
|
||||
/* Sélecteurs d'utilisateurs */
|
||||
.user-selector {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.user-selector .form-label {
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
color: var(--text-secondary);
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.user-selector .form-select {
|
||||
background-color: var(--secondary-bg);
|
||||
border: 1px solid var(--border-color);
|
||||
color: var(--text-primary);
|
||||
border-radius: 6px;
|
||||
font-size: 0.875rem;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.user-selector .form-select:focus {
|
||||
background-color: var(--secondary-bg);
|
||||
border-color: var(--accent-color);
|
||||
color: var(--text-primary);
|
||||
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
|
||||
}
|
||||
|
||||
.user-selector .form-select option {
|
||||
background-color: var(--secondary-bg);
|
||||
color: var(--text-primary);
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
/* Amélioration des sélecteurs dans le chat */
|
||||
.chat-container .form-select {
|
||||
background-color: var(--tertiary-bg);
|
||||
border: 1px solid var(--border-color);
|
||||
color: var(--text-primary);
|
||||
font-size: 0.8rem;
|
||||
padding: 0.375rem 0.75rem;
|
||||
}
|
||||
|
||||
.chat-container .form-select:focus {
|
||||
background-color: var(--tertiary-bg);
|
||||
border-color: var(--accent-color);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
/* Animation pour les sélecteurs */
|
||||
.form-select {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.form-select:hover {
|
||||
border-color: var(--accent-color);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
+107
-27
@@ -327,12 +327,24 @@ async function savePrompts() {
|
||||
// Envoi d'un message personnalisé
|
||||
async function sendCustomMessage() {
|
||||
const message = document.getElementById('custom-message').value.trim();
|
||||
const userId = parseInt(document.getElementById('custom-message-user').value);
|
||||
|
||||
console.log('Debug - Message:', message);
|
||||
console.log('Debug - User ID:', userId);
|
||||
console.log('Debug - User ID type:', typeof userId);
|
||||
console.log('Debug - Selector value:', document.getElementById('custom-message-user').value);
|
||||
|
||||
if (!message) {
|
||||
showToast('Veuillez entrer un message', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
// Vérifier si l'utilisateur est valide (pas NaN et dans la plage des utilisateurs)
|
||||
if (isNaN(userId) || userId < 0 || userId >= currentUsers.length) {
|
||||
showToast('Veuillez sélectionner un utilisateur valide', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(`${API_BASE}/api/send-message`, {
|
||||
method: 'POST',
|
||||
@@ -341,7 +353,8 @@ async function sendCustomMessage() {
|
||||
},
|
||||
body: JSON.stringify({
|
||||
message: message,
|
||||
channel: 'default'
|
||||
channel: 'default',
|
||||
user_id: userId
|
||||
})
|
||||
});
|
||||
|
||||
@@ -364,12 +377,19 @@ async function sendCustomMessage() {
|
||||
async function sendNextMessage() {
|
||||
const nextMessageElement = document.getElementById('next-message');
|
||||
const message = nextMessageElement.textContent.trim();
|
||||
const userId = parseInt(document.getElementById('custom-message-user').value);
|
||||
|
||||
if (message === 'Aucun message en attente') {
|
||||
showToast('Aucun message à envoyer', 'warning');
|
||||
return;
|
||||
}
|
||||
|
||||
// Vérifier si l'utilisateur est valide (pas NaN et dans la plage des utilisateurs)
|
||||
if (isNaN(userId) || userId < 0 || userId >= currentUsers.length) {
|
||||
showToast('Veuillez sélectionner un utilisateur valide', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(`${API_BASE}/api/send-message`, {
|
||||
method: 'POST',
|
||||
@@ -378,7 +398,8 @@ async function sendNextMessage() {
|
||||
},
|
||||
body: JSON.stringify({
|
||||
message: message,
|
||||
channel: 'default'
|
||||
channel: 'default',
|
||||
user_id: userId
|
||||
})
|
||||
});
|
||||
|
||||
@@ -399,6 +420,14 @@ async function sendNextMessage() {
|
||||
|
||||
// Envoi de la dernière génération
|
||||
async function sendLastGeneration() {
|
||||
const userId = parseInt(document.getElementById('custom-message-user').value);
|
||||
|
||||
// Vérifier si l'utilisateur est valide (pas NaN et dans la plage des utilisateurs)
|
||||
if (isNaN(userId) || userId < 0 || userId >= currentUsers.length) {
|
||||
showToast('Veuillez sélectionner un utilisateur valide', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(`${API_BASE}/api/generations`);
|
||||
const generations = await response.json();
|
||||
@@ -418,7 +447,8 @@ async function sendLastGeneration() {
|
||||
},
|
||||
body: JSON.stringify({
|
||||
message: lastGeneration,
|
||||
channel: 'default'
|
||||
channel: 'default',
|
||||
user_id: userId
|
||||
})
|
||||
});
|
||||
|
||||
@@ -839,8 +869,21 @@ function addSystemMessage(message) {
|
||||
// Envoi d'un message via le chat
|
||||
async function sendChatMessage() {
|
||||
const message = chatInput.value.trim();
|
||||
const userId = parseInt(document.getElementById('chat-user-select').value);
|
||||
|
||||
console.log('Debug - Chat Message:', message);
|
||||
console.log('Debug - Chat User ID:', userId);
|
||||
console.log('Debug - Chat User ID type:', typeof userId);
|
||||
console.log('Debug - Chat Selector value:', document.getElementById('chat-user-select').value);
|
||||
|
||||
if (!message) return;
|
||||
|
||||
// Vérifier si l'utilisateur est valide (pas NaN et dans la plage des utilisateurs)
|
||||
if (isNaN(userId) || userId < 0 || userId >= currentUsers.length) {
|
||||
showToast('Veuillez sélectionner un utilisateur valide', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
// Trouver le premier flux actif
|
||||
const activeFlux = bot_controller.flux_list.find(flux => flux.active);
|
||||
if (!activeFlux) {
|
||||
@@ -855,7 +898,8 @@ async function sendChatMessage() {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
message: message
|
||||
message: message,
|
||||
user_id: userId
|
||||
})
|
||||
});
|
||||
|
||||
@@ -963,6 +1007,7 @@ async function loadUsers() {
|
||||
const response = await fetch(`${API_BASE}/api/config/users`);
|
||||
currentUsers = await response.json();
|
||||
renderUsers();
|
||||
updateUserSelectors(); // Mettre à jour les sélecteurs après le chargement
|
||||
} catch (error) {
|
||||
console.error('Erreur lors du chargement des utilisateurs:', error);
|
||||
}
|
||||
@@ -1010,6 +1055,53 @@ function renderUsers() {
|
||||
</div>
|
||||
</div>
|
||||
`).join('');
|
||||
|
||||
// Mettre à jour les sélecteurs d'utilisateurs
|
||||
updateUserSelectors();
|
||||
}
|
||||
|
||||
// Mettre à jour les sélecteurs d'utilisateurs dans l'interface
|
||||
function updateUserSelectors() {
|
||||
console.log('Debug - updateUserSelectors called');
|
||||
console.log('Debug - currentUsers:', currentUsers);
|
||||
|
||||
const selectors = [
|
||||
'custom-message-user',
|
||||
'chat-user-select'
|
||||
];
|
||||
|
||||
selectors.forEach(selectorId => {
|
||||
const selector = document.getElementById(selectorId);
|
||||
if (selector) {
|
||||
console.log(`Debug - Updating selector: ${selectorId}`);
|
||||
|
||||
// Sauvegarder la sélection actuelle
|
||||
const currentValue = selector.value;
|
||||
console.log(`Debug - Current value: ${currentValue}`);
|
||||
|
||||
// Vider le sélecteur avec une valeur par défaut différente
|
||||
selector.innerHTML = '<option value="-1">Sélectionner un utilisateur...</option>';
|
||||
|
||||
// Ajouter les utilisateurs
|
||||
currentUsers.forEach((user, index) => {
|
||||
const option = document.createElement('option');
|
||||
option.value = index.toString(); // Convertir en chaîne
|
||||
option.textContent = `${user.tw_acc_pseudo} ${user.charactere}`;
|
||||
selector.appendChild(option);
|
||||
console.log(`Debug - Added option: value=${index.toString()}, text=${user.tw_acc_pseudo} ${user.charactere}`);
|
||||
});
|
||||
|
||||
// Restaurer la sélection si elle était valide
|
||||
if (currentValue && currentValue !== '-1' && currentValue !== '0') {
|
||||
selector.value = currentValue;
|
||||
console.log(`Debug - Restored value: ${currentValue}`);
|
||||
}
|
||||
} else {
|
||||
console.log(`Debug - Selector not found: ${selectorId}`);
|
||||
}
|
||||
});
|
||||
|
||||
console.log('Debug - Selectors updated');
|
||||
}
|
||||
|
||||
// Ouvrir le modal pour ajouter un utilisateur
|
||||
@@ -1054,11 +1146,11 @@ async function saveUser() {
|
||||
}
|
||||
|
||||
try {
|
||||
let response;
|
||||
if (userId === '') {
|
||||
// Ajouter un nouvel utilisateur
|
||||
response = await fetch(`${API_BASE}/api/config/users`, {
|
||||
method: 'POST',
|
||||
const url = userId ? `${API_BASE}/api/config/users/${userId}` : `${API_BASE}/api/config/users`;
|
||||
const method = userId ? 'PUT' : 'POST';
|
||||
|
||||
const response = await fetch(url, {
|
||||
method: method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
@@ -1068,33 +1160,20 @@ async function saveUser() {
|
||||
charactere: charactere
|
||||
})
|
||||
});
|
||||
} else {
|
||||
// Modifier un utilisateur existant
|
||||
response = await fetch(`${API_BASE}/api/config/users/${userId}`, {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
tw_acc_pseudo: pseudo,
|
||||
tw_acc_token: token,
|
||||
charactere: charactere
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
if (result.success) {
|
||||
showToast(userId === '' ? 'Utilisateur ajouté' : 'Utilisateur modifié', 'success');
|
||||
showToast(userId ? 'Utilisateur modifié' : 'Utilisateur ajouté', 'success');
|
||||
bootstrap.Modal.getInstance(document.getElementById('addUserModal')).hide();
|
||||
await loadUsers();
|
||||
updateUserSelectors(); // Mettre à jour les sélecteurs
|
||||
} else {
|
||||
showToast(result.error || 'Erreur lors de la sauvegarde', 'error');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Erreur:', error);
|
||||
showToast('Erreur lors de la sauvegarde de l\'utilisateur', 'error');
|
||||
showToast('Erreur lors de la sauvegarde', 'error');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1112,13 +1191,14 @@ async function deleteUser(userId) {
|
||||
const result = await response.json();
|
||||
|
||||
if (result.success) {
|
||||
showToast('Utilisateur supprimé avec succès', 'success');
|
||||
showToast('Utilisateur supprimé', 'success');
|
||||
await loadUsers();
|
||||
updateUserSelectors(); // Mettre à jour les sélecteurs
|
||||
} else {
|
||||
showToast(result.error || 'Erreur lors de la suppression', 'error');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Erreur:', error);
|
||||
showToast('Erreur lors de la suppression de l\'utilisateur', 'error');
|
||||
showToast('Erreur lors de la suppression', 'error');
|
||||
}
|
||||
}
|
||||
@@ -140,6 +140,12 @@
|
||||
<h5><i class="fas fa-keyboard me-2"></i>Envoyer Message Personnalisé</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="mb-3">
|
||||
<label for="custom-message-user" class="form-label">Utilisateur</label>
|
||||
<select class="form-select user-selector" id="custom-message-user">
|
||||
<option value="-1">Sélectionner un utilisateur...</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<textarea class="form-control" id="custom-message" rows="3" placeholder="Tapez votre message ici..."></textarea>
|
||||
</div>
|
||||
@@ -259,6 +265,12 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<div class="mb-2">
|
||||
<label for="chat-user-select" class="form-label small">Utilisateur</label>
|
||||
<select class="form-select form-select-sm user-selector" id="chat-user-select">
|
||||
<option value="-1">Sélectionner un utilisateur...</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" id="chat-input" placeholder="Tapez un message..." disabled>
|
||||
<button class="btn btn-primary" type="button" onclick="sendChatMessage()" disabled>
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Script de test pour vérifier l'envoi de messages
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Ajouter le chemin vers les modules
|
||||
sys.path.append('.')
|
||||
|
||||
from fonction.first_class import messageTwitch
|
||||
|
||||
def test_send_message():
|
||||
"""Test de l'envoi de message"""
|
||||
try:
|
||||
# Créer une instance de messageTwitch
|
||||
msg_bot = messageTwitch("config/user.json", "test_channel")
|
||||
|
||||
# Tester l'envoi d'un message
|
||||
print("Test d'envoi de message...")
|
||||
msg_bot.send_message("Test message from bot")
|
||||
print("✓ Test réussi !")
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ Erreur lors du test: {e}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("🧪 Test de l'envoi de messages")
|
||||
print("=" * 40)
|
||||
|
||||
if test_send_message():
|
||||
print("\n✅ Tous les tests sont passés !")
|
||||
else:
|
||||
print("\n❌ Certains tests ont échoué.")
|
||||
+11
-3
@@ -7,6 +7,11 @@ import time
|
||||
from datetime import datetime
|
||||
import sys
|
||||
|
||||
# Ajouter le chemin de l'environnement virtuel au PYTHONPATH
|
||||
venv_path = os.path.join(os.path.dirname(__file__), 'env', 'lib', 'python3.10', 'site-packages')
|
||||
if venv_path not in sys.path:
|
||||
sys.path.insert(0, venv_path)
|
||||
|
||||
# Import des classes du bot
|
||||
sys.path.append('.')
|
||||
from fonction.first_class import RecordTwitch, Subtitle_translation, IA_generator, messageTwitch, TwitchChatBot, storage
|
||||
@@ -335,6 +340,7 @@ def send_message():
|
||||
data = request.json
|
||||
message = data.get('message')
|
||||
channel = data.get('channel', 'default')
|
||||
user_id = data.get('user_id', 0) # Nouveau paramètre pour choisir l'utilisateur
|
||||
|
||||
if not message:
|
||||
return jsonify({'error': 'Message requis'}), 400
|
||||
@@ -342,7 +348,8 @@ def send_message():
|
||||
# Trouver le bot de message pour ce canal
|
||||
try:
|
||||
msg_bot = messageTwitch("config/user.json", channel)
|
||||
msg_bot.send_message(message)
|
||||
# Utiliser send_message_user au lieu de send_message pour spécifier l'utilisateur
|
||||
msg_bot.send_message_user(user_id, message)
|
||||
return jsonify({'success': True})
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
@@ -393,6 +400,7 @@ def send_chat_message(flux_id):
|
||||
"""Envoyer un message dans le chat d'un flux spécifique"""
|
||||
data = request.json
|
||||
message = data.get('message', '')
|
||||
user_id = data.get('user_id', 0) # Nouveau paramètre pour choisir l'utilisateur
|
||||
|
||||
if not message:
|
||||
return jsonify({'error': 'Message requis'}), 400
|
||||
@@ -408,9 +416,9 @@ def send_chat_message(flux_id):
|
||||
if not flux:
|
||||
return jsonify({'error': 'Flux non trouvé'}), 404
|
||||
|
||||
# Envoyer le message
|
||||
# Envoyer le message avec l'utilisateur spécifié
|
||||
msg_bot = messageTwitch("config/user.json", flux['twitchname'])
|
||||
msg_bot.send_message(message)
|
||||
msg_bot.send_message_user(user_id, message)
|
||||
|
||||
return jsonify({'success': True})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user