require('./db/config') const { default: makeWASocket, useMultiFileAuthState, DisconnectReason, fetchLatestBaileysVersion, generateForwardMessageContent, prepareWAMessageMedia, generateWAMessageFromContent, generateMessageID, downloadContentFromMessage, jidDecode, getAggregateVotesInPollMessage, proto } = require("@whiskeysockets/baileys") const fs = require('fs') const pino = require('pino') const chalk = require('chalk') const path = require('path') const readline = require("readline"); const CFonts = require('cfonts') const spin = require('spinnies') const axios = require('axios') const FileType = require('file-type') const yargs = require('yargs/yargs') const _ = require('lodash') const { Boom } = require('@hapi/boom') const PhoneNumber = require('awesome-phonenumber') const { color, bgcolor } = require('./lib/color') const ff = require("fluent-ffmpeg"); const { tmpdir } = require("os") const crypto = globalThis.crypto || require('crypto'); if (!globalThis.crypto) globalThis.crypto = require('crypto'); let d = new Date let locale = 'id' let gmt = new Date(0).getTime() - new Date('1 Januari 2021').getTime() let weton = ['Pahing', 'Pon','Wage','Kliwon','Legi'][Math.floor(((d * 1) + gmt) / 84600000) % 5] let week = d.toLocaleDateString(locale, { weekday: 'long' }) const calender = d.toLocaleDateString("id", { day: 'numeric', month: 'long', year: 'numeric' }) const usePairingCode = true const { smsg, isUrl, generateMessageTag, getBuffer, getSizeMedia, fetchJson, await, sleep } = require('./lib/myfunc') const question = (text) => { const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); return new Promise((resolve) => { rl.question(text, resolve) }) }; //=================================================// const store = { contacts: new Map(), chats: new Map(), messages: new Map(), saveMessage(jid, id, message, expireMs = 1200000) { if (!jid || !id || !message) return false; if (!this.messages.has(jid)) this.messages.set(jid, new Map()); const msgs = this.messages.get(jid); if (msgs.has(id)) clearTimeout(msgs.get(id).timer); msgs.set(id, { data: message, timer: setTimeout(() => { msgs.delete(id); if (!msgs.size) this.messages.delete(jid); }, expireMs), savedAt: Date.now() }); return true; }, loadMessage(jid, id) { return this.messages.get(jid)?.get(id)?.data; }, hasMessage(jid, id) { return !!this.messages.get(jid)?.has(id); }, deleteMessage(jid, id) { const msgs = this.messages.get(jid); if (!msgs?.has(id)) return false; clearTimeout(msgs.get(id).timer); msgs.delete(id); if (!msgs.size) this.messages.delete(jid); return true; }, flushMessages() { this.messages.forEach(msgs => msgs.forEach(m => clearTimeout(m.timer))); this.messages.clear(); } }; //=================================================// //=================================================// const spinner = { "interval": 120, "frames": [ "✖ [░░░░░░░░░░░░░░░]", "✖ [■░░░░░░░░░░░░░░]", "✖ [■■░░░░░░░░░░░░░]", "✖ [■■■░░░░░░░░░░░░]", "✖ [■■■■░░░░░░░░░░░]", "✖ [■■■■■░░░░░░░░░░]", "✖ [■■■■■■░░░░░░░░░]", "✖ [■■■■■■■░░░░░░░░]", "✖ [■■■■■■■■░░░░░░░]", "✖ [■■■■■■■■■░░░░░░]", "✖ [■■■■■■■■■■░░░░░]", "✖ [■■■■■■■■■■■░░░░]", "✖ [■■■■■■■■■■■■░░░]", "✖ [■■■■■■■■■■■■■░░]", "✖ [■■■■■■■■■■■■■■░]", "✖ [■■■■■■■■■■■■■■■]" ]} let globalSpinner; const getGlobalSpinner = (disableSpins = false) => { if(!globalSpinner) globalSpinner = new spin({ color: 'crimson', succeedColor: 'green', spinner, disableSpins}); return globalSpinner; } let spins = getGlobalSpinner(false) const start = (id, text) => { spins.add(id, {text: text}) } const success = (id, text) => { spins.succeed(id, {text: text}) } //=================================================// CFonts.say( "XSTBOT\n\n", { colors: ["system"], font: "console", align: "center", }, ); console.log(color(`Validasi Nickname Untuk Bot Dan Website`, "gold"), color(`\n-`, "gold"), color(`Website`, "gold"), color(`https://ceknickname.com`, "blue"), color(`\n\n-`, "gold"), color(`Jika code tidak muncul enter 1-2x lagi`, "green"), color(`\n-`, "gold"), color(`Format nomor diawali dengan 62..., bukan 08...`, "green"), color(`\n-`, "gold"), color(`Script terintegrasi dengan bxystore`, "green"), color(`\n-`, "gold"), color(`Dikembangkan oleh xshoptopup.`, "green"), color(`\n-`, "gold"), color(`Dilarang menjual script ini tanpa izin.`, "green") ) //=================================================// async function connectToWhatsApp() { const { state, saveCreds } = await useMultiFileAuthState(global.sessionName) const xstbot = makeWASocket({ logger: pino({ level: "silent" }), printQRInTerminal: !usePairingCode, auth: state, browser: [ 'Windows', 'Chrome', '11'], }); if(usePairingCode && !xstbot.authState.creds.registered) { const phoneNumber = await question(color('\n\n\nMasukan Nomor WhatsApp Kamu Dengan Awalan 62 :\n', 'gray')); const code = await xstbot.requestPairingCode(phoneNumber.trim()) console.log(color(`⚠︎ BERIKUT KODE PAIRING BOT WA ANDA :`,"gold"), color(`[ ${code} ]`, "white")) } //=================================================// xstbot.decodeJid = (jid) => { if (!jid) return jid if (/:\d+@/gi.test(jid)) { let decode = jidDecode(jid) || {} return decode.user && decode.server && decode.user + '@' + decode.server || jid } else return jid } //=================================================// xstbot.ev.on('messages.upsert', async chatUpdate => { try { mek = chatUpdate.messages[0] if (!mek.message) return mek.message = (Object.keys(mek.message)[0] === 'ephemeralMessage') ? mek.message.ephemeralMessage.message : mek.message if (mek.key && mek.key.remoteJid === 'status@broadcast') return if (!xstbot.public && !mek.key.fromMe && chatUpdate.type === 'notify') return if (mek.key.id.startsWith('BAE5') && mek.key.id.length === 16) return m = smsg(xstbot, mek, store) require("./XSTBot")(xstbot, m, chatUpdate, store) } catch (err) { console.log(err) } }) //=================================================// //=================================================// //=================================================// // =================================== //=================================================// //=================================================// //Kalau Mau Self Lu Buat Jadi false xstbot.public = true