Files
Whatsapp-Bridge-Addon/whatsapp_bridge/server.js

93 lines
2.5 KiB
JavaScript

const { Client, LocalAuth } = require('whatsapp-web.js');
const express = require('express');
const qrcode = require('qrcode');
const fs = require('fs-extra');
const path = require('path');
const app = express();
app.use(express.json());
app.use(express.static(path.join(__dirname, 'ui')));
let lastQr = "";
let isReady = false;
const SESSION_DATA = '/data/auth';
const client = new Client({
authStrategy: new LocalAuth({ dataPath: SESSION_DATA }),
puppeteer: {
executablePath: '/usr/bin/chromium-browser',
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-gpu'
]
}
});
client.on('qr', (qr) => {
lastQr = qr;
isReady = false;
console.log('Neuer QR Code generiert.');
});
client.on('ready', () => {
isReady = true;
lastQr = "";
console.log('WhatsApp ist bereit!');
});
client.on('disconnected', () => {
isReady = false;
console.log('WhatsApp Verbindung getrennt.');
});
// --- API für die UI ---
app.get('/api/status', async (req, res) => {
res.json({
isReady: isReady,
hasQr: lastQr !== "",
qrCode: lastQr ? await qrcode.toDataURL(lastQr) : null
});
});
app.post('/auth/logout', async (req, res) => {
try {
console.log("Logging out...");
await client.logout();
await fs.remove(SESSION_DATA);
res.json({ success: true, message: "Logged out. Addon restarts now..." });
setTimeout(() => process.exit(0), 2000);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.delete('/system/reset', async (req, res) => {
try {
console.log("Factory Reset triggered!");
await client.destroy();
await fs.emptyDir('/data');
res.json({ success: true, message: "All data deleted. Restarting..." });
setTimeout(() => process.exit(0), 2000);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// Nachricht senden
app.post('/send', async (req, res) => {
const { number, message } = req.body;
if (!isReady) return res.status(503).json({ error: 'Client nicht bereit' });
try {
const chatId = number.includes('@c.us') ? number : `${number}@c.us`;
await client.sendMessage(chatId, message);
res.json({ success: true });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
client.initialize();
app.listen(3000, () => console.log('Add-on Server läuft auf Port 3000'));