File size: 3,589 Bytes
6b18c86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
const express = require('express');
const { default: makeWASocket, useMultiFileAuthState, DisconnectReason, downloadMediaMessage } = require('@whiskeysockets/baileys');
const { Boom } = require('@hapi/boom');
const qrcode = require('qrcode-terminal');
const axios = require('axios');
const FormData = require('form-data');

const fs = require('fs');
const path = require('path');
const { writeFile } = require('fs/promises');

const { passtoGemini, passtoLENSOCR } = require("./utils");



// Create an instance of Express
const app = express();
const PORT = 7860;
var flag = false;

// Middleware to parse JSON
app.use(express.json());

// Define a sample route
app.get('/', (req, res) => {
    res.send('Express server is running!');
});

// Start the Express server
app.listen(PORT, () => {
    console.log(`Express server is running on http://localhost:${PORT}`);
});

async function startSock() {
    const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys');

    const sock = makeWASocket({
        auth: state,
        printQRInTerminal: true,
    });

    sock.ev.on('creds.update', saveCreds);

    sock.ev.on('connection.update', (update) => {
        const { connection, lastDisconnect, qr } = update;
        if (qr) {
            qrcode.generate(qr, { small: true });
        }
        if (connection === 'close') {
            const shouldReconnect = (lastDisconnect.error = Boom)?.output?.statusCode !== DisconnectReason.loggedOut;
            console.log('Connection closed due to', lastDisconnect.error, ', reconnecting', shouldReconnect);
            // Reconnect if not logged out
            if (shouldReconnect) {
                startSock();
            }
        } else if (connection === 'open') {
            console.log('Connected to WhatsApp');
        }
    });

    sock.ev.on('messages.upsert', async (message) => {
        try {
            const msg = message.messages[0];
            if (!msg.message) return;

            console.log('Message:', msg.message.conversation);

            if(msg.message.conversation.includes("/start")){
                await sock.sendMessage(msg.key.remoteJid, { text: "Bot Started" });
                flag = true;
                return;
            }

            if(msg.message.conversation.includes("/stop")){
                await sock.sendMessage(msg.key.remoteJid, { text: "Bot Stopped" });
                flag = false;
                return;
            }


            if(!flag){
                return;
            }

            const messageType = Object.keys(msg.message)[0];

            if (messageType === 'imageMessage') {
                const sender = msg.key.participant || msg.key.remoteJid;

                if (!fs.existsSync('./images')) {
                    fs.mkdirSync('./images');
                }

                var fileName = `./images/${Date.now()}_${sender.replace('@s.whatsapp.net', '')}`;
                var extension = msg.message.imageMessage.mimetype.split('/')[1];
                fileName = fileName + '.' + extension;

                const buffer = await downloadMediaMessage(msg, 'buffer', {});
                await writeFile(fileName, buffer);

                var d = await passtoGemini(fileName);
                var text = d.split("SPACESPACESPACE");

                await sock.sendMessage(msg.key.remoteJid, { text: text[0] });
                await sock.sendMessage(msg.key.remoteJid, { text: text[1] });
            }
        } catch (error) {
            console.error('Error in m   essage upsert:', error);
        }
    });
}

startSock();