const inputMessage = document.querySelector('.footer-write'); const inputMessageAnexo = document.querySelector('#msgInputAnexo'); const sendFile = document.querySelector('.send-anexo'); const conn = new WebSocket(`wss://chat.dots.app.br?userId=${SESSION_DATA.id}&dbname=${SESSION_DATA.dots_acesso[0].pdo_dbname}`); // const conn = new WebSocket(`ws://localhost:6969?userId=${SESSION_DATA.id}&dbname=${SESSION_DATA.dots_acesso[0].pdo_dbname}`); conn.addEventListener('open', function (event) { }); conn.addEventListener('message', e => { listenServer(e.data); if (($('#RightMenu').css('display') == 'none') || (GetLS('apt_display') == 'none')) { const messageData = JSON.parse(e.data); if (SESSION_DATA.dots_acesso[0].pdo_dbname == messageData.dbname && messageData.receiver.id == SESSION_DATA.id) { notificationNewMessageWithoutChat(e.data); // existsNotification(); } } }); conn.addEventListener('close', function (event) { // if (event.wasClean) { // console.log(`Conexão fechada de forma limpa, código: ${event.code}, motivo: ${event.reason}`); // } else { // console.error('Conexão fechada abruptamente'); // } }); if (inputMessage) { inputMessage.addEventListener('keypress', e => { // pula linha if (e.keyCode == 13 && e.shiftKey) return; if (e.keyCode === 13) { e.preventDefault(); const message = e.target.innerHTML.replace('

', ''); // mensagem vazia if (e.target.innerHTML.trim() == "") return; e.target.innerHTML = ''; sendMessage(message); alteraHeightBodyMessage(e, true); return false; } // muda height caixa de texto alteraHeightBodyMessage(e); }); // inputMessageAnexo.addEventListener('keypress', e => { // if (e.keyCode == 13) { // document.querySelector('.send-anexo').click(); // } // }); // print document.addEventListener('paste', (e) => { var clipboardData = event.clipboardData || window.clipboardData; if (clipboardData.items) { for (var i = 0; i < clipboardData.items.length; i++) { var item = clipboardData.items[i]; if (item.type.indexOf('image') !== -1) { e.preventDefault(); var blob = item.getAsFile(); var reader = new FileReader(); reader.onload = function (event) { var base64Image = event.target.result; const file = new File([ new Blob([base64Image]) ], "image.png", { type: 'image/png' }); insereArquivoSelecionadoNoChat([file], base64Image); }; reader.readAsDataURL(blob); } else if (item.type.indexOf('text') !== -1) { e.preventDefault(); e.target.innerText = removerTagsHTML(clipboardData.getData('text')); } } } }); // sendFile.addEventListener('click', () => { // const message = document.querySelector('#msgInputAnexo').value; // document.querySelector(".preview-anexo > img").style = "display: none"; // document.querySelector(".preview-doc").style = "display: none"; // document.querySelector(".div-anexo").style = "display: none"; // $('.item-anexo').remove(); // sendMessage(message); // }) } function sendMessage(message) { const { hours, minutes } = fnCurrentTime(); const { chatType } = JSON.parse(localStorage.getItem('openChat')); const filesId = []; const filesName = []; const filesReferencia = []; const session = getDataSession(); let idReply = 0; let filesArrayChat = []; //adicionado por que o envio de arquivos está comentado e essa variável é criada no arquivo files.js que está comentado também if ($('#container-reply').length > 0) idReply = $('#container-reply').data('idreply'); if (filesArrayChat.length > 0) { filesArrayChat.forEach(file => { sendFiles(file, '00000000000000').then(response => { filesId.push(Number(response.arquivos_processados[0].id_arquivo)); filesName.push(response.arquivos_processados[0].caminho_curto); filesReferencia.push(response.arquivos_processados[0].referencia_arquivo); }) }) } const interval = setInterval(() => { if (filesArrayChat.length == filesId.length) { const messageData = { chatType, sender: SENDER_DATA, receiver: RECEIVER_DATA, files: filesName.toString(), nome_arquivo: filesReferencia.toString(), filesId: `{${filesId.toString()}}`, hour: `${hours}:${minutes}`, reply: idReply, dbname: session.dots_acesso[0].pdo_dbname, message }; clearInterval(interval); filesArrayChat = []; conn.send(JSON.stringify(messageData)); } }, 10); } // monitoring system events function listenServer(request) { const messageData = JSON.parse(request); const { chatId, chatType } = JSON.parse(localStorage.getItem('openChat')); const session = getDataSession(); if (session.dots_acesso[0].pdo_dbname == messageData.dbname) { // user online if (messageData.status == 'online') getUsersOnline(messageData.userId); // user offline if (messageData.status == 'offline' && messageData.userId != SESSION_DATA.id) getUsersOffline(messageData.userId); // reação e exclusão if (messageData.type == 'reaction' || messageData.type == 'remove') getMessageId(messageData.messageId); if (messageData.type == 'messageViewed' && messageData.senderId == SESSION_DATA.id && messageData.receiverId == chatId) { $('.messageViewed').css({ 'color': '#30c4c9' }); } if (messageData.type == 'naoLida') { verificaMensagensNovas(); // existsNotification(); } // new message if (messageData.hour) { const getAllMessageDates = document.querySelectorAll('.date-message'); // const lastMessageDate = getAllMessageDates[getAllMessageDates.length - 1] ? getAllMessageDates[getAllMessageDates.length - 1].id.split('date-')[1] : ""; const { year, month, date, hours, minutes, seconds } = fnCurrentTime(); const today = `${year}-${month}-${date} ${hours}:${minutes}:${seconds}`; messageData.data_envio = today; const messageDataArray = [messageData]; if (chatType != 'bot') { processMessages(messageDataArray, false) .then((result) => { createDateMessageV2(result); }) .catch((error) => { console.error("Error processing messages:", error); }); } showNotificationNewMessage(messageData); const messageToMyself = messageData.chatType == 'user' && messageData.sender.id == SESSION_DATA.id && chatId == SESSION_DATA.id; // mensagem visualizada if (messageData.sender.id == chatId && chatId != SESSION_DATA.id || messageToMyself) { showNewMensagemInChat(); messageViewed(chatId, chatType); } else { verificaMensagensNovas(); }; } } } function notificationNewMessageWithoutChat(request) { const messageData = JSON.parse(request); if (messageData.hour) { changeFavicon(); } } function showNotificationNewMessage(messageData) { const { chatId, chatType } = JSON.parse(localStorage.getItem('openChat')); if (chatType == 'user') $(`.user-${chatId}-unread-notification`).remove(); if (messageData.chatType == 'user' && messageData.receiver.id == SESSION_DATA.id && chatId != messageData.sender.id && messageData.sender.id != SESSION_DATA.id) { let divNumMessage = $(`#user-${messageData.sender.id}`); let spanNotification = document.querySelector(`span[id=notification_${messageData.sender.id}]`); if (!spanNotification) { divNumMessage.append(`1`); } else { /**OBTEM O NUMERO DE MENSAGEM ATUAL */ let NumMessage = parseInt(apenasNumeros(spanNotification.innerHTML)); /**SOMA +1 MENSAGEM */ NumMessage = (NumMessage + 1); spanNotification.innerHTML = NumMessage; } } } function verificaMensagensNovas() { const formData = new FormData(); formData.append('idRemetente', SENDER_DATA.id); fetch(`${URL_BASE}App/Controller/Chat/MessageAPI.php`, { method: 'POST', body: formData }) .then(req => req.json()) .then(res => { localStorage.setItem('quantidadeMensagensNovas', res.amountMessage.length); }) } function changeFavicon(messageView = false) { if (!messageView) { document.querySelector("link[rel*='icon']").href = `${URL_BASE}App/View/Public/images/favicon_nm.png`; if (!document.querySelector('#btnNavbarChat #iconNotificacaoChat')) { $(".icon-nav-chat").append(''); } } else { const allIcons = document.querySelectorAll('.not-icon-chat'); allIcons.forEach(icon => $(icon).remove()); document.querySelector("link[rel*='icon']").href = `${URL_BASE}App/View/Public/images/favicon.png`; } } function showNewMensagemInChat() { const totalScroll = document.querySelector('.body-message').scrollHeight - document.querySelector('.body-message').clientHeight; const currentScroll = document.querySelector('.body-message').scrollTop; // notifica mensagem nova if (currentScroll + 100 < totalScroll) $('.novaMensagem').css({ 'visibility': 'visible', 'opacity': '1', 'transition': '0.5s' }); } function hiddenNewMensagemInChat() { $('.novaMensagem').css({ 'visibility': 'hidden', 'opacity': '0', 'transition': '0.5s' }); } function getUsersOnline() { _GET('App/Controller/Query/get.controller.php', { table_name: 'usuario', condition: ` AND chat_online IS NOT NULL` }) .done(data => { const users = JSON.parse(data); $(`#userOnline-${SESSION_DATA.id}`).addClass('user-online'); users.forEach(user => { $(`#userOnline-${user.id}`).addClass('user-online'); const userDiv = document.querySelector(`#user-${user.id}`); if (user.id != SESSION_DATA.id) { if (userDiv) userDiv.remove(); $(`#user-${SESSION_DATA.id}`).after(userDiv); } else { } }); }) } function getUsersOffline(userId) { $(`#userOnline-${userId}`).removeClass('user-online') const userDiv = document.querySelector(`#user-${userId}`); if (userDiv) userDiv.remove(); $('#collapseConversaDireta').append(userDiv); } function alteraHeightBodyMessage(event, pressEnter = false) { const scroll = $(event.target).height(); if (pressEnter) $('.body-message').css({ 'height': `100%` }); else $('.body-message').css({ 'height': `calc(100% - ${scroll > 50 ? (scroll) : 0}px)` }); } function chatBot(message, destinatarioId) { const { hours, minutes } = fnCurrentTime(); const messageData = { chatType: 'bot', sender: { id: '-1' }, receiver: { id: destinatarioId }, hour: `${hours}:${minutes}`, message } conn.send(JSON.stringify(messageData)); }