-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
160 lines (134 loc) · 4.11 KB
/
app.js
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
153
154
155
156
157
158
159
// DotEnv Config
require('dotenv').config(); // Load Configuration
// WebServer Library untuk handle incoming client, etc.
const express = require('express');
const app = express();
// Port yang dipakai ExpressJS untuk menjalankan webserver listen()
const port = 800;
// Library Tambahan untuk melengkapi fitur yang dipakai
const cors = require('cors');
const wbm = require('wbm');
const alat = require('./module-tools');
// Module untuk Validasi input
const mdvld = require('express-validator');
function mdvldResult(req, res, next) {
// Validasi Input
const errorValidasiInput = mdvld.validationResult(req);
if (!errorValidasiInput.isEmpty()) { // Jika tidak ada error
res.status(200).json({
code : 'error',
msg : errorValidasiInput.errors[0].msg
});
return true;
}else{
return false;
}
}
// Menggunakan CORS agar api dapat dipakai oleh siapa saja (tanpa perlu origin server)
app.use(cors());
// Koneksi mysql
const mysql = require('mysql2');
// Membuat koneksi db secara pooling
const pooldb = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
port: process.env.DB_PORT,
multipleStatements: true
});
wbm.start().then(async () => {
console.log('WA Web is runnning...');
return;
}).catch( (err) => {
console.log('Gagal membuka browser!');
console.log(err);
return;
});
// To make sure terminal doesn't closed
let heartBeatStop = false;
let heartBeat = setInterval(function(str1, str2, str3) {
// Jika beat tidak berhenti
if (heartBeatStop == false){
// Memberhentikan heartbeat
heartBeatStop = false;
// Mengecek pesan yang ada
let sqlsyn = `
SELECT * FROM tb_wa_message WHERE status=? ORDER BY created ASC LIMIT 10;
UPDATE tb_wa_message
SET status=?
WHERE status=? ORDER BY created ASC LIMIT 10;
`;
pooldb.query(sqlsyn, ['pending', 'sending', 'pending'], (err, result) => {
let antri = result[0];
// Mengambil data antrian
if (err){
// Menampilkan error terjadi
console.log(err);
} else if ((antri.length === 0)){
// Kosong
console.log(`Tidak ada data.`);
} else {
// Memiliki hasil timbal balik
// Menyiapkan antrian
let kontak = [];
// Memisahkan kontak dengan pesan
antri.forEach(datarequest => {
let orang = {phone:(datarequest.wa_number), message:datarequest.message };
kontak.push(orang);
});
wbm.send(kontak, `{{message}}`).then(async () => {
console.log(`Pesan terkirim`);
return;
}).catch( (err) => {
console.log(`Pesan tidak terkirim! (${err})`);
return;
});
}
// Menampilkan waktu, tanggal dan jumlah pesan yang dapat dikirimkan
let heartBeatTime = new Date();
console.log(`${heartBeatTime} ${str1} ${str2} (${antri.length}) ${str3}`);
});
}
}, 60000, "----", `Mengecek Pesan Terbaru`, "----");
// Mengambil data Countdown
app.get('/send', [
mdvld.query('destinasi').not().isEmpty().withMessage('Masukan nomor telepon!').trim().escape(),
mdvld.query('pesan').not().isEmpty().withMessage('Harap isi pesan!').trim().escape()
], (req, res) => {
// Cek Error pada validasi input
if ( mdvldResult(req, res) ){ // Jika ditemukan masalah akan return true
return; // Untuk menghentikan eksekusi lanjutan
}
// Mengambil data dari query
let {destinasi, pesan} = req.query;
// Convert ke angka saja
destinasi = destinasi.replace(/\D+/g, '');
// Menambahkan antrian ke db
let sqlsyn = `
INSERT INTO tb_wa_message (api_key_id, wa_number, message) VALUES (?, ?, ?)
`;
pooldb.query(sqlsyn, [1, destinasi, pesan], (err, result) => {
// Mengambil data antrian
if (err){
// Menampilkan error terjadi
console.log(err);
} else {
res.json({
code : "ok",
msg : "Antrian ditambahkan!"
});
}
});
});
// Menampilkan hasil error karena mengunjungi halaman yang tidak (Lost API url)
app.get('/*', (req, res) => {
res.json({
code : "error",
msg : "API Invalid"
})
});
// Menjalankan webserver ExpressJS
app.listen(port, () => {
console.log(`Server dengan port ${port} berjalan...`);
});