-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbot-frontend.js
More file actions
124 lines (104 loc) · 3.8 KB
/
bot-frontend.js
File metadata and controls
124 lines (104 loc) · 3.8 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
const readline = require('readline');
const io = require('socket.io-client');
const socket = io('http://localhost:3000');
const qrcode = require('qrcode-terminal');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
/* ===================== Socket.IO Events ===================== */
socket.on('connect', () => {
console.log('Connected to backend server.');
});
socket.on('qrCode', (qr) => {
qrcode.generate(qr, { small: true });
console.log('QR code generated. Scan it with your phone.');
});
socket.on('ready', (message) => {
console.log(message);
startMessagingSession();
});
socket.on('status', (data) => {
console.log(data.success ? '✅ Success:' : '❌ Error:', data.message);
startMessagingSession();
});
socket.on('contactsList', (contacts) => {
const keys = Object.keys(contacts);
if (keys.length === 0) {
console.log('No contacts available. Please enter manually.');
return manualInput();
}
console.log('\nAvailable contacts:');
for (const key of keys) {
console.log(`${key}. ${contacts[key].name}`);
}
rl.question('Enter the number of the contact to send to: ', (contactKey) => {
const key = contactKey.trim();
const contact = contacts[key];
if (!contact) {
console.log('Invalid contact number. Returning to main menu.');
return startMessagingSession();
}
// ... now, ask for message/media payload and emit the event
});
});
socket.on('newMessage', (message) => {
console.log(`\nNew message from ${message.from}: ${message.body}`);
});
/* ===================== CLI Menus and Logic ===================== */
function startMessagingSession() {
console.log('\nSelect an option:');
console.log('1. Send text message');
console.log('2. Send media (image, video, etc.)');
console.log('Type "exit" to quit.');
rl.question('Enter your choice (1 or 2): ', (choice) => {
const c = choice.trim().toLowerCase();
if (c === 'exit') {
rl.close();
socket.disconnect();
return;
}
if (c === '1') {
sendTextFlow();
} else if (c === '2') {
sendMediaFlow();
} else {
console.log('Invalid choice. Please enter 1, 2, or "exit".');
startMessagingSession();
}
});
}
function sendTextFlow() {
rl.question('Enter recipient JID/number (e.g., 62812xxxx or group ID): ', (recipient) => {
rl.question('Enter your message: ', (message) => {
if (!message.trim()) {
console.log('Message cannot be empty.');
return startMessagingSession();
}
// Emit the sendText event to the backend
socket.emit('sendText', { recipient, message });
});
});
}
function sendMediaFlow() {
rl.question('Enter recipient JID/number: ', (recipient) => {
rl.question('Enter media type (image, video, audio, document): ', (type) => {
rl.question('Enter media source type (url or file): ', (sourceType) => {
rl.question(`Enter media ${sourceType} path/url: `, (source) => {
rl.question('Enter caption (optional): ', (caption) => {
// Emit the sendMedia event to the backend
socket.emit('sendMedia', { recipient, type, sourceType, source, caption });
});
});
});
});
});
}
/* ===================== Cleanup ===================== */
rl.on('close', () => {
console.log('Exiting...');
socket.disconnect();
process.exit(0);
});
// Initial call to start the session, assuming backend is ready
// startMessagingSession(); // This will now be called by the `ready` event from the backend