forked from Tempat-Sampah/whatsappapi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
152 lines (134 loc) · 5.01 KB
/
app.js
File metadata and controls
152 lines (134 loc) · 5.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
const { Client, LocalAuth, Buttons, List, MessageMedia } = require('whatsapp-web.js');
const qrcode = require('qrcode-terminal');
const bodyParser = require('body-parser');
const express = require('express');
const http = require('http');
require('dotenv').config();
const app = express();
let nomoradmin = process.env.Nomor_ADMIN || '';
let secret = process.env.SECRET_APP || '';
let port = parseInt(process.env.PORT || 180);
// Middleware untuk mem-parsa body dari request sebagai JSON
app.use(express.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
// Membuat instance dari client WhatsApp
const client = new Client({
authStrategy: new LocalAuth({
clientId: 'client1'
}),
puppeteer: {
platform: 'linux',
headless: true,
ignoreHTTPSErrors: true,
args: [
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-extensions",
'--disable-gpu',
"--disable-accelerated-2d-canvas",
"--no-first-run",
"--no-zygote",
'--disable-dev-shm-usage'
],
},
});
// Event saat berhasil terautentikasi
client.on('authenticated', (session) => {
console.log('\x1b[31m%s\x1b[0m', 'Session WhatsApp Sudah Terhubung.');
});
// Event saat perlu melakukan scan kode QR
client.on('qr', (qrCode) => {
console.log('Scan kode QR ini di WhatsApp Anda:');
qrcode.generate(qrCode, { small: true });
});
// Fungsi untuk memformat nomor telepon
function formatPhoneNumber(number) {
number = number.replace(/@c.us/g, '');
number = number.replace(/\s+/g, ''); // Menghapus semua spasi
// Memeriksa apakah awalan adalah '0' atau '62', jika bukan, ubah menjadi '62'
if (!number.startsWith('0') && !number.startsWith('62')) {
number = '62' + number;
}
if (number.startsWith('62')) {
number = '0' + number.substr(2);
}
number = number.replace(/[\s-+]+/g, ''); // Menghapus spasi, '-', dan '+'
if (number.startsWith('0')) {
number = '62' + number.substr(1);
}
return number;
}
// Event saat client siap digunakan
client.on('ready', async () => {
console.log('\x1b[31m%s\x1b[0m', 'WhatsApp sudah terhubung.');
const tujuan = formatPhoneNumber(nomoradmin);
client.sendMessage(`${tujuan}@c.us`, 'WhatsApp sudah terhubung.');
});
// Endpoint GET untuk mengirim pesan WhatsApp
app.get('/message', async (req,res) => {
try {
const { secretApp, phoneNumber, message } = req.query;
if (secretApp === secret) {
const formattedPhoneNumber = formatPhoneNumber(phoneNumber);
await client.sendMessage(`${formattedPhoneNumber}@c.us`, message);
res.status(200).json({ success: true, message: 'Pesan terkirim.' });
} else {
res.status(500).json({ success: false, message: 'secretApp tidak cocok' });
}
} catch {
console.error('Error:', error.message);
res.status(500).json({ success: false, error: error.message });
}
})
// Endpoint POST untuk mengirim pesan WhatsApp
app.post('/message', async (req, res) => {
try {
const { secretApp, phoneNumber, message } = req.body;
if (secretApp === secret){
// console.log(`Phone Number : ${phoneNumber}`)
// console.log(`Message : ${message.replace(/(\n|\t|\r)/g, (match) => {
// if (match === '\n') return '\\n';
// if (match === '\t') return '\\t';
// if (match === '\r') return '\\r';
// })}`)
// Format nomor telepon jika diperlukan
const formattedPhoneNumber = formatPhoneNumber(phoneNumber);
// Kirim pesan WhatsApp
await client.sendMessage(`${formattedPhoneNumber}@c.us`, message);
res.status(200).json({ success: true, message: 'Pesan terkirim.' });
} else {
res.status(500).json({ success: false, message: 'secretApp tidak cocok' });
}
} catch (error) {
console.error('Error:', error.message);
res.status(500).json({ success: false, error: error.message });
}
});
// Definisikan fungsi untuk mencoba port yang berbeda jika port sudah digunakan
function startServer(port) {
const server = http.createServer(app);
server.on('error', (error) => {
if (error.code === 'EADDRINUSE') {
// Port sudah digunakan, coba port yang berbeda secara acak
console.log('\x1b[31m%s\x1b[0m', `Port ${port} sudah digunakan. Mencoba port lain...`);
// Fungsi untuk mendapatkan angka acak antara 1024 dan 65535 (rentang port yang valid)
function getRandomPort() {
return Math.floor(Math.random() * (65535 - 1024 + 1)) + 1024;
}
// Menggunakan angka acak untuk menambahkan port
let randomPort = getRandomPort();
startServer(port + randomPort); // Mencoba port berikutnya
} else {
console.error('Kesalahan lain:', error);
}
});
server.on('listening', () => {
console.log(`Server berjalan di port ${server.address().port}`);
});
server.listen(port);
}
// Inisialisasi Server
startServer(port);
// Inisialisasi client WhatsApp
client.initialize();