const chatWindow = document.getElementById('chatWindow'); const userInput = document.getElementById('userInput'); const sendBtn = document.getElementById('sendBtn'); // Funzione per aggiungere un messaggio alla finestra della chat function addMessage(message, sender) { const messageElement = document.createElement('div'); messageElement.classList.add('message', sender); if (sender === 'bot') { const userIcon = document.createElement('div'); userIcon.classList.add('userIcon'); userIcon.innerHTML = 'Antonio'; // Cambia il percorso dell'icona messageElement.appendChild(userIcon); setItemWithExpiry('sessioneAttiva', true, 36000000); } const textElement = document.createElement('span'); textElement.textContent = message; messageElement.appendChild(textElement); chatWindow.appendChild(messageElement); chatWindow.scrollTop = chatWindow.scrollHeight; } function setItemWithExpiry(key, value, ttl) { const now = new Date(); const item = { value: value, expiry: now.getTime() + ttl, }; localStorage.setItem(key, JSON.stringify(item)); } function getItemWithExpiry(key) { const itemStr = localStorage.getItem(key); if (!itemStr) { return null; } const item = JSON.parse(itemStr); const now = new Date(); if (now.getTime() > item.expiry) { localStorage.removeItem(key); return null; } return item.value; } function showWelcomeMessage() { const domandeProposte = [ 'perché vi candidate?', 'chi siete?', 'cosa fa il Consiglio?', 'chi compone il Consiglio?', 'quanti membri nel nostro Consiglio?', 'percepirete un compenso?', 'quando si vota?', 'come si vota?', 'dove si vota?', 'chi può votare?', 'perché è importante?', 'che obiettivi avete?', 'quali poteri ha il Consiglio?', 'cosa è Un Click per la Scuola?', 'quanto è importante un rappresentante?', 'qual è il vostro programma?' ]; const domandeProposteId = [ 'perché ti candidi?', 'chi sei?', 'dove vivi?', 'cosa fa il Consiglio?', 'chi compone il Consiglio?', 'quanti membri nel nostro Consiglio?', 'percepisci un compenso?', 'quando si vota?', 'come si vota?', 'dove si vota?', 'chi può votare?', 'perché è importante?', 'che obiettivi hai?', 'quali poteri ha il Consiglio?', 'cosa è Un Click per la Scuola?' ]; // Funzione per mescolare l'array function shuffleArray(array) { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } return array; } // Mescola l'array e prendi le prime 3 domande const domandeRandom = shuffleArray(domandeProposte).slice(0, 1); const sessioneAttiva = getItemWithExpiry('sessioneAttiva'); if (sessioneAttiva == null) { // Aggiungi un messaggio vuoto per il bot addMessage('', 'bot'); const lastMessage = chatWindow.lastChild.querySelector('span'); const welcomeText = 'Un sentito grazie a tutti i genitori che hanno partecipato alle elezioni, dedicando tempo e attenzione al futuro della nostra comunità scolastica. La vostra partecipazione è un segno importante di impegno e collaborazione.

Indipendentemente dall\'esito delle elezioni, vogliamo assicurarvi che i candidati eletti saranno al servizio della scuola, degli studenti e delle famiglie, lavorando con dedizione per costruire un ambiente educativo sempre migliore. Insieme, possiamo fare la differenza per il bene dei nostri ragazzi.

Grazie per il vostro sostegno!'; // Applica l'effetto typing showTypingEffect(welcomeText, lastMessage); // Salva la sessione attiva // 3600000 1 ora setItemWithExpiry('sessioneAttiva', true, 3600000); } else { // Esempi di domanda da proporre // Aggiungi un messaggio vuoto per il bot addMessage('', 'bot'); const lastMessage = chatWindow.lastChild.querySelector('span'); const welcomeText = 'Un sentito grazie a tutti i genitori che hanno partecipato alle elezioni, dedicando tempo e attenzione al futuro della nostra comunità scolastica. La vostra partecipazione è un segno importante di impegno e collaborazione.

Indipendentemente dall\'esito delle elezioni, vogliamo assicurarvi che i candidati eletti saranno al servizio della scuola, degli studenti e delle famiglie, lavorando con dedizione per costruire un ambiente educativo sempre migliore. Insieme, possiamo fare la differenza per il bene dei nostri ragazzi.

Grazie per il vostro sostegno!'; // Applica l'effetto typing showTypingEffect(welcomeText, lastMessage); } } function sendMessageFromLink(question) { userInput.value = question; sendMessage(); } // Funzione per l'effetto di typing function showTypingEffect(html, element) { let index = 0; const interval = setInterval(() => { if (index < html.length) { element.innerHTML = html.substring(0, index + 1); // Usa innerHTML per aggiornare gradualmente il contenuto index++; chatWindow.scrollTop = chatWindow.scrollHeight; } else { clearInterval(interval); } }, 15); } // Funzione per inviare un messaggio function sendMessage() { const message = userInput.value; if (message.trim() !== "") { addMessage(message, 'user'); userInput.value = ""; // Mostra un indicatore di typing const botMessageElement = document.createElement('div'); botMessageElement.classList.add('message', 'bot'); botMessageElement.innerHTML = '
'; chatWindow.appendChild(botMessageElement); // Simula una chiamata al backend fetch('/cdibot/bot.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ domanda: message }) }) .then(response => response.json()) .then(data => { const loader = botMessageElement.querySelector('.loaderchatbot'); loader.style.opacity = 0; setTimeout(() => { loader.remove(); const responseTextStr = data.risposta; const responseTextArr = responseTextStr.split("<|>"); const responseText = responseTextArr[1]; const responseTokens = responseTextArr[0]; // Scrivi log addlog(message, responseText, responseTokens); // Aggiungi il testo della risposta e l'icona addMessage('', 'bot'); const lastMessage = chatWindow.lastChild.querySelector('span'); showTypingEffect(responseText, lastMessage); }, 500); }) .catch(error => { botMessageElement.textContent = "Non riesco a connettermi alla mia mente :)"; }); ; chatWindow.scrollTop = chatWindow.scrollHeight; window.scrollTo({top: document.getElementById('chat').offsetTop-120, behavior: 'smooth'}); } } function addlog(domanda, risposta, tokens) { const endpoint = '/it'; $.ajax({ url: endpoint, method: 'POST', data: { action: 'addlog', domanda: domanda, risposta: risposta, tokens: tokens, _type_: 1 }, success: function(data) { if (data) { } else { //console.error('La risposta non contiene il campo html atteso.'); } }, error: function(jqXHR, textStatus, errorThrown) { //console.error('Errore nella richiesta AJAX:', textStatus, errorThrown); } }); } // Evento click sul pulsante Invia sendBtn.addEventListener('click', sendMessage); // Evento invio tramite il tasto Enter userInput.addEventListener('keypress', function(e) { if (e.key === 'Enter') { sendMessage(); } }); // Mostra il messaggio di benvenuto all'avvio window.onload = function() { showWelcomeMessage(); };