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
JavaScript
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;