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 = `
`;
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();
}
}