create-tina-bot
Version:
CLI para criar bots de whatsapp usamdo a base da TINA BOT
173 lines (138 loc) • 4.37 kB
JavaScript
#!/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();
});
});