UNPKG

coach-falido

Version:

A sabedoria mais aleatória do universo - conselhos genéricos ao estilo coach motivacional galáctico

224 lines (196 loc) 9.61 kB
const say = require('say'); const { spawn } = require('child_process'); // Array de conselhos galácticos const conselhosGalacticos = [ // Originais "A geladeira da vida não espera ninguém.", "Seja como a jujuba: colorido por fora, confuso por dentro.", "Quando o despertador toca, o universo medita em silêncio.", "O café quente é apenas água com propósito cósmico.", "Se a vida te der limões, pergunte onde estão as laranjas galácticas.", "A procrastinação é apenas o universo dizendo para esperar.", "Seja como o WiFi: conectado, mas nem sempre funcionando.", "O aspirador de pó não julga a poeira, apenas a abraça.", "Quando a pizza esfria, ela medita sobre sua existência.", "A meditação é apenas Netflix para a alma.", "Se você não sabe para onde vai, qualquer buraco negro serve.", "O refrigerante sem gás é água com depressão cósmica.", "Seja como o Google: tenha todas as respostas, mas ainda assim confunda as pessoas.", "A vida é como um meme: não faz sentido, mas todo mundo compartilha.", "O universo conspira a favor de quem esquece onde colocou as chaves.", // Novos - Parte 1 "O controle remoto perdido é um portal para outras dimensões.", "Quando a torradeira falha, o pão questiona sua existência.", "Seja como a bateria do celular: sempre em baixa na hora errada.", "O trânsito é apenas o universo te ensinando paciência galáctica.", "A meia que some na máquina de lavar virou astronauta.", "Se a vida fosse um jogo, você ainda estaria tentando pular o tutorial.", "O microondas que faz 'bip' à meia-noite é um oráculo moderno.", "Seja como o shampoo 2 em 1: confuso sobre sua identidade.", "Quando o elevador demora, ele está contemplando a gravidade.", "A impressora que não funciona é um zen master disfarçado.", "O semáforo vermelho é o universo dizendo 'respira fundo'.", "Seja como a senha esquecida: sempre na ponta da língua cósmica.", "O gato que ignora você entende os mistérios do tempo-espaço.", "Quando chove no fim de semana, as nuvens estão deprimidas também.", "O notebook que esquenta é apenas um aquecedor multitarefa.", // Novos - Parte 2 "A pizza fria de ontem guarda segredos do passado.", "Seja como o fone de ouvido embaraçado: sempre dando nós na vida.", "O ventilador barulhento está cantando a canção de seu povo.", "Quando o YouTube trava, o algoritmo está tendo uma crise existencial.", "A caneta que não escreve está em greve motivacional.", "Se a vida te der bugs, você é um programador cósmico.", "O despertador que não toca entende que segunda-feira é opcional.", "Seja como a comida que esquenta por fora e congela por dentro no microondas.", "O carro que não pega é um filósofo automotivo em contemplação.", "Quando a internet cai, o mundo digital vai meditar.", "A gaveta que emperra guarda tesouros de outras vidas.", "Seja como a notificação inútil: sempre presente quando não precisa.", "O sapato apertado ensina sobre os limites do conforto universal.", "Quando o ar condicionado quebra no verão, é karma climático.", "A cadeira que range está compondo uma sinfonia ergonômica.", // Novos - Parte 3 "O espelho do banheiro reflete não apenas sua imagem, mas seus questionamentos matinais.", "Seja como a torneira que pinga: persistente até quando ninguém está olhando.", "O guardanapo que voa na mesa é um origami rebelde.", "Quando o açúcar acaba, o café questiona o sentido da doçura.", "A porta que bate sozinha está conversando com fantasmas arquitetônicos.", "Se a vida fosse uma playlist, você estaria no shuffle eterno.", "O pneu furado é o carro pedindo um tempo para reflexão.", "Seja como o sabão que escorrega: difícil de segurar, mas essencial.", "Quando a luz pisca, a eletricidade está piscando de volta.", "O relógio que atrasa vive em seu próprio fuso horário filosófico.", "A gaveta da cozinha cheia de bugigangas é um museu doméstico.", "Seja como o cupom que expira ontem: sempre um dia atrasado para a oportunidade.", "O pássaro que acorda às 5h da manhã é o personal trainer da natureza.", "Quando a máquina de café quebra, é o universo forçando você a se hidratar.", "A mochila pesada carrega não apenas objetos, mas as decisões que você evita tomar." ]; // Função para falar usando PowerShell (Windows) function falarComPowerShell(texto, velocidade = 1) { return new Promise((resolve) => { if (process.platform !== 'win32') { resolve(false); return; } // Ajustar velocidade (PowerShell aceita -10 a +10) const rate = Math.round((velocidade - 1) * 10); const psCommand = `Add-Type -AssemblyName System.Speech; $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer; $speak.Rate = ${rate}; $speak.Speak('${texto.replace(/'/g, "''")}')`; const ps = spawn('powershell', ['-Command', psCommand], { windowsHide: true }); ps.on('close', () => { resolve(true); }); ps.on('error', () => { resolve(false); }); }); } // Detectar vozes disponíveis no sistema function obterVozesDisponiveis() { try { const voices = say.getInstalledVoices(); return voices && voices.length > 0 ? voices : []; } catch (error) { return []; } } // Vozes disponíveis com personagens (compatíveis com Windows) const vozesDisponiveis = { yoda: { voice: null, speed: 0.6 }, // Voz lenta (Yoda bêbado) robo: { voice: null, speed: 1.4 }, // Robô quebrado (rápido) galactico: { voice: null, speed: 0.8 }, // Voz sussurada misteriosa default: { voice: null, speed: 1.0 } // Voz padrão }; class CoachGalactico { constructor() { this.conselhos = conselhosGalacticos; this.vozesDoSistema = obterVozesDisponiveis(); } // Obter conselho aleatório obterConselho() { const indiceAleatorio = Math.floor(Math.random() * this.conselhos.length); return this.conselhos[indiceAleatorio]; } // Simulação visual de diferentes tipos de voz simularVoz(conselho, tipoVoz) { const config = vozesDisponiveis[tipoVoz] || vozesDisponiveis.default; switch(tipoVoz) { case 'yoda': console.log('🧙‍♂️ Yoda bêbado sussurra lentamente...'); console.log(` "${conselho.split(' ').reverse().join(' ')}" hmm...`); console.log('💫 *som de sabre de luz oscilando*'); break; case 'robo': console.log('🤖 ROBÔ INSPIRACIONAL QUEBRADO ATIVADO...'); console.log(` "${conselho.toUpperCase().replace(/[AEIOU]/g, '3').replace(/S/g, 'Z')}"`); console.log('⚡ *bip boop... sistema de motivação FALHANDO*'); break; case 'galactico': console.log('👽 Entidade galáctica sussurra através das dimensões...'); console.log(` "✨ ${conselho.split('').join(' ')} ✨"`); console.log('🌌 *eco cósmico reverberando*'); break; default: console.log('🎭 Voz padrão do universo:'); console.log(` "${conselho}"`); console.log('🌟 *energia motivacional neutra*'); } } // Falar conselho com voz específica async falarConselho(tipoVoz = 'default', callback) { const conselho = this.obterConselho(); const configVoz = vozesDisponiveis[tipoVoz] || vozesDisponiveis.default; console.log(`🌌 Coach Galáctico diz: "${conselho}"`); console.log(''); // Linha em branco para separar console.log(`🎭 Tentando falar com voz: ${tipoVoz} (velocidade: ${configVoz.speed}x)`); // Primeiro tentar PowerShell (Windows) const powershellFuncionou = await falarComPowerShell(conselho, configVoz.speed); if (powershellFuncionou) { console.log('🔊 Áudio reproduzido via PowerShell!'); this.simularVoz(conselho, tipoVoz); if (callback) callback(); return conselho; } // Fallback: tentar módulo say try { say.speak(conselho, null, configVoz.speed, (err) => { if (err) { console.log('⚠️ Say.js também falhou - usando apenas simulação visual'); console.log(''); // Linha em branco this.simularVoz(conselho, tipoVoz); } else { console.log('🔊 Áudio reproduzido via Say.js!'); this.simularVoz(conselho, tipoVoz); } if (callback) callback(err); }); } catch (error) { console.log('⚠️ Nenhum método de áudio funcionou - apenas visual'); console.log(''); // Linha em branco this.simularVoz(conselho, tipoVoz); if (callback) callback(); } return conselho; } // Apenas retornar conselho sem falar conselhoSilencioso() { const conselho = this.obterConselho(); console.log(`🌌 Coach Galáctico diz: "${conselho}"`); return conselho; } // Listar tipos de voz disponíveis listarVozes() { const tipos = Object.keys(vozesDisponiveis); console.log(`🎭 Vozes do sistema detectadas: ${this.vozesDoSistema.length > 0 ? this.vozesDoSistema.length : 'nenhuma'}`); return tipos; } // Obter informações sobre vozes do sistema infoVozes() { console.log('🎭 Vozes disponíveis no sistema:', this.vozesDoSistema); return this.vozesDoSistema; } } module.exports = CoachGalactico;