// ==UserScript==
// @name Kenite IA 🚀✨
// @namespace http://tampermonkey.net/
// @version 4.0
// @description Kenite AI: A Cutting-Edge Virtual Assistant 🤖 ✨
// @match https://*.wikipedia.org/*
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function() {
'use strict';
// 🎨 Estilos CSS
GM_addStyle(`
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap');
@keyframes backgroundColorChange {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
@keyframes entradaSuave {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes loaderDot {
0%, 80%, 100% { transform: translateY(0); opacity: 0.5; }
40% { transform: translateY(-10px); opacity: 1; }
}
@keyframes sparkle {
0% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.2); opacity: 0.8; }
100% { transform: scale(1); opacity: 1; }
}
#ia-assistente {
position: fixed;
bottom: 20px;
right: 20px;
width: 420px;
border-radius: 30px;
font-family: 'Roboto', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
z-index: 9999;
overflow: hidden;
transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55);
box-shadow: 0 10px 30px rgba(0,0,0,0.4);
border: 3px solid rgba(255, 255, 255, 0.8);
animation: entradaSuave 1s ease-out;
}
#ia-assistente.tema-padrao {
background: linear-gradient(135deg, #4a3080, #7b3d91, #9d50bb, #6e48aa);
background-size: 300% 300%;
animation: entradaSuave 1s ease-out, backgroundColorChange 15s ease infinite;
}
#ia-assistente.tema-escuro {
background: linear-gradient(135deg, #1a1a2e, #16213e, #0f3460, #1a1a2e);
background-size: 300% 300%;
animation: entradaSuave 1s ease-out, backgroundColorChange 15s ease infinite;
}
#ia-assistente.tema-claro {
background: linear-gradient(135deg, #f0f0f5, #e6e6fa, #d8bfd8, #f0f0f5);
background-size: 300% 300%;
animation: entradaSuave 1s ease-out, backgroundColorChange 15s ease infinite;
color: #333;
}
#ia-cabecalho {
background-color: rgba(0,0,0,0.2);
color: #ffffff;
padding: 20px 25px;
font-size: 26px;
font-weight: bold;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 2px solid rgba(255,255,255,0.1);
}
#ia-toggle {
cursor: pointer;
font-size: 30px;
transition: transform 0.4s ease;
}
#ia-toggle.fechado { transform: rotate(180deg); }
#ia-conteudo {
padding: 25px;
max-height: 550px;
overflow-y: auto;
color: #ffffff;
scrollbar-width: none;
-ms-overflow-style: none;
}
#ia-conteudo::-webkit-scrollbar {
display: none;
}
#ia-input {
width: 340px;
padding: 15px;
margin-bottom: 20px;
border: none;
border-radius: 15px;
background-color: rgba(255,255,255,0.15);
color: #ffffff;
font-size: 18px;
transition: all 0.3s ease;
}
#ia-input:focus {
outline: none;
box-shadow: 0 0 0 3px rgba(255,255,255,0.3);
background-color: rgba(255,255,255,0.2);
}
#ia-input::placeholder {
color: rgba(255,255,255,0.5);
}
#ia-resposta {
background-color: rgba(255,255,255,0.1);
padding: 20px;
border-radius: 20px;
margin-top: 20px;
font-size: 17px;
line-height: 1.7;
transition: all 0.3s ease;
text-shadow: 0 1px 2px rgba(0,0,0,0.1);
font-family: 'Roboto', 'Segoe UI', Arial, sans-serif;
font-size: 16px;
line-height: 1.6;
letter-spacing: 0.3px;
}
#ia-resposta p {
margin-bottom: 15px;
}
#ia-resposta strong {
font-weight: 600;
color: #ffd700;
}
#ia-resposta em {
font-style: italic;
color: #add8e6;
}
#ia-resposta ul, #ia-resposta ol {
margin-left: 20px;
margin-bottom: 15px;
}
#ia-resposta li {
margin-bottom: 5px;
}
#ia-resposta a {
color: #ff69b4;
text-decoration: none;
border-bottom: 1px dotted #ff69b4;
transition: all 0.3s ease;
}
#ia-resposta a:hover {
color: #ff1493;
border-bottom: 1px solid #ff1493;
}
#ia-loader {
display: none;
text-align: center;
padding: 20px;
height: 40px;
}
#ia-loader span {
display: inline-block;
width: 10px;
height: 10px;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.9);
margin: 0 5px;
animation: loaderDot 1.4s infinite ease-in-out both;
}
#ia-loader span:nth-child(1) { animation-delay: -0.32s; }
#ia-loader span:nth-child(2) { animation-delay: -0.16s; }
.titulo-resposta {
font-size: 26px;
font-weight: bold;
color: #ffffff;
margin-bottom: 20px;
text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
letter-spacing: 0.5px;
}
.destaque {
background-color: rgba(255,255,255,0.2);
padding: 2px 6px;
border-radius: 6px;
font-weight: 500;
color: #fff;
text-shadow: 1px 1px 2px rgba(0,0,0,0.2);
}
.topicos-relacionados {
margin-top: 25px;
padding: 15px;
background-color: rgba(255,255,255,0.1);
border-radius: 20px;
transition: all 0.3s ease;
box-shadow: inset 0 0 10px rgba(255,255,255,0.1);
}
.topico-item {
display: inline-block;
margin: 6px;
padding: 8px 15px;
background-color: rgba(255,255,255,0.15);
border-radius: 20px;
cursor: pointer;
transition: all 0.3s ease;
font-weight: 500;
text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
}
.topico-item:hover {
background-color: rgba(255,255,255,0.25);
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
#ia-botoes {
display: flex;
justify-content: space-between;
margin-top: 15px;
}
#ia-idioma-select, #ia-tema-select, .ia-botao {
margin-top: 10px;
padding: 7px;
margin-right: 5px;
border-radius: 10px;
background-color: rgba(255,255,255,0.15);
color: #ffffff;
border: none;
font-size: 16px;
cursor: pointer;
transition: all 0.3s ease;
}
#ia-idioma-select option, #ia-tema-select option {
background-color: #4a3080;
color: #ffffff;
}
.ia-botao:hover, #ia-idioma-select:hover, #ia-tema-select:hover {
background-color: rgba(255,255,255,0.25);
}
#ia-historico {
margin-top: 20px;
padding: 15px;
background-color: rgba(255,255,255,0.1);
border-radius: 20px;
max-height: 150px;
overflow-y: auto;
scrollbar-width: none;
-ms-overflow-style: none;
}
#ia-historico::-webkit-scrollbar {
display: none;
}
.historico-item {
padding: 8px 12px;
margin: 8px 0;
background-color: rgba(255,255,255,0.15);
border-radius: 10px;
cursor: pointer;
transition: all 0.3s ease;
font-weight: 500;
text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
}
.historico-item:hover {
background-color: rgba(255,255,255,0.25);
transform: translateX(5px);
}
.emoji-title {
font-size: 19px;
margin-bottom: 15px;
text-align: center;
text-shadow: 0 2px 4px rgba(0,0,0,0.2);
}
.emoji-separator {
font-size: 20px;
text-align: center;
margin: 10px 0;
}
.fancy-text {
font-family: 'Georgia', serif;
line-height: 1.8;
letter-spacing: 0.5px;
}
.highlight-box {
background: linear-gradient(45deg, rgba(255,255,255,0.1), rgba(255,255,255,0.2));
border-radius: 15px;
padding: 15px;
margin: 15px 0;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.fancy-list {
list-style-type: none;
padding-left: 0;
}
.fancy-list li {
margin-bottom: 10px;
padding-left: 25px;
position: relative;
}
.fancy-list li::before {
content: '🔹';
position: absolute;
left: 0;
top: 2px;
}
.sparkle {
display: inline-block;
animation: sparkle 1.5s infinite;
}
#ia-assistente.tema-claro #ia-cabecalho,
#ia-assistente.tema-claro #ia-input,
#ia-assistente.tema-claro #ia-resposta,
#ia-assistente.tema-claro #ia-idioma-select,
#ia-assistente.tema-claro #ia-tema-select,
#ia-assistente.tema-claro .ia-botao,
#ia-assistente.tema-claro .historico-item {
color: #333;
background-color: rgba(0,0,0,0.1);
}
#ia-assistente.tema-claro #ia-input::placeholder {
color: rgba(0,0,0,0.5);
}
#ia-assistente.tema-claro #ia-resposta {
color: #333;
text-shadow: none;
}
#ia-assistente.tema-claro #ia-resposta strong {
color: #0066cc;
}
#ia-assistente.tema-claro #ia-resposta em {
color: #006400;
}
#ia-assistente.tema-claro #ia-resposta a {
color: #8b008b;
border-bottom: 1px dotted #8b008b;
}
#ia-assistente.tema-claro #ia-resposta a:hover {
color: #4b0082;
border-bottom: 1px solid #4b0082;
}
#ia-assistente.tema-claro .titulo-resposta {
color: #333;
text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
}
#ia-assistente.tema-claro .destaque {
background-color: rgba(0,0,0,0.1);
color: #333;
text-shadow: none;
}
.citacao {
font-style: italic;
color: #ffa07a;
display: block;
margin: 10px 0;
padding-left: 15px;
border-left: 3px solid #ffa07a;
}
.nota {
background-color: rgba(255,255,0,0.2);
padding: 10px;
border-radius: 10px;
margin: 10;
}
.definicao {
font-weight: bold;
text-decoration: underline;
}
.palavra-chave {
font-weight: bold;
color: #ff69b4;
text-shadow: 0 0 3px rgba(255,105,180,0.5);
}
`);
// 🏗️ Criar e adicionar o assistente ao DOM
const assistente = document.createElement('div');
assistente.id = 'ia-assistente';
assistente.innerHTML = `
<div id="ia-cabecalho">
<span id="ia-titulo">🤖 Kenite IA</span>
<span id="ia-toggle">▼</span>
</div>
<div id="ia-conteudo">
<input type="text" id="ia-input" placeholder="🔍 Faça uma pergunta...">
<div id="ia-resposta"></div>
<div id="ia-loader"><span></span><span></span><span></span></div>
<div id="ia-botoes">
<select id="ia-idioma-select">
<option value="pt">🇧🇷 Português</option>
<option value="en">🇬🇧 English</option>
<option value="es">🇪🇸 Español</option>
<option value="fr">🇫🇷 Français</option>
</select>
<select id="ia-tema-select">
<option value="padrao">🌈 Tema Padrão</option>
<option value="escuro">🌙 Tema Escuro</option>
<option value="claro">☀️ Tema Claro</option>
</select>
<button id="ia-limpar-historico" class="ia-botao">🗑️ Limpar Histórico</button>
</div>
<div id="ia-historico"></div>
</div>
`;
document.body.appendChild(assistente);
// 🎛️ Elementos do DOM
const toggle = document.getElementById('ia-toggle');
const conteudo = document.getElementById('ia-conteudo');
const input = document.getElementById('ia-input');
const resposta = document.getElementById('ia-resposta');
const loader = document.getElementById('ia-loader');
const titulo = document.getElementById('ia-titulo');
const idiomaSelect = document.getElementById('ia-idioma-select');
const temaSelect = document.getElementById('ia-tema-select');
const limparHistoricoBtn = document.getElementById('ia-limpar-historico');
const historicoDiv = document.getElementById('ia-historico');
// 🌐 Variáveis globais
let idiomaAtual = GM_getValue('idiomaAssistente', 'pt');
let temaAtual = GM_getValue('temaAssistente', 'padrao');
let historico = GM_getValue('historicoAssistente', []);
idiomaSelect.value = idiomaAtual;
temaSelect.value = temaAtual;
// 🗣️ Traduções
const traducoes = {
pt: {
assistenteIA: '🤖 Kenite IA',
placeholder: '🔍 Faça uma pergunta...',
topicosRelacionados: '🔗 Tópicos Relacionados',
semInformacoes: '❓ Desculpe, não encontrei informações sobre isso.',
erro: '❌ Desculpe, ocorreu um erro ao buscar a informação.',
limparHistorico: '🗑️ Limpar Histórico',
historico: '📜 Histórico'
},
en: {
assistenteIA: '🤖 Kenite AI',
placeholder: '🔍 Ask a question...',
topicosRelacionados: '🔗 Related Topics',
semInformacoes: '❓ Sorry, I couldn\'t find any information about that.',
erro: '❌ Sorry, an error occurred while fetching the information.',
limparHistorico: '🗑️ Clear History',
historico: '📜 History'
},
es: {
assistenteIA: '🤖 Kenite IA',
placeholder: '🔍 Haz una pregunta...',
topicosRelacionados: '🔗 Temas Relacionados',
semInformacoes: '❓ Lo siento, no encontré información sobre eso.',
erro: '❌ Lo siento, ocurrió un error al buscar la información.',
limparHistorico: '🗑️ Borrar Historial',
historico: '📜 Historial'
},
fr: {
assistenteIA: '🤖 Kenite IA',
placeholder: '🔍 Posez une question...',
topicosRelacionados: '🔗 Sujets Connexes',
semInformacoes: '❓ Désolé, je n\'ai pas trouvé d\'informations à ce sujet.',
erro: '❌ Désolé, une erreur s\'est produite lors de la recherche d\'informations.',
limparHistorico: '🗑️ Effacer l\'historique',
historico: '📜 Historique'
}
};
// 🔄 Função para traduzir
function traduzir(chave) {
return traducoes[idiomaAtual][chave] || traducoes['en'][chave];
}
// 🔍 Função para pesquisar na Wikipedia
async function pesquisarWikipedia(query) {
loader.style.display = 'block';
resposta.innerHTML = '';
try {
const url = `https://${idiomaAtual}.wikipedia.org/w/api.php?action=query&format=json&prop=extracts|links&exintro=1&explaintext=1&titles=${encodeURIComponent(query)}&origin=*`;
const response = await fetch(url);
const data = await response.json();
const page = Object.values(data.query.pages)[0];
const extract = page.extract;
const links = page.links || [];
const respostaProcessada = processarResposta(extract, links);
exibirRespostaAnimada(respostaProcessada);
adicionarAoHistorico(query);
} catch (error) {
resposta.innerHTML = `<div class="erro-mensagem">${traduzir('erro')} ❌</div>`;
} finally {
loader.style.display = 'none';
}
}
// 🧠 Função para processar a resposta
function processarResposta(texto, links) {
let respostaProcessada = '';
if (texto) {
respostaProcessada += `<div class="titulo-resposta">${traduzir('assistenteIA')}:</div>`;
respostaProcessada += `<div class="resposta-conteudo">${aprimorarTextoIA(texto)}</div>`;
} else {
respostaProcessada += `<div class="sem-info">${traduzir('semInformacoes')}</div>`;
}
if (links.length > 0) {
respostaProcessada += `<div class="topicos-relacionados"><strong>${traduzir('topicosRelacionados')}:</strong><br>`;
respostaProcessada += links.slice(0, 5).map(link => `<span class="topico-item">🔹 ${link.title}</span>`).join('');
respostaProcessada += '</div>';
}
return respostaProcessada;
}
// 🖌️ Função para aprimorar o texto da IA
function aprimorarTextoIA(texto) {
const emojis = {
positivo: ['😊', '👍', '🎉', '✨', '🌟', '💖', '🙌', '🔥'],
negativo: ['😔', '👎', '💔', '🚫', '⚠️', '😢', '🙅', '❌'],
ideia: ['💡', '🤔', '🧠', '🔍', '📚', '🎓', '🏆', '🚀'],
tempo: ['⏰', '🕒', '📅', '⌛', '🗓️', '🌙', '☀️', '🌈'],
dinheiro: ['💰', '💸', '💲', '🤑', '💳', '💵', '🏦', '💹'],
tecnologia: ['💻', '📱', '🤖', '🔧', '🖥️', '📡', '🛰️', '⚙️'],
natureza: ['🌿', '🌳', '🌺', '🌊', '🏔️', '🌎', '🌞', '🍃'],
comida: ['🍎', '🍕', '🍣', '🍔', '🍰', '🍓', '🥑', '🍜'],
viagem: ['✈️', '🏖️', '🗺️', '🏞️', '🚆', '🚢', '🏰', '🎒'],
esporte: ['⚽', '🏀', '🎾', '🏊', '🚴', '🏋️', '🥇', '🏆']
};
// Adicionar emojis
Object.keys(emojis).forEach(categoria => {
const regex = new RegExp(`\\b(${categoria}|${categoria}s)\\b`, 'gi');
texto = texto.replace(regex, match => {
const emojiAleatorio = emojis[categoria][Math.floor(Math.random() * emojis[categoria].length)];
return `${emojiAleatorio} ${match}`;
});
});
// Adicionar formatação avançada
texto = texto.replace(/\b(importante|atenção|dica|nota)\b/gi, match => `<strong class="destaque sparkle">💥 ${match.toUpperCase()} 💥</strong>`);
texto = texto.replace(/(".*?")/g, match => `<span class="citacao">💬 ${match} 💬</span>`);
texto = texto.replace(/\b([A-Z][a-z]+ é|são|foram|era|eram)\b/g, match => `<span class="definicao">📌 ${match}</span>`);
// Adicionar títulos e separadores com emojis
texto = texto.replace(/^(.+)$/m, match => `<div class="emoji-title">🌟 ${match} 🌟</div>`);
texto = texto.replace(/\n\n/g, '\n<div class="emoji-separator">✨✨✨</div>\n');
// Criar listas fancy
texto = texto.replace(/^[-*]\s(.+)$/gm, '<li>$1</li>');
texto = texto.replace(/<li>(.+\n?)+/g, match => `<ul class="fancy-list">${match}</ul>`);
// Adicionar caixas de destaque
texto = texto.replace(/\[(.*?)\]/g, '<div class="highlight-box">$1</div>');
// Destacar palavras-chave
const palavrasChave = ['importante', 'crucial', 'essencial', 'fundamental', 'chave', 'principal'];
const regexPalavrasChave = new RegExp(`\\b(${palavrasChave.join('|')})\\b`, 'gi');
texto = texto.replace(regexPalavrasChave, match => `<span class="palavra-chave">🔑 ${match}</span>`);
// Adicionar classe para texto fancy
texto = `<div class="fancy-text">${texto}</div>`;
return texto;
}
// 🎭 Função para exibir a resposta com animação
function exibirRespostaAnimada(texto) {
resposta.innerHTML = texto;
resposta.style.display = 'block';
resposta.style.opacity = '0';
resposta.style.transform = 'translateY(20px)';
setTimeout(() => {
resposta.style.opacity = '1';
resposta.style.transform = 'translateY(0)';
}, 50);
resposta.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}
// 📜 Função para adicionar ao histórico
function adicionarAoHistorico(query) {
historico = historico.filter(item => item !== query);
historico.unshift(query);
if (historico.length > 10) historico.pop();
GM_setValue('historicoAssistente', historico);
atualizarHistorico();
}
// 🔄 Função para atualizar o histórico na interface
function atualizarHistorico() {
historicoDiv.innerHTML = `<div class="emoji-title"> ${traduzir('historico')}</div>`;
historico.forEach(item => {
const itemElement = document.createElement('div');
itemElement.className = 'historico-item';
itemElement.innerHTML = `🔍 ${item}`;
itemElement.onclick = () => {
input.value = item;
pesquisarWikipedia(item);
};
historicoDiv.appendChild(itemElement);
});
}
// 🎨 Função para mudar o tema
function mudarTema(tema) {
const assistente = document.getElementById('ia-assistente');
assistente.className = ''; // Remove todas as classes
assistente.classList.add(`tema-${tema}`);
GM_setValue('temaAssistente', tema);
}
// 🎧 Event listeners
toggle.addEventListener('click', () => {
conteudo.style.display = conteudo.style.display === 'none' ? 'block' : 'none';
toggle.textContent = conteudo.style.display === 'none' ? '▼' : '▲';
toggle.classList.toggle('fechado');
});
input.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
pesquisarWikipedia(input.value);
}
});
resposta.addEventListener('click', (e) => {
if (e.target.classList.contains('topico-item')) {
input.value = e.target.textContent.replace('🔹 ', '');
pesquisarWikipedia(input.value);
}
});
idiomaSelect.addEventListener('change', (e) => {
idiomaAtual = e.target.value;
GM_setValue('idiomaAssistente', idiomaAtual);
titulo.textContent = traduzir('assistenteIA');
input.placeholder = traduzir('placeholder');
limparHistoricoBtn.textContent = traduzir('limparHistorico');
atualizarHistorico();
if (resposta.innerHTML) {
pesquisarWikipedia(input.value);
}
});
temaSelect.addEventListener('change', (e) => {
mudarTema(e.target.value);
});
limparHistoricoBtn.addEventListener('click', () => {
historico = [];
GM_setValue('historicoAssistente', historico);
atualizarHistorico();
});
// 🚀 Inicialização
mudarTema(temaAtual);
atualizarHistorico();
titulo.textContent = traduzir('assistenteIA');
input.placeholder = traduzir('placeholder');
limparHistoricoBtn.textContent = traduzir('limparHistorico');
})();