UNPKG

create-tina-bot

Version:

CLI para criar bots de whatsapp usamdo a base da TINA BOT

173 lines (138 loc) 4.37 kB
#!/usr/bin/env node const fs = require('fs'); const path = require('path'); const readline = require('readline'); const { exec } = require('child_process'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); console.log("🧠 Bem-vindo ao gerador Tina Bot!\n"); rl.question('📁 Qual será o nome do projeto? ', (projectName) => { if (!projectName || projectName.trim() === "") { console.log('❌ Nome inválido. Abortando...'); rl.close(); return; } const projectPath = path.join(process.cwd(), projectName); if (fs.existsSync(projectPath)) { console.log(`❌ A pasta '${projectName}' já existe. Escolha outro nome.`); rl.close(); return; } // Criando estrutura fs.mkdirSync(projectPath); fs.mkdirSync(path.join(projectPath, 'connect')); fs.mkdirSync(path.join(projectPath, 'commands')); // Arquivo: connect/connection.js fs.writeFileSync(path.join(projectPath, 'connect', 'connection.js'), ` const { Client, LocalAuth } = require('whatsapp-web.js'); const qrcode = require('qrcode-terminal'); const client = new Client({ puppeteer: { args: ['--no-sandbox', '--disable-setuid-sandbox'] } }); client.on('qr', (qr) => { console.log('QR CODE:'); qrcode.generate(qr, { small: true }); }); client.on('ready', () => { console.log('✅ Tina Bot está online!'); }); client.on('message', async msg => { if (!msg.body) return; const commands = require('./../commands'); for (const cmd of commands) { if (cmd.commands.includes(msg.body.toLowerCase())) { await cmd.execute(msg, client); } } }); client.initialize(); module.exports = client; `.trim()); // Arquivo: commands/ping.js fs.writeFileSync(path.join(projectPath, 'commands', 'ping.js'), ` module.exports = { name: "ping", description: "Responde com pong!", commands: ["ping", "!ping"], async execute(msg, client) { await msg.reply("pong!"); } } `.trim()); // Arquivo: modeloComando.js fs.writeFileSync(path.join(projectPath, 'commands', 'modeloComando.js'), ` module.exports = { name: "nome_do_comando", description: "descrição do comando", commands: ["gatilho1", "gatilho2"], async execute(msg, client) { // lógica do comando } } `.trim()); // Arquivo: commands/index.js (importa todos os comandos automaticamente) fs.writeFileSync(path.join(projectPath, 'commands', 'index.js'), ` const fs = require('fs'); const path = require('path'); const commandsDir = path.join(__dirname); const commandFiles = fs.readdirSync(commandsDir).filter(file => file.endsWith('.js') && file !== 'index.js'); const commands = commandFiles.map(file => require(\`./\${file}\`)); module.exports = commands; `.trim()); // Arquivo: index.js (ponto de entrada) fs.writeFileSync(path.join(projectPath, 'index.js'), ` require('./connect/connection'); `.trim()); // package.json básico fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify({ name: projectName, version: "1.0.0", main: "index.js", scripts: { start: "node index.js" }, dependencies: {}, description: "Bot WhatsApp baseado em Tina CLI", author: "", license: "MIT" }, null, 2)); // README.md fs.writeFileSync(path.join(projectPath, 'README.md'), ` # ${projectName} 🤖 Projeto de bot para WhatsApp baseado em *whatsapp-web.js* ## Estrutura - \`index.js\`: ponto de entrada - \`connect/connection.js\`: conexão com WhatsApp - \`commands/\`: onde ficam seus comandos - \`modeloComando.js\`: estrutura base para novos comandos ## Rodando Instale as dependências: \`\`\`bash npm install \`\`\` Inicie o bot: \`\`\`bash npm start \`\`\` Scan o QR code e pronto! --- `.trim()); console.log(`📁 Projeto '${projectName}' criado com sucesso!`); console.log('📦 Instalando dependências: whatsapp-web.js, qrcode-terminal...\n'); // Instalar dependências exec(`cd ${projectName} && npm install whatsapp-web.js qrcode-terminal`, (err, stdout, stderr) => { if (err) { console.error("❌ Erro ao instalar dependências:", err.message); } else { console.log(stdout); console.log('✅ Dependências instaladas com sucesso!'); } console.log('\n✔️ Tudo pronto! Digite:'); console.log(`\n cd ${projectName} && npm start\n`); rl.close(); }); });