forked from IRON-M4N/pair-example
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
120 lines (109 loc) · 3.91 KB
/
index.js
File metadata and controls
120 lines (109 loc) · 3.91 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
const express = require('express');
const fs = require('fs');
const pino = require('pino');
const NodeCache = require('node-cache');
const {
default: makeWASocket,
useMultiFileAuthState,
delay,
Browsers,
makeCacheableSignalKeyStore,
DisconnectReason
} = require('baileys');
const { upload } = require('./mega');
const { Mutex } = require('async-mutex');
const config = require('./config');
const path = require('path');
var app = express();
var port = 3000;
var session;
const msgRetryCounterCache = new NodeCache();
const mutex = new Mutex();
app.use(express.static(path.join(__dirname, 'static')));
async function connector(Num, res) {
var sessionDir = './session';
if (!fs.existsSync(sessionDir)) {
fs.mkdirSync(sessionDir);
}
var { state, saveCreds } = await useMultiFileAuthState(sessionDir);
session = makeWASocket({
auth: {
creds: state.creds,
keys: makeCacheableSignalKeyStore(state.keys, pino({ level: 'fatal' }).child({ level: 'fatal' }))
},
// printQRInTerminal: false,
logger: pino({ level: 'fatal' }).child({ level: 'fatal' }),
browser: Browsers.macOS("Safari"), //check docs for more custom options
markOnlineOnConnect: true, //true or false yoour choice
msgRetryCounterCache
});
if (!session.authState.creds.registered) {
await delay(1500);
Num = Num.replace(/[^0-9]/g, '');
var code = await session.requestPairingCode(Num);
if (!res.headersSent) {
res.send({ code: code?.match(/.{1,4}/g)?.join('-') });
}
}
session.ev.on('creds.update', async () => {
await saveCreds();
});
session.ev.on('connection.update', async (update) => {
var { connection, lastDisconnect } = update;
if (connection === 'open') {
console.log('Connected successfully');
await delay(5000);
var myr = await session.sendMessage(session.user.id, { text: `${config.MESSAGE}` });
var pth = './session/creds.json';
try {
var url = await upload(pth);
var sID;
if (url.includes("https://mega.nz/file/")) {
sID = config.PREFIX + url.split("https://mega.nz/file/")[1];
} else {
sID = 'Fekd up';
}
//edit this you can add ur own image in config or not ur choice
await session.sendMessage(session.user.id, { image: { url: `${config.IMAGE}` }, caption: `*Session ID*\n\n${sID}` }, { quoted: myr });
} catch (error) {
console.error('Error:', error);
} finally {
//await delay(500);
if (fs.existsSync(path.join(__dirname, './session'))) {
fs.rmdirSync(path.join(__dirname, './session'), { recursive: true });
}
}
} else if (connection === 'close') {
var reason = lastDisconnect?.error?.output?.statusCode;
reconn(reason);
}
});
}
function reconn(reason) {
if ([DisconnectReason.connectionLost, DisconnectReason.connectionClosed, DisconnectReason.restartRequired].includes(reason)) {
console.log('Connection lost, reconnecting...');
connector();
} else {
console.log(`Disconnected! reason: ${reason}`);
session.end();
}
}
app.get('/pair', async (req, res) => {
var Num = req.query.code;
if (!Num) {
return res.status(418).json({ message: 'Phone number is required' });
}
//you can remove mutex if you dont want to queue the requests
var release = await mutex.acquire();
try {
await connector(Num, res);
} catch (error) {
console.log(error);
res.status(500).json({ error: "fekd up"});
} finally {
release();
}
});
app.listen(port, () => {
console.log(`Running on PORT:${port}`);
});