whatsapp_bridge/server.js aktualisiert
This commit is contained in:
@@ -1,15 +1,19 @@
|
|||||||
const { Client, LocalAuth } = require('whatsapp-web.js');
|
const { Client, LocalAuth } = require('whatsapp-web.js');
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const qrcode = require('qrcode');
|
const qrcode = require('qrcode');
|
||||||
const app = express();
|
const fs = require('fs-extra');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
const app = express();
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
|
app.use(express.static(path.join(__dirname, 'ui')));
|
||||||
|
|
||||||
let lastQr = "";
|
let lastQr = "";
|
||||||
let isReady = false;
|
let isReady = false;
|
||||||
|
const SESSION_DATA = '/data/auth';
|
||||||
|
|
||||||
const client = new Client({
|
const client = new Client({
|
||||||
authStrategy: new LocalAuth({ dataPath: '/data/auth' }),
|
authStrategy: new LocalAuth({ dataPath: SESSION_DATA }),
|
||||||
puppeteer: {
|
puppeteer: {
|
||||||
executablePath: '/usr/bin/chromium-browser',
|
executablePath: '/usr/bin/chromium-browser',
|
||||||
args: [
|
args: [
|
||||||
@@ -23,6 +27,7 @@ const client = new Client({
|
|||||||
|
|
||||||
client.on('qr', (qr) => {
|
client.on('qr', (qr) => {
|
||||||
lastQr = qr;
|
lastQr = qr;
|
||||||
|
isReady = false;
|
||||||
console.log('Neuer QR Code generiert.');
|
console.log('Neuer QR Code generiert.');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -32,22 +37,49 @@ client.on('ready', () => {
|
|||||||
console.log('WhatsApp ist bereit!');
|
console.log('WhatsApp ist bereit!');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Web UI für Ingress
|
client.on('disconnected', () => {
|
||||||
app.get('/', async (req, res) => {
|
isReady = false;
|
||||||
if (isReady) {
|
console.log('WhatsApp Verbindung getrennt.');
|
||||||
res.send('<div style="text-align:center;font-family:sans-serif;"><h1>WhatsApp verbunden! ✅</h1><p>Du kannst dieses Fenster jetzt schließen.</p></div>');
|
});
|
||||||
} else if (lastQr) {
|
|
||||||
const qrImage = await qrcode.toDataURL(lastQr);
|
// --- API für die UI ---
|
||||||
res.send(`<div style="text-align:center;font-family:sans-serif;"><h1>WhatsApp Login</h1><p>Scanne den Code mit deinem Handy:</p><img src="${qrImage}"></div>`);
|
|
||||||
} else {
|
app.get('/api/status', async (req, res) => {
|
||||||
res.send('<div style="text-align:center;font-family:sans-serif;"><h1>Warte auf QR-Code...</h1><p>Bitte Seite in 10 Sekunden neu laden.</p></div>');
|
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) => {
|
app.post('/send', async (req, res) => {
|
||||||
const { number, message } = req.body;
|
const { number, message } = req.body;
|
||||||
if (!isReady) return res.status(503).json({ error: 'Client nicht bereit' });
|
if (!isReady) return res.status(503).json({ error: 'Client nicht bereit' });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const chatId = number.includes('@c.us') ? number : `${number}@c.us`;
|
const chatId = number.includes('@c.us') ? number : `${number}@c.us`;
|
||||||
await client.sendMessage(chatId, message);
|
await client.sendMessage(chatId, message);
|
||||||
|
|||||||
Reference in New Issue
Block a user