(function() { const scripts = document.getElementsByTagName('script'); let userType = 'guest'; let token = '688845aa31765'; let back_php = 'https://chat.rezpect.xyz/chat/chat_handler.php?prj=hs&lang=ru&user=guest&token='; const styles = ` #chat-button { position: fixed; bottom: 20px; right: 20px; width: 60px; height: 60px; background: #007bff; border: none; border-radius: 50%; color: white; font-size: 24px; cursor: pointer; z-index: 9999; box-shadow: 0 2px 10px rgba(0,0,0,0.2); } #chat-window { display: none; position: fixed; bottom: 90px; right: 20px; width: 350px; height: 400px; background: white; border: 1px solid #ccc; border-radius: 10px; z-index: 9999; box-shadow: 0 5px 15px rgba(0,0,0,0.3); } #chat-header { background: #007bff; color: white; padding: 15px; border-radius: 10px 10px 0 0; font-weight: bold; } #chat-messages { height: 280px; padding: 10px; overflow-y: auto; border-bottom: 1px solid #eee; } #chat-input-area { display: flex; padding: 10px; } #chat-input { flex: 1; border: 1px solid #ccc; padding: 8px; border-radius: 5px; outline: none; } #chat-send { margin-left: 5px; padding: 8px 15px; background: #007bff; color: white; border: none; border-radius: 5px; cursor: pointer; } .message { color: black; margin-bottom: 10px; padding: 8px; border-radius: 5px; white-space: pre-wrap; } .user-message, .guest-message { background: #e3f2fd; text-align: right; } .manager-message { background: #f5f5f5; } .typing-message { background: #f0f8ff; color: #666; font-style: italic; } `; if (!getCookie('chat_token')) { document.cookie = "chat_token=" + token; } else { token = getCookie('chat_token'); } const styleSheet = document.createElement('style'); styleSheet.textContent = styles; document.head.appendChild(styleSheet); const chatButton = document.createElement('button'); chatButton.id = 'chat-button'; chatButton.innerHTML = 'πŸ’¬'; const chatWindow = document.createElement('div'); chatWindow.id = 'chat-window'; chatWindow.innerHTML = `
Π§Π°Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ
`; document.body.appendChild(chatButton); document.body.appendChild(chatWindow); const messagesDiv = document.getElementById('chat-messages'); const inputField = document.getElementById('chat-input'); const sendButton = document.getElementById('chat-send'); let lastMessageCount = 0; let waitingForResponse = false; let typingTimeout = null; let typingElement = null; let typingDots = 0; let typingInterval = null; function addMessage(text, type) { const messageDiv = document.createElement('div'); messageDiv.className = `message ${type}-message`; messageDiv.textContent = text; messagesDiv.appendChild(messageDiv); messagesDiv.scrollTop = messagesDiv.scrollHeight; return messageDiv; } function showTyping() { if (typingElement) return; typingElement = addMessage('ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚', 'typing'); typingDots = 0; typingInterval = setInterval(() => { typingDots = (typingDots + 1) % 4; typingElement.textContent = 'ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚' + '.'.repeat(typingDots); }, 500); } function hideTyping() { if (typingElement) { typingElement.remove(); typingElement = null; } if (typingInterval) { clearInterval(typingInterval); typingInterval = null; } if (typingTimeout) { clearTimeout(typingTimeout); typingTimeout = null; } waitingForResponse = false; } function parseMessages(data) { const messages = []; const lines = data.split('\n'); let currentMessage = null; for (let line of lines) { if (line.startsWith('user:(guest) ')) { if (currentMessage) messages.push(currentMessage); currentMessage = { type: 'guest', text: line.substring(12) }; } else if (line.startsWith('user: ')) { if (currentMessage) messages.push(currentMessage); currentMessage = { type: 'user', text: line.substring(6) }; } else if (line.startsWith('manager: ')) { if (currentMessage) messages.push(currentMessage); currentMessage = { type: 'manager', text: line.substring(9) }; } else if (currentMessage && line.trim()) { currentMessage.text += '\n' + line; } } if (currentMessage) messages.push(currentMessage); return messages; } function loadMessages() { const headers = new Headers(); headers.append('Content-Type', 'application/x-www-form-urlencoded'); fetch(back_php + token + '&action=load', { method: 'GET', headers: headers, }) .then(response => response.text()) .then(data => { const messages = parseMessages(data); if (messages.length !== lastMessageCount) { const hadManagerResponse = messages.length > lastMessageCount && messages[messages.length - 1].type === 'manager'; if (hadManagerResponse && waitingForResponse) { hideTyping(); } messagesDiv.innerHTML = ''; messages.forEach(msg => { addMessage(msg.text, msg.type); }); lastMessageCount = messages.length; } }) .catch(error => { console.error('Ошибка Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сообщСний:', error); }); } function sendMessage() { const headers = new Headers(); headers.append('Content-Type', 'application/x-www-form-urlencoded'); const message = inputField.value.trim(); if (!message) return; inputField.value = ''; waitingForResponse = true; typingTimeout = setTimeout(() => { if (waitingForResponse) { showTyping(); } }, 2000); fetch(back_php + token, { method: 'POST', headers: headers, body: 'message=' + encodeURIComponent(message) + '&user_type=' + encodeURIComponent(userType) }) .then(response => response.text()) .then(data => { loadMessages(); }) .catch(error => { console.error('Ошибка ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСния:', error); hideTyping(); }); } function getCookie(name) { const nameEQ = name + "="; const ca = document.cookie.split(';'); for (let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) === ' ') { c = c.substring(1, c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length, c.length); } } return null; // Return null if the cookie is not found } chatButton.addEventListener('click', function() { if (chatWindow.style.display === 'none' || chatWindow.style.display === '') { chatWindow.style.display = 'block'; loadMessages(); } else { chatWindow.style.display = 'none'; } }); sendButton.addEventListener('click', sendMessage); inputField.addEventListener('keypress', function(e) { if (e.key === 'Enter') { sendMessage(); } }); document.addEventListener('click', function(e) { if (!chatWindow.contains(e.target) && e.target !== chatButton) { chatWindow.style.display = 'none'; } }); setInterval(function() { if (chatWindow.style.display === 'block') { loadMessages(); } }, 5000); })();