- INSTALAR NODE E GIT
- INSTALAR A API
a. criar pasta
b. criar arquivos
c. npm install
d. iniciar a api
e. ler o qrcode
index.html
WPP API by Pedrinho da NASA
package.json
{"name":"bot-zdg","version":"1.0.0","description":"bot-zdg: based on Whatsapp API","main":"app.js","scripts":{"start":"node .\botzdg_typebot_stop.js","start:dev":"nodemon app.js","test":"echo \"Error: no test specified\" && exit 1"},"keywords":["whatsapp-api","node.js"],"author":"Pedro","license":"MIT","dependencies":{"axios":"^1.5.0","express":"^4.17.1","express-fileupload":"^1.2.0","express-validator":"^6.9.2","http":"0.0.1-security","mysql2":"^3.6.3","qrcode":"^1.4.4","qrcode-terminal":"^0.12.0","socket.io":"2.3.0","whatsapp-web.js":"^1.23.0"},"devDependencies":{"nodemon":"^2.0.19"}}
botzdg_grupos_maratona_aula2.js
// BACKEND DA API
// BIBLIOTECAS UTILIZADAS PARA COMPOSIÇÃO DA API
const { Client, LocalAuth, MessageMedia } = require('whatsapp-web.js');
const express = require('express');
const socketIO = require('socket.io');
const qrcode = require('qrcode');
const http = require('http');
const fileUpload = require('express-fileupload');
const { body, validationResult } = require('express-validator');
const app = express();
const server = http.createServer(app);
const io = socketIO(server);
// PORTA ONDE O SERVIÇO SERÁ INICIADO
const port = 8001;
const idClient = 'bot-zdg-maratona-grupos';
// NUMEROS AUTORIZADOS
const permissaoBot = ["DDIdddXXXXXXXX@c.us"];
// SERVIÇO EXPRESS
app.use(express.json());
app.use(express.urlencoded({
extended: true
}));
app.use(fileUpload({
debug: true
}));
app.use("/", express.static(__dirname + "/"))
app.get('/', (req, res) => {
res.sendFile('index.html', {
root: __dirname
});
});
// PARÂMETROS DO CLIENT DO WPP
const client = new Client({
authStrategy: new LocalAuth({ clientId: idClient }),
puppeteer: { headless: true,
// CAMINHO DO CHROME PARA WINDOWS (REMOVER O COMENTÁRIO ABAIXO)
// executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
//===================================================================================
// CAMINHO DO CHROME PARA MAC (REMOVER O COMENTÁRIO ABAIXO)
//executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
//===================================================================================
// CAMINHO DO CHROME PARA LINUX (REMOVER O COMENTÁRIO ABAIXO)
//executablePath: '/usr/bin/google-chrome-stable',
//===================================================================================
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-accelerated-2d-canvas',
'--no-first-run',
'--no-zygote',
'--single-process', // <- this one doesn't works in Windows
'--disable-gpu'
] }
});
// INITIALIZE DO CLIENT DO WPP
client.initialize();
// EVENTOS DE CONEXÃO EXPORTADOS PARA O INDEX.HTML VIA SOCKET
io.on('connection', function(socket) {
socket.emit('message', '© BOT-ZDG - Iniciado');
socket.emit('qr', './icon.svg');
client.on('qr', (qr) => {
console.log('QR RECEIVED', qr);
qrcode.toDataURL(qr, (err, url) => {
socket.emit('qr', url);
socket.emit('message', '© BOT-ZDG QRCode recebido, aponte a câmera seu celular!');
});
});
client.on('ready', async () => {
socket.emit('ready', '© BOT-ZDG Dispositivo pronto!');
socket.emit('message', '© BOT-ZDG Dispositivo pronto!');
socket.emit('qr', './check.svg')
console.log('© BOT-ZDG Dispositivo pronto');
const groups = await client.getChats()
for (const group of groups){
if(group.id.server.includes('g.us')){
socket.emit('message', 'Nome: ' + group.name + ' - ID: ' + group.id._serialized.split('@')[0]);
console.log('Nome: ' + group.name + ' - ID: ' + group.id._serialized.split('@')[0])
}
}
});
client.on('authenticated', () => {
socket.emit('authenticated', '© BOT-ZDG Autenticado!');
socket.emit('message', '© BOT-ZDG Autenticado!');
console.log('© BOT-ZDG Autenticado');
});
client.on('auth_failure', function() {
socket.emit('message', '© BOT-ZDG Falha na autenticação, reiniciando...');
console.error('© BOT-ZDG Falha na autenticação');
});
client.on('change_state', state => {
console.log('© BOT-ZDG Status de conexão: ', state );
});
client.on('disconnected', (reason) => {
socket.emit('message', '© BOT-ZDG Cliente desconectado!');
console.log('© BOT-ZDG Cliente desconectado', reason);
client.initialize();
});
});
// EVENTO DE ESCUTA DE MENSAGENS RECEBIDAS PELA API
client.on('message', async msg => {
if (msg.body === null) return;
// REMOVER LINKS
const chat = await client.getChatById(msg.id.remote);
for (const participant of chat.participants) {
if (participant.id._serialized === msg.author && participant.isAdmin) {
return;
}
if ((participant.id._serialized === msg.author && !participant.isAdmin) &&
(msg.body.toLowerCase().includes("www")
|| msg.body.toLowerCase().includes("http")
|| msg.body.toLowerCase().includes(".br")
|| msg.body.toLowerCase().includes("://")
|| msg.body.toLowerCase().includes(".com.br")
|| msg.body.toLowerCase().includes(".com"))){
try{
await msg.delete(true)
await client.sendMessage(msg.from, "😎 Para enviar links, solicite autorização do admin.")
} catch (e){
console.log('© Comunidade ZDG')
}
}
}
});
// INITIALIZE DO SERVIÇO
server.listen(port, function() {
console.log('© Comunidade ZDG - Aplicativo rodando na porta *: ' + port);
});