-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
118 lines (108 loc) · 3.94 KB
/
index.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
const {
default: makeWASocket,
useMultiFileAuthState,
DisconnectReason,
downloadContentFromMessage,
delay,
} = require("@whiskeysockets/baileys");
const logger = require("pino")({ level: "silent" });
const { Boom } = require("@hapi/boom");
const { Sticker, StickerTypes, extractMetadata } = require('wa-sticker-formatter');
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('BOT RUNNING! BOT by @theazran_ ')
})
async function run() {
const { state, saveCreds } = await useMultiFileAuthState("sessions");
const client = makeWASocket({
auth: state,
printQRInTerminal: true,
logger,
});
// connection
client.ev.on("connection.update", (update) => {
const { connection, lastDisconnect } = update;
if (connection === "close") {
if (
new Boom(lastDisconnect.error).output?.statusCode ===
DisconnectReason.loggedOut
) {
client.logout();
console.log("Logged out...");
} else {
run();
}
} else {
console.log("BOT Running...");
}
});
// save creds
client.ev.on("creds.update", saveCreds);
// message
client.ev.on("messages.upsert", async (msg) => {
try {
if (!msg.messages) return;
const m = msg.messages[0];
if (m.key.fromMe) return;
var from = m.key.remoteJid;
let type = Object.keys(m.message)[0];
const body =
type === "conversation"
? m.message.conversation
: type == "imageMessage"
? m.message.imageMessage.caption
: type == "videoMessage"
? m.message.videoMessage.caption
: type == "extendedTextMessage"
? m.message.extendedTextMessage.text
: type == "buttonsResponseMessage"
? m.message.buttonsResponseMessage.selectedButtonId
: type == "listResponseMessage"
? m.message.listResponseMessage.singleSelectReply.selectedRowId
: type == "templateButtonReplyMessage"
? m.message.templateButtonReplyMessage.selectedId
: type === "messageContextInfo"
? m.message.listResponseMessage.singleSelectReply.selectedRowId ||
m.message.buttonsResponseMessage.selectedButtonId ||
m.text
: "";
const isMedia = (type === 'imageMessage' || type === 'videoMessage')
const isQuotedImage = type === 'extendedTextMessage' && content.includes('imageMessage')
global.reply = async (text) => {
await client.sendPresenceUpdate("composing", from);
return client.sendMessage(from, { text }, { quoted: m });
};
client.downloadMediaMessage = downloadMediaMessage
async function downloadMediaMessage(message) {
let mimes = (message.msg || message).mimetype || ''
let messageType = mimes.split('/')[0].replace('application', 'document') ? mimes.split('/')[0].replace('application', 'document') : mimes.split('/')[0]
let extension = mimes.split('/')[1]
const stream = await downloadContentFromMessage(message, messageType)
let buffer = Buffer.from([])
for await (const chunk of stream) {
buffer = Buffer.concat([buffer, chunk])
}
return buffer
}
if (isMedia) {
const message = isQuotedImage ? m.quoted : m.message.imageMessage
const buff = await client.downloadMediaMessage(message)
const data = new Sticker(buff, { pack: 'Follow', author: '@theazran_', type: StickerTypes.FULL, quality: 50, id: 'null' })
await client.sendMessage(from, await data.toMessage(), { quoted: m })
}
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
} catch (error) {
console.log(error);
}
});
}
// running bot
try {
run();
} catch (e) {
console.log(e);
}