class AIAssistant extends HTMLElement { constructor() { super(); this.isOpen = false; this.messages = []; } connectedCallback() { this.attachShadow({ mode: 'open' }); this.render(); this.setupEventListeners(); this.loadInitialMessage(); } render() { this.shadowRoot.innerHTML = `
AI Ассистент Nexus
`; setTimeout(() => { if (typeof feather !== 'undefined') { feather.replace(); } }, 100); } setupEventListeners() { const toggleButton = this.shadowRoot.querySelector('.ai-toggle-button'); const closeButton = this.shadowRoot.querySelector('.close-button'); const sendButton = this.shadowRoot.querySelector('#send-button'); const chatInput = this.shadowRoot.querySelector('#chat-input'); if (toggleButton) { toggleButton.addEventListener('click', () => { this.toggleChat(); }); } if (closeButton) { closeButton.addEventListener('click', () => { this.closeChat(); }); } if (sendButton && chatInput) { sendButton.addEventListener('click', () => { this.sendMessage(); }); chatInput.addEventListener('keypress', (e) => { if (e.key === 'Enter') { this.sendMessage(); } }); } } loadInitialMessage() { const welcomeMessage = { type: 'assistant', text: 'Привет! Я ваш AI ассистент Nexus. Могу помочь с информацией о портале, записать на консультацию или ответить на вопросы о технологиях. Чем могу помочь?' }; this.addMessage(welcomeMessage); } toggleChat() { this.isOpen = !this.isOpen; const chatWindow = this.shadowRoot.querySelector('.ai-chat-window'); if (chatWindow) { chatWindow.classList.toggle('active', this.isOpen); if (this.isOpen) { const input = this.shadowRoot.querySelector('#chat-input'); if (input) { input.focus(); } } } closeChat() { this.isOpen = false; const chatWindow = this.shadowRoot.querySelector('.ai-chat-window'); if (chatWindow) { chatWindow.classList.remove('active'); } } async sendMessage() { const input = this.shadowRoot.querySelector('#chat-input'); if (!input || !input.value.trim()) return; const userMessage = { type: 'user', text: input.value.trim() }; this.addMessage(userMessage); const userText = input.value; input.value = ''; // Simulate AI response this.simulateAIResponse(userText); } async simulateAIResponse(userMessage) { // Show typing indicator this.showTypingIndicator(); // Simulate API call delay setTimeout(async () => { this.hideTypingIndicator(); let responseText = ''; if (userMessage.toLowerCase().includes('консультация') || userMessage.toLowerCase().includes('запись')) { responseText = 'Отлично! Для записи на консультацию перейдите в раздел "Консультации" или свяжитесь напрямую через Telegram @tsingular. Хотите, чтобы я открыл соответствующий раздел?'; } else if (userMessage.toLowerCase().includes('новости')) { responseText = 'В разделе "Новости" вы найдете свежие технологические тренды, аналитику и инсайты от Алексея Малышева.'; } else if (userMessage.toLowerCase().includes('обучение')) { responseText = 'Раздел "Обучение" содержит образовательные материалы, курсы и руководства по современным технологиям.'; } else { responseText = 'Интересный вопрос! Я могу помочь с информацией о различных разделах портала, технологиях или организации консультации. Что именно вас интересует?'; } const assistantMessage = { type: 'assistant', text: responseText }; this.addMessage(assistantMessage); }, 1500); } showTypingIndicator() { const messagesContainer = this.shadowRoot.querySelector('#chat-messages'); if (messagesContainer) { const typingElement = document.createElement('div'); typingElement.className = 'ai-message assistant typing-indicator'; typingElement.innerHTML = '
'; messagesContainer.appendChild(typingElement); messagesContainer.scrollTop = messagesContainer.scrollHeight; } hideTypingIndicator() { const messagesContainer = this.shadowRoot.querySelector('#chat-messages'); if (messagesContainer) { const typingElement = messagesContainer.querySelector('.typing-indicator'); if (typingElement) { typingElement.remove(); } } } addMessage(message) { const messagesContainer = this.shadowRoot.querySelector('#chat-messages'); if (messagesContainer) { const messageElement = document.createElement('div'); messageElement.className = `ai-message ${message.type}`; messageElement.textContent = message.text; messagesContainer.appendChild(messageElement); messagesContainer.scrollTop = messagesContainer.scrollHeight; } } } customElements.define('ai-assistant', AIAssistant); // Global AI Assistant functions function initializeAIAssistant() { // AI Assistant is already initialized by the component console.log('AI Assistant initialized'); } function toggleAIAssistant() { const assistant = document.querySelector('ai-assistant'); if (assistant) { assistant.toggleChat(); } }