# WhatsApp Bot im Docker Container

Zuerst starten wir ein neues Node.js Projekt und installieren das WhatsApp Package:
npm init -y
npm i whatsapp-web.js qrcode-terminal
Danach erstellen wir eine index.js und binden unsere Packages ein:
//index.js
const fs = require('fs');
const qrcode = require('qrcode-terminal');
const { Client } = require('whatsapp-web.js');
Das Dateisystem (fs) benötigen wir um die Sessiondaten zu sichern. Den QR-Code-Terminal um den QR-Code auf der Console anzuzeigen.
Zuerst laden wir die Sessiondaten, wenn vorhanden, und instanzieren den Client.
//index.js
const SESSION_FILE_PATH = './session.json';
let sessionData;
if(fs.existsSync(SESSION_FILE_PATH)) {
sessionData = require(SESSION_FILE_PATH);
}
const client = new Client({
session: sessionData
});
Wenn keine Sessiondaten gefunden wurden, wird ein QR Code auf der Console erzeugt, welcher mit dem Smartphone gescannt werden muss.
//index.js
client.on('qr', qr => {
qrcode.generate(qr, {small: true});
});
Ist der Bot geladen, wird das ready Event ausgeführt, in der wir uns eine Consolen-Ausgabe anzeigen:
//index.js
client.on('ready', async () => {
console.log('Client is ready!');
});
client.initialize();
Im Message Event können wir auf neue Nachrichten reagieren:
//index.js
client.on('message', async message => {
client.sendMessage(message.from, 'Vielen Dank für deine Nachricht.');
});
Nach der Initalisierung des Clients können wir auch auf vergangene Nachrichten zugreifen und darauf reagieren:
const chats = await client.getChats();
for(let chat of chats){
let messages = await chat.fetchMessages();
for(let message of messages){
console.info(message);
}
}
