101 lines
2.7 KiB
TypeScript
101 lines
2.7 KiB
TypeScript
import { create, Whatsapp } from 'venom-bot';
|
|
import express, { type Request, type Response } from 'express';
|
|
import type { UploadedFile } from 'express-fileupload';
|
|
|
|
let client: Whatsapp;
|
|
|
|
function convertToPhoneNumber(number: string): number {
|
|
if (number.startsWith('0')) {
|
|
number = number.slice(1);
|
|
}
|
|
return parseInt(`62${number}`);
|
|
}
|
|
|
|
async function initBot() {
|
|
try {
|
|
client = await create({
|
|
session: 'kurir-bot',
|
|
headless: 'new',
|
|
browserArgs: ['--no-sandbox'],
|
|
});
|
|
|
|
console.log('WhatsApp bot connected');
|
|
|
|
client.onMessage(async (message) => {
|
|
if (message.body === 'hi' && !message.isGroupMsg) {
|
|
await client.sendText(message.from, 'Hello! 👋');
|
|
}
|
|
});
|
|
|
|
// Start the HTTP server after bot is ready
|
|
startServer();
|
|
} catch (err) {
|
|
console.error('Failed to initialize bot:', err);
|
|
}
|
|
}
|
|
|
|
function startServer() {
|
|
const app = express();
|
|
app.use(express.json());
|
|
|
|
app.post('/send-otp', async (req: Request, res: Response) => {
|
|
let { number, otp } = req.body;
|
|
|
|
number = convertToPhoneNumber(number);
|
|
console.log(`Sending OTP ${otp} to ${number}`);
|
|
|
|
const formattedNumber = `${number}@c.us`;
|
|
|
|
try {
|
|
await client.sendText(formattedNumber, `Kode OTP Anda: ${otp}`);
|
|
console.log(`OTP ${otp} sent to ${number}`);
|
|
res.status(200).json({ success: true });
|
|
} catch (error) {
|
|
// console.error(error);
|
|
if (
|
|
typeof error === 'object' &&
|
|
error !== null &&
|
|
'status' in error &&
|
|
'text' in error
|
|
) {
|
|
const err = error as { status: number; text: string };
|
|
console.log(err.status);
|
|
console.log(err.text);
|
|
const text_response = err.status == 404 ? 'Nomor Telpon Tidak Terdaftar Pada Whatsapp<br />Silahkan Periksa Nomor Telpon Anda' : err.text
|
|
res.status(err.status).json(text_response);
|
|
return;
|
|
}
|
|
res.status(500).json({ error: 'Failed to send OTP.' });
|
|
}
|
|
});
|
|
|
|
app.post('/send-message', async (req: Request, res: Response) => {
|
|
let { number, message, img_stat = false , foto_paket , foto_name} = req.body;
|
|
|
|
|
|
console.log(number, message, img_stat);
|
|
|
|
number = convertToPhoneNumber(number);
|
|
|
|
const formattedNumber = `${number}@c.us`;
|
|
try {
|
|
if(img_stat){
|
|
await client.sendImage(formattedNumber, foto_paket, foto_name, message);
|
|
}else{
|
|
await client.sendText(formattedNumber, message);
|
|
}
|
|
res.status(200).json({ success: true });
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({ error: 'Failed to send message.' });
|
|
}
|
|
});
|
|
|
|
const PORT = 3012;
|
|
app.listen(PORT, () => {
|
|
console.log(`WhatsApp bot API listening on http://localhost:${PORT}`);
|
|
});
|
|
}
|
|
|
|
initBot();
|