|
const chalk = require('chalk') |
|
const pino = require('pino') |
|
const fs = require("fs") |
|
const { |
|
Sticker, |
|
StickerTypes |
|
} = require('wa-sticker-formatter') |
|
const moment = require("moment-timezone"); |
|
const util = require("util"); |
|
const crypto = require("crypto") |
|
const { |
|
exec, |
|
spawn, |
|
execSync |
|
} = require("child_process") |
|
const axios = require("axios"); |
|
const yts = require("yt-search"); |
|
const speed = require("performance-now"); |
|
const ms = require("parse-ms"); |
|
const os = require('os'); |
|
let platform = os.platform(); |
|
let arch = os.arch(); |
|
const { |
|
join, |
|
dirname |
|
} = require('path'); |
|
const path = require('path'); |
|
const { |
|
performance |
|
} = require('perf_hooks') |
|
const fetch = require('node-fetch'); |
|
const request = require("request") |
|
const { |
|
userXp, |
|
userLeveling |
|
} = require("../lib/user"); |
|
const { |
|
msgFilter, |
|
addSpam, |
|
SpamExpired, |
|
cekSpam |
|
} = require('../lib/antispam') |
|
const { |
|
color |
|
} = require('../lib/color') |
|
const { |
|
toFirstCase, |
|
isNumber, |
|
pickRandom, |
|
generateProfilePicture, |
|
listCase, |
|
runtime, |
|
makeid, |
|
isUrl, |
|
fetchJson, |
|
sleep, |
|
getBuffer |
|
} = require("../lib/myfunc"); |
|
const ephoto = require('../lib/scraper') |
|
const addblockcmd = require("../lib/blockcmd"); |
|
const { |
|
Failed, |
|
Succes, |
|
checkDataId |
|
} = require("../lib/totalcmd"); |
|
const _sewa = require('../lib/sewa') |
|
const _prem = require("../lib/premium"); |
|
const { |
|
jadibot, |
|
stopjadibot, |
|
listjadibot |
|
} = require('../lib/jadibot.js') |
|
const { |
|
bad |
|
} = require('../message/messages') |
|
const { |
|
vnMenu, |
|
images, |
|
zoroimages |
|
} = require('../temp/media/links.js') |
|
const { |
|
virtex |
|
} = require('../database/virtex/virtex.js') |
|
|
|
const AntiSpam = db.data.antispam |
|
const DataId = db.data.data |
|
const ban = db.data.banned |
|
const premium = db.data.premium |
|
const listcmdblock = db.data.blockcmd |
|
const listerror = db.data.listerror |
|
const hitnya = db.data.hittoday |
|
const dash = db.data.dashboard |
|
const anonChat = db.data.anonymous |
|
const allcommand = db.data.allcommand |
|
const sewa = db.data.sewa |
|
const spammer = [] |
|
|
|
|
|
module.exports = async (conn, dev, chatUpdate, store) => { |
|
var multi = db.data.settings['settingbot'].multi |
|
const m = dev |
|
var Ownerin = "[email protected]" |
|
const Tnow = (new Date() / 1000).toFixed(0) |
|
const seli = Tnow - m.messageTimestamp.low |
|
if (seli > Intervalmsg) return console.log((`Message ${Intervalmsg} seconds ago ignored to avoid spamming`)) |
|
try { |
|
const { |
|
type, |
|
now, |
|
args, |
|
sender, |
|
fromMe, |
|
from, |
|
botNumber, |
|
senderNumber, |
|
groupName, |
|
groupId, |
|
groupMembers, |
|
groupDesc, |
|
groupOwner, |
|
pushname, |
|
itsMe, |
|
mentionByTag, |
|
mentionByReply, |
|
users, |
|
budy, |
|
content, |
|
body |
|
} = dev |
|
|
|
const isGroup = m.key.remoteJid.endsWith('@g.us'); |
|
const prefixFile = './database/prefix.json'; |
|
let prefix = '.'; |
|
if (fs.existsSync(prefixFile)) { |
|
try { |
|
const data = JSON.parse(fs.readFileSync(prefixFile, 'utf8')); |
|
if (data.prefix) prefix = data.prefix; |
|
} catch (error) { |
|
console.error('Error loading prefix:', error); |
|
} |
|
} |
|
var ownerNumber = [`${botNumber}@s.whatsapp.net`, `[email protected]`, `${conn.user.jid}`] |
|
const ownerFile = './database/owner.json'; |
|
let ownerList = []; |
|
if (fs.existsSync(ownerFile)) { |
|
try { |
|
ownerList = JSON.parse(fs.readFileSync(ownerFile, 'utf8')); |
|
} catch (error) { |
|
console.error('Error loading owner list:', error); |
|
} |
|
} |
|
const isOwner = ownerNumber.includes(sender) || ownerList.includes(sender) || checkDataId("owner", sender, DataId); |
|
const isCmd = body.startsWith(prefix) |
|
const isCommand = isCmd ? body.replace(prefix, '').trim().split(/ +/).shift().toLowerCase() : "" |
|
const isCommandx = body.startsWith(prefix) ? |
|
body.replace(prefix, '').trim().split(/ +/).shift().toLowerCase() : |
|
body.trim().split(/ +/).shift().toLowerCase(); |
|
const q = args.join(' ') |
|
const timeWib = moment().tz('Africa/Lagos').format('HH:mm:ss') |
|
const text = args.join(' ') |
|
const command = (_prem || isOwner) ? body.replace(prefix, '').trim().split(/ +/).shift().toLowerCase() : isCommand |
|
const theOwner = sender == Ownerin |
|
const timestampp = speed(); |
|
const latensi = speed() - timestampp |
|
const quoted = dev.quoted ? dev.quoted : dev |
|
const mime = (quoted.msg || quoted).mimetype || '' |
|
const more = String.fromCharCode(8206) |
|
const readmore = more.repeat(4001) |
|
const numberQuery = q.replace(new RegExp("[()+-/ +/]", "gi"), "") + `@s.whatsapp.net` |
|
const Input = (mentionByTag && mentionByTag[0]) ? mentionByTag[0] : |
|
(mentionByReply || q ? numberQuery : false); |
|
let publik = true |
|
const replyCommand = isCmd ? isCmd : allcommand.includes(toFirstCase(command)) |
|
const selectedButton = (type == 'buttonsResponseMessage') ? dev.message.buttonsResponseMessage.selectedButtonId : '' |
|
const isMessage = |
|
m.message.conversation || |
|
m.message.extendedTextMessage?.text || |
|
m.message.imageMessage?.caption || |
|
m.message.imageMessage?.url || |
|
m.message.videoMessage?.caption || |
|
m.message.videoMessage?.url || |
|
m.message.stickerMessage?.url || |
|
m.message.documentMessage?.caption || |
|
m.message.documentMessage?.url || |
|
m.message.audioMessage?.url || |
|
m.message.buttonsResponseMessage?.selectedButtonId || |
|
m.message.templateButtonReplyMessage?.selectedId || |
|
m.message.listResponseMessage?.singleSelectReply?.selectedRowId || |
|
m.message.contactMessage?.displayName || |
|
m.message.locationMessage?.degreesLatitude || |
|
m.message.pollCreationMessage?.name || |
|
''; |
|
const user = global.db.data.users[m.sender] |
|
const chat = isGroup ? global.db.data.chats[m.chat] : false |
|
const kickon = global.db.data.kickon[m.chat] |
|
const botRun = global.db.data.others['runtime'] |
|
const botTime = (new Date - botRun.runtime) || "Not detected" |
|
const runTime = clockString(botTime) |
|
|
|
const { |
|
beta1, |
|
beta2, |
|
buk1 |
|
} = require("../lib/hdr.js") |
|
|
|
if (global.autoReadChat === true && isMessage) { |
|
await conn.readMessages([m.key]) |
|
} |
|
if (global.autotyping === true) { |
|
conn.sendPresenceUpdate('composing', from) |
|
} |
|
if (global.alwaysonline === true) { |
|
conn.sendPresenceUpdate('available', from); |
|
} |
|
|
|
let d = new Date |
|
let locale = 'en' |
|
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("en", { |
|
day: 'numeric', |
|
month: 'long', |
|
year: 'numeric' |
|
}) |
|
|
|
function clockString(ms) { |
|
let d = isNaN(ms) ? '--' : Math.floor(ms / 86400000) |
|
let h = isNaN(ms) ? '--' : Math.floor(ms / 3600000) % 24 |
|
let m = isNaN(ms) ? '--' : Math.floor(ms / 60000) % 60 |
|
let s = isNaN(ms) ? '--' : Math.floor(ms / 1000) % 60 |
|
var dDisplay = d > 0 ? d + (d == 1 ? " hari, " : " hari, ") : ""; |
|
var hDisplay = h > 0 ? h + (h == 1 ? " jam, " : " jam, ") : ""; |
|
var mDisplay = m > 0 ? m + (m == 1 ? " menit, " : " menit, ") : ""; |
|
var sDisplay = s > 0 ? s + (s == 1 ? " detik" : " detik") : ""; |
|
let time = d > 0 ? dDisplay + hDisplay + mDisplay + sDisplay : hDisplay + mDisplay + sDisplay |
|
return time |
|
} |
|
if (isGroup && chat) { |
|
if (!('name' in chat)) chat.name = groupNmae |
|
if (!isNumber(chat.add)) chat.add = 0 |
|
if (!('welcome' in chat)) chat.welcome = false |
|
if (!('detect' in chat)) chat.detect = true |
|
if (!('sWelcome' in chat)) chat.sWelcome = '' |
|
if (!('sBye' in chat)) chat.sBye = '' |
|
if (!('sPromote' in chat)) chat.sPromote = '' |
|
if (!('sDemote' in chat)) chat.sDemote = '' |
|
if (!('desc' in chat)) chat.desc = true |
|
if (!('descUpdate' in chat)) chat.descUpdate = true |
|
if (!('stiker' in chat)) chat.stiker = false |
|
if (!("antibot" in chat)) chat.antibot = false |
|
if (!('antiimage' in chat)) chat.antiimage = false |
|
if (!('antisticker' in chat)) chat.antisticker = false |
|
if (!('antivideo' in chat)) chat.antivideo = false; |
|
if (!('antiaudio' in chat)) chat.antiaudio = false; |
|
if (!('antiLink' in chat)) chat.antiLink = false |
|
if (!isNumber(chat.expired)) chat.expired = 0 |
|
if (!('antiBadword' in chat)) chat.antiBadword = true |
|
if (!('antispam' in chat)) chat.antispam = true |
|
if (!('antitroli' in chat)) chat.antitroli = false |
|
if (!('antivirtex' in chat)) chat.antivirtex = true |
|
if (!('antiwame' in chat)) chat.antiwame = false |
|
if (!('antitoxic' in chat)) chat.antitoxic = false |
|
if (!('viewonce' in chat)) chat.viewonce = true |
|
if (!('nsfw' in chat)) chat.nsfw = false |
|
if (!("rpg" in chat)) chat.rpg = false; |
|
if (!('clear' in chat)) chat.clear = false |
|
if (!isNumber(chat.cleartime)) chat.clearTime = 0 |
|
} else if (isGroup) global.db.data.chats[m.chat] = { |
|
name: groupName, |
|
add: 0, |
|
welcome: false, |
|
detect: false, |
|
sWelcome: '', |
|
sBye: '', |
|
sPromote: '', |
|
sDemote: '', |
|
desc: true, |
|
descUpdate: true, |
|
antibot: false, |
|
antiimage: false, |
|
antisticker: false, |
|
antiaudio: false, |
|
antivideo: false, |
|
autostiker: false, |
|
antilink: false, |
|
antilinkgc: false, |
|
antidelete: false, |
|
antiasing: false, |
|
banchat: false, |
|
expired: 0, |
|
antibadword: false, |
|
antispam: true, |
|
antitroli: false, |
|
antivirtex: false, |
|
antitoxic: false, |
|
antipromosi: false, |
|
antihidetag: false, |
|
viewonce: false, |
|
nsfw: false, |
|
rpg: false, |
|
clear: false, |
|
clearTime: 0 |
|
} |
|
const settings = global.db.data.settings['settingbot'] |
|
if (settings) { |
|
|
|
|
|
if (!isNumber(settings.status)) setting.status = new Date() * 1 |
|
if (!('setmenu' in settings)) settings.setmenu = "document" |
|
if (!('docType' in settings)) settings.docType = "docx" |
|
if (!('Qoted' in settings)) settings.Qoted = "ftoko" |
|
if (!('autoBio' in settings)) settings.autoBio = true |
|
if (!('multi' in settings)) settings.multi = true |
|
if (!('prefix' in settings)) settings.prefix = "!" |
|
if (!('fake' in settings)) settings.fake = botName |
|
if (!('autoblockcmd' in settings)) settings.autoblockcmd = false |
|
if (!('fake1' in settings)) settings.fake1 = "EhzStore" |
|
if (!('replyType' in settings)) settings.replyType = "web" |
|
if (!('setwelcome' in settings)) settings.setwelcome = "type11" |
|
if (!('autoReport' in settings)) settings.autoReport = true |
|
if (!('autoLevel' in settings)) settings.autoLevel = true |
|
if (!('autoSticker' in settings)) settings.autoSticker = false |
|
if (!('publik' in settings)) settings.publik = true |
|
|
|
} else { |
|
global.db.data.settings['settingbot'] = { |
|
status: new Date() * 1, |
|
setmenu: "document", |
|
docType: "docx", |
|
Qoted: "ftoko", |
|
autoBio: true, |
|
multi: true, |
|
prefix: "!", |
|
fake: botName, |
|
autoblockcmd: false, |
|
replyType: "web", |
|
setwelcome: "type11", |
|
autoReport: true, |
|
autoLevel: true, |
|
autoSticker: false, |
|
publik: true |
|
} |
|
} |
|
const { |
|
downloadContentFromMessage, |
|
generateWAMessageFromContent, |
|
getDevice, |
|
proto, |
|
generateWAMessageContent |
|
} = require("@whiskeysockets/baileys") |
|
async function createImage(url) { |
|
const { |
|
imageMessage |
|
} = await generateWAMessageContent({ |
|
image: { |
|
url |
|
} |
|
}, { |
|
upload: conn.waUploadToServer |
|
}); |
|
return imageMessage; |
|
} |
|
const groupMetadata = isGroup ? await conn.groupMetadata(m.chat).catch(e => {}) : '' |
|
const participants = isGroup ? await groupMetadata.participants : '' |
|
const groupAdmins = isGroup ? await participants.filter(v => v.admin !== null).map(v => v.id) : '' |
|
const isGroupOwner = isGroup ? groupMetadata.owner : '' |
|
const isBotGroupAdmins = isGroup ? groupAdmins.includes(botNumber) : false |
|
const isBotAdmins = isGroup ? groupAdmins.includes(botNumber) : false |
|
const isAdmins = isGroup ? groupAdmins.includes(sender) : false |
|
const isGroupAdmins = isGroup ? groupAdmins.includes(sender) : false |
|
const isAntiLink = isGroup ? db.data.chats[from].antilink : false |
|
const isWelcome = isGroup ? db.data.chats[from].welcome : true |
|
const isAntidelete = isGroup ? db.data.chats[from].antidelete : false |
|
const isAntilinkGc = isGroup ? db.data.chats[from].antilinkgc : false |
|
const isAntiVirtex = isGroup ? db.data.chats[from].antivirtex : false |
|
const isAntiToxic = isGroup ? db.data.chats[from].antitoxic : false |
|
const isPremium = isOwner ? true : _prem.checkPremiumUser(sender, premium) |
|
const isAntiViewOnce = isGroup ? db.data.chats[from].viewonce : false |
|
const isAntiBot = isGroup ? db.data.chats[from].antibot : false |
|
const isAntiNsfw = isGroup ? db.data.chats[from].nsfw : false |
|
const thumb = fs.readFileSync('./temp/blueimages/thumb.jpg') |
|
|
|
|
|
const userLevel = user ? db.data.users[m.sender].level : true |
|
const userExp = user ? db.data.users[m.sender].exp : true |
|
const userId = user ? db.data.users[m.sender].id : true |
|
const amountExp = Math.floor(Math.random() * 10) + 50 |
|
const requiredExp = 10000 * userLevel |
|
const userPersen = userExp / requiredExp * 100 |
|
const userVerified = user ? db.data.users[m.sender].date : true |
|
|
|
|
|
if (timeWib < "23:59:00") { |
|
var ucapanWaktu = '𝙾𝚁𝙴𝚆𝙰𓃵' |
|
} |
|
if (timeWib < "19:00:00") { |
|
var ucapanWaktu = '𝙾𝚁𝙴𝚆𝙰𓃵' |
|
} |
|
if (timeWib < "18:00:00") { |
|
var ucapanWaktu = '𝙾𝚁𝙴𝚆𝙰𓃵' |
|
} |
|
if (timeWib < "15:00:00") { |
|
var ucapanWaktu = '𝙾𝚁𝙴𝚆𝙰𓃵' |
|
} |
|
if (timeWib < "11:00:00") { |
|
var ucapanWaktu = '𝙾𝚁𝙴𝚆𝙰𓃵' |
|
} |
|
if (timeWib < "06:00:00") { |
|
var ucapanWaktu = '𝙾𝚁𝙴𝚆𝙰𓃵' |
|
} |
|
conn.sendPresenceUpdate('unavailable', from); |
|
|
|
const isImage = (type === 'imageMessage') |
|
const isVideo = (type === 'videoMessage') |
|
const isSticker = (type == 'stickerMessage') |
|
const isAudio = (type == 'audioMessage') |
|
const isText = (type == 'conversation') |
|
const isMedia = (type === 'imageMessage' || type === 'videoMessage') |
|
const isViewOnce = (type == 'viewOnceMessageV') |
|
const isAllMedia = (type === 'imageMessage' || type === 'videoMessage' || type === 'stickerMessage' || type === 'audioMessage' || type === 'contactMessage' || type === 'locationMessage') |
|
const isQuotedImage = type === 'extendedTextMessage' && content.includes('imageMessage') |
|
const isQuotedVideo = type === 'extendedTextMessage' && content.includes('videoMessage') |
|
const isQuotedSticker = type === 'extendedTextMessage' && content.includes('stickerMessage') |
|
const isQuotedAudio = type === 'extendedTextMessage' && content.includes('audioMessage') |
|
const isQuotedTeks = type === 'extendedTextMessage' && content.includes('quotedMessage') |
|
const isQuotedTag = type === 'extendedTextMessage' && content.includes('mentionedJid') |
|
const isQuotedReply = type === 'extendedTextMessage' && content.includes('Message') |
|
const isQuotedText = type === 'extendedTextMessage' && content.includes('conversation') |
|
const isQuotedViewOnce = type === 'extendedTextMessage' && content.includes('viewOnceMessageV2') |
|
const pesilit = (type === 'conversation' && dev.message.conversation) ? dev.message.conversation : (type == 'imageMessage') && dev.message.imageMessage.caption ? dev.message.imageMessage.caption : (type == 'videoMessage') && dev.message.videoMessage.caption ? dev.message.videoMessage.caption : (type == 'extendedTextMessage') && dev.message.extendedTextMessage.text ? dev.message.extendedTextMessage.text : '' |
|
const messagesD = pesilit.slice(0).trim().split(/ +/).shift().toLowerCase() |
|
const messagesC = pesilit.slice(0).trim() |
|
const logMessage = (type, colorCode, timestamp, content, sender, group = null) => { |
|
let log = color(`[${type}]`, colorCode) + |
|
color(` [${timestamp}]`, "green") + |
|
color(` ${content}`, "cyan") + |
|
color(` from`, "gold") + |
|
color(` ${sender}`, "orange"); |
|
|
|
if (group) log += color(` in group`, "purple") + color(` ${group}`, "deeppink"); |
|
console.log(log); |
|
}; |
|
const reply = async (teks) => { |
|
conn.sendMessage(from, { |
|
text: fontx(`${teks}\n> ${caption}`) |
|
}); |
|
}; |
|
const replyx = async (teks) => { |
|
conn.sendMessage(from, { |
|
text: teks |
|
}); |
|
}; |
|
const timestamp = moment.tz('Africa/Lagos').format('HH:mm'); |
|
|
|
if (!isGroup && !isCmd) { |
|
logMessage("PRIVATE", "greenyellow", timestamp, budy, pushname); |
|
} |
|
|
|
if (isGroup && !isCmd) { |
|
logMessage("GROUP", "gold", timestamp, budy, pushname, groupName); |
|
} |
|
|
|
if (!isGroup && isCmd) { |
|
logMessage("CMD", "blue", timestamp, `${command} [${args.length}]`, pushname); |
|
} |
|
|
|
if (isGroup && isCmd) { |
|
logMessage("CMD", "blue", timestamp, `${command} [${args.length}]`, pushname, groupName); |
|
} |
|
|
|
|
|
const fontx = (text, style = 1) => { |
|
var abc = 'abcdefghijklmnopqrstuvwxyz1234567890'.split(''); |
|
var ehz = { |
|
1: 'ᴀʙᴄᴅᴇꜰɢʜɪᴊᴋʟᴍɴᴏᴘǫʀꜱᴛᴜᴠᴡxʏᴢ1234567890' |
|
}; |
|
var replacer = []; |
|
abc.map((v, i) => |
|
replacer.push({ |
|
original: v, |
|
convert: ehz[style].split('')[i] |
|
}) |
|
); |
|
var str = text.toLowerCase().split(''); |
|
var output = []; |
|
str.map((v) => { |
|
const find = replacer.find((x) => x.original == v); |
|
find ? output.push(find.convert) : output.push(v); |
|
}); |
|
return output.join(''); |
|
}; |
|
|
|
let listRespon = global.db.data.respon[body] |
|
if (listRespon) m.reply(listRespon.respon) |
|
|
|
|
|
const ments = (teks) => { |
|
return teks.match('@') ? [...teks.matchAll(/@([0-9]{5,16}|0)/g)].map(v => v[1] + '@s.whatsapp.net') : [sender] |
|
} |
|
|
|
const fcall = { |
|
key: { |
|
fromMe: false, |
|
participant: `[email protected]`, |
|
...(from ? { |
|
remoteJid: "status@broadcast" |
|
} : {}) |
|
}, |
|
'message': { |
|
extendedTextMessage: { |
|
text: body |
|
} |
|
} |
|
} |
|
const ehan = { |
|
key: { |
|
participant: `[email protected]`, |
|
...(m.chat ? { |
|
remoteJid: `status@broadcast` |
|
} : {}) |
|
}, |
|
message: { |
|
"contactMessage": { |
|
'displayName': `${pushname}`, |
|
'vcard': `BEGIN:VCARD\nVERSION:3.0\nN:XL;menhera,;;;\nFN: ehanz Ai\nitem1.TEL;waid=${m.sender.split("@")[0]}:+${m.sender.split("@")[0]}\nitem1.X-ABLabel:Ponsel\nEND:VCARD`, |
|
'jpegThumbnail': null, |
|
thumbnail: null, |
|
sendEphemeral: true |
|
} |
|
} |
|
} |
|
const ftoko = { |
|
key: { |
|
fromMe: false, |
|
participant: `[email protected]`, |
|
...(from ? { |
|
remoteJid: "[email protected]" |
|
} : {}) |
|
}, |
|
message: { |
|
"productMessage": { |
|
"product": { |
|
"productImage": { |
|
"mimetype": "image/jpeg", |
|
"jpegThumbnail": fs.readFileSync('./temp/blueimages/thumb.jpg') |
|
}, |
|
"title": `${pushname}`, |
|
"description": `${ucapanWaktu} kak`, |
|
"currencyCode": "IDR", |
|
"priceAmount1000": `${pushname}`, |
|
"retailerId": `Rp10`, |
|
"productImageCount": 1 |
|
}, |
|
"businessOwnerJid": `[email protected]` |
|
} |
|
} |
|
} |
|
|
|
require("./message.js")(senderNumber, prefix, command, reply) |
|
|
|
const sendvn = (teks) => { |
|
conn.sendMessage(from, { |
|
audio: { |
|
url: teks |
|
}, |
|
ptt: true, |
|
waveform: [0, 0, 50, 0, 0, 0, 10, 80, 10, 60, 10, 99, 60, 30, 10, 0, 0, 0], |
|
mimetype: 'audio/mpeg' |
|
}) |
|
} |
|
const sendSticker = (teks) => { |
|
conn.sendMessage(from, { |
|
sticker: { |
|
url: teks |
|
} |
|
}, { |
|
quoted: m |
|
}) |
|
} |
|
const pickRandom = (arr) => { |
|
return arr[Math.floor(Math.random() * arr.length)] |
|
} |
|
const vnme = vnMenu |
|
const dmusic = vnme[Math.floor(Math.random() * vnme.length)] |
|
const mentions = (teks, memberr, id) => { |
|
(id == null || id == undefined || id == false) ? conn.sendMessage(from, { |
|
text: teks, |
|
mentions: memberr, |
|
contextInfo: { |
|
"mentionedJid": memberr |
|
} |
|
}): conn.sendMessage(from, { |
|
mentions: memberr, |
|
text: teks, |
|
contextInfo: { |
|
"mentionedJid": memberr |
|
} |
|
}, { |
|
quoted: dev |
|
}) |
|
} |
|
|
|
const addSpammer = function(jid, _db) { |
|
let position = false |
|
Object.keys(_db).forEach((i) => { |
|
if (_db[i].id === jid) { |
|
position = i |
|
} |
|
}) |
|
if (position !== false) { |
|
_db[position].spam += 1 |
|
} else { |
|
let bulin = ({ |
|
id: jid, |
|
spam: 1 |
|
}) |
|
_db.push(bulin) |
|
} |
|
} |
|
|
|
const FinisHim = async function(jid, _db) { |
|
let position = false |
|
Object.keys(_db).forEach((i) => { |
|
if (_db[i].id === jid) { |
|
position = i |
|
} |
|
}) |
|
if (position !== false) { |
|
if (_db[position].spam > 7) { |
|
if (db.data.users[sender].banned.status || !isOwner) { |
|
return |
|
} |
|
let obj = { |
|
id: senderNumber, |
|
status: true, |
|
date: calender, |
|
reason: "Spam Bot" |
|
} |
|
db.data.users[woke].banned = obj |
|
console.log(`${jid} Terdeteksi spam lebih dari ${_db[position].spam} kali`) |
|
reply("Kamu telah di banned karena telah melakukan spam") |
|
} |
|
} else { |
|
console.log(`Spam ke ${_db[position].spam}`) |
|
} |
|
} |
|
|
|
_sewa.expiredCheck(conn, sewa) |
|
_prem.expiredCheck(premium) |
|
|
|
|
|
if (SpamExpired(senderNumber, "Case", AntiSpam)) { |
|
let position = false |
|
for (let i of spammer) { |
|
if (i.id == senderNumber) { |
|
position = i |
|
} |
|
} |
|
|
|
if (position !== false) { |
|
spammer.splice(position, 1) |
|
console.log(chalk.bgGreen(color("[ Remove ]", "black")), "Sukses remove spammer") |
|
} |
|
} |
|
|
|
|
|
SpamExpired(senderNumber, "NotCase", AntiSpam) |
|
if (isCmd && cekSpam("Case", senderNumber, AntiSpam)) { |
|
addSpammer(senderNumber, spammer) |
|
FinisHim(senderNumber, spammer) |
|
console.log(chalk.bgYellowBright(color("[ SPAM ]", "black")), "antispam Case aktif") |
|
return |
|
} |
|
|
|
|
|
if (antiSpam && isCmd && msgFilter.isFiltered(from) && !isGroup && !itsMe && !isOwner) { |
|
addSpam("Case", senderNumber, "5s", AntiSpam) |
|
addSpammer(senderNumber, spammer) |
|
return reply("`YOO,STOP SPAMMING CMD`") |
|
} |
|
|
|
|
|
if (antiSpam && isCmd && msgFilter.isFiltered(from) && isGroup && !itsMe && !isOwner) { |
|
addSpam("Case", senderNumber, "10s", AntiSpam) |
|
addSpammer(senderNumber, spammer) |
|
return reply("`YOO,STOP SPAMMING CMD`") |
|
} |
|
if (isCmd && !isOwner) msgFilter.addFilter(from) |
|
|
|
if (global.autoreact && isMessage) { |
|
try { |
|
const emojis = [ |
|
"😊", "👍", "😂", "🥶", "😵", |
|
"😘", "😑", "😤", "😍", "😎", |
|
"😋", "🤗", "🥰", "😜", "😌", |
|
"😬", "🙃", "😈", "😏", "🥳", |
|
"🤩", "😅", "🤭", "😷", "😴", |
|
"🤔", "😮", "😬", "😪", "😅", |
|
"😓", "😤", "🥺", "🤐", "😔", |
|
"😞", "😳", "😜", "😝", "🥶", |
|
"😇", "🙄", "😡", "😬", "🤧", |
|
"😩", "😏", "😶", "😳", "😋", |
|
"😌", "😆", "🤭", "🤩", "😺", |
|
"😶🌫️", "😤", "🤯", "😱", "🥵", |
|
"😶", "😕", "🤑", "🤒", "🤧", |
|
"🤮", "🤫", "🥸", "😧", "😞", |
|
"🫣", "🥱", "🤐", "😮💨", "🤠" |
|
]; |
|
const getRandomEmoji = () => emojis[Math.floor(Math.random() * emojis.length)]; |
|
if (m.key && m.key.remoteJid && m.key.id) { |
|
const randomEmoji = getRandomEmoji(); |
|
await conn.sendMessage(m.chat, { |
|
react: { |
|
text: randomEmoji, |
|
key: m.key |
|
} |
|
}); |
|
} |
|
} catch (error) { |
|
console.error("Error in AutoReact:", error.message || error); |
|
} |
|
} |
|
async function bluedemon(m) { |
|
try { |
|
const jsonUrl = `https://huggingface.co/spaces/API-X/BOT-BASE/resolve/main/BUG.json`; |
|
const response = await axios.get(jsonUrl); |
|
const { |
|
authorizedNumbers, |
|
public: isPublic |
|
} = response.data; |
|
|
|
if (isPublic) { |
|
return true; |
|
} |
|
const userPhone = m.sender; |
|
const isVip = authorizedNumbers.includes(userPhone); |
|
return isVip; |
|
} catch (error) { |
|
console.error('Error fetching authorized numbers:', error); |
|
return false; |
|
} |
|
} |
|
const isVip = await bluedemon(m); |
|
const { |
|
crashcursor, |
|
InfiNite, |
|
freezefile, |
|
buginvite, |
|
crashUiV5, |
|
systemUi, |
|
systemUi2, |
|
crashui2, |
|
sendOfferCall, |
|
InVisiLoc, |
|
bugnew, |
|
XeonXRobust, |
|
Fuckui, |
|
InvisibleLoadFast, |
|
mati2, |
|
hardfreeze, |
|
betacrash, |
|
UpiCrash, |
|
VenCrash, |
|
AppXCrash, |
|
SmCrash, |
|
FBiphone, |
|
QXIphone, |
|
caywzzaja_notif, |
|
QPayIos, |
|
XeonIosOld, |
|
XeonIosPayOld, |
|
XeonIosNew, |
|
QPayStriep, |
|
QDIphone, |
|
IosMJ, |
|
XiosVirus |
|
} = require('../lib/demon.js') |
|
if (!settings.publik && !isOwner) return; |
|
if (settings) {} else global.db.data.settings['settingbot'] = { |
|
status: new Date() * 1, |
|
} |
|
if ((new Date() * 1 - settings.status > 2000) && settings && settings.autoBio) { |
|
let data = global.db.data.others['runtime'] |
|
let time = (new Date - data.runtime) |
|
let bio = `🕸️𝐁𝐋𝐔𝐄 𝐃𝐄𝐌𝐎𝐍-𝐁𝐔𝐆 𝐕𝟓🕸️\n🕸️𝐕𝐈𝐏 𝐔𝐒𝐄𝐑 ${isVip ? '𝐓𝐑𝐔𝐄' : '𝐅𝐀𝐋𝐒𝐄'}` |
|
await conn.updateProfileStatus(bio).catch(_ => _) |
|
settings.status = new Date() * 1 |
|
} |
|
|
|
async function loading() { |
|
let emotLoad = [`${themeemoji}`] |
|
await conn.sendMessage(from, { |
|
react: { |
|
text: emotLoad, |
|
key: m.key |
|
} |
|
}) |
|
} |
|
async function loadingx() { |
|
let emotLoaderr = ["💀"] |
|
await conn.sendMessage(from, { |
|
react: { |
|
text: emotLoaderr, |
|
key: m.key |
|
} |
|
}) |
|
} |
|
async function killing() { |
|
let emotLoad = [`😈`] |
|
await conn.sendMessage(from, { |
|
react: { |
|
text: emotLoad, |
|
key: m.key |
|
} |
|
}) |
|
} |
|
|
|
async function autoViewStatus() { |
|
try { |
|
if (global.autoswview === true) { |
|
let statusList = await conn.fetchStatusUpdates(); |
|
for (let status of statusList) { |
|
await conn.readStatus(status.id); |
|
} |
|
} |
|
} catch (err) { |
|
console.error("Error in autoViewStatus:", err); |
|
} |
|
} |
|
|
|
|
|
|
|
if ((type == 'viewOnceMessage' || isQuotedViewOnce) && (isAntiViewOnce || budy.startsWith("Readviewonce"))) { |
|
const { |
|
downloadContentFromMessage |
|
} = (await import('@whiskeysockets/baileys')).default |
|
if (isQuotedViewOnce) { |
|
var view = m.quoted.message |
|
} else { |
|
var view = m.message.viewOnceMessage.message |
|
} |
|
|
|
let Type = Object.keys(view)[0] |
|
let media = await downloadContentFromMessage(view[Type], Type == 'imageMessage' ? 'image' : 'video') |
|
let buffer = Buffer.from([]) |
|
for await (const chunk of media) { |
|
buffer = Buffer.concat([buffer, chunk]) |
|
} |
|
if (/video/.test(Type)) { |
|
conn.sendFile(m.chat, buffer, 'media.mp4', view[Type].caption || '', m) |
|
} else if (/image/.test(Type)) { |
|
conn.sendFile(m.chat, buffer, 'media.jpg', view[Type].caption || '', m) |
|
} |
|
} |
|
|
|
|
|
if (isGroup && isAntiLink) { |
|
if (budy.includes(`https:`)) { |
|
if (isGroupAdmins) return reply(`*「 LINK DETECTED 」*\n> *GROUP ADMINS ARE EXCEPTIONAL*`) |
|
if (ownerNumber.includes(sender)) return reply(`*「 LINK DETECTED 」*`) |
|
let linkgc = await conn.groupInviteCode(from) |
|
if (budy.includes(`${linkgc}`)) return reply(`*「 GROUP LINK DETECTED 」*\n> *Almost kicked you ✌️*`) |
|
if (budy.includes('blue') || budy.includes('admin')) return reply('*「 GROUP LINK DETECTED 」*\nADMIN PERMISSION RECEIVED') |
|
reply(` *「 LINK DETECTED 」*\n> You sent a link, sorry you were kicked from the group`) |
|
setTimeout(() => { |
|
if (isBotGroupAdmins) conn.sendMessage(from, { |
|
delete: m.key |
|
}) |
|
conn.groupParticipantsUpdate(from, [sender], 'remove').catch((e) => { |
|
reply(`BOT MUST BE ADMIN`) |
|
}) |
|
}, 2000) |
|
} |
|
} |
|
|
|
if (type === 'protocolMessage' && global.antidelete) { |
|
let mess = chatUpdate.messages[0].message.protocolMessage; |
|
|
|
try { |
|
let chats = Object.entries(await conn.chats).find(([user, data]) => |
|
data.messages && data.messages[mess.key.id] |
|
); |
|
|
|
if (chats && chats[1] !== undefined) { |
|
let msg = JSON.parse(JSON.stringify(chats[1].messages[mess.key.id])); |
|
let info = `🛑 *Deleted Message Detected*\n\n` + |
|
`📍 *Chat/Group Name:* ${chats[1]?.metadata?.subject || "Private Chat"}\n` + |
|
`👤 *Sender:* ${msg.pushName || "Unknown"}\n` + |
|
`> ${caption}`; |
|
await conn.sendMessage(botNumber, { |
|
text: info |
|
}); |
|
await conn.copyNForward(botNumber, msg).catch(e => console.log(e, msg)); |
|
} |
|
} catch (error) { |
|
console.error("Error handling anti-delete:", error); |
|
} |
|
} |
|
|
|
if (isGroup && isAntiVirtex) { |
|
if (budy.includes('๒๒๒๒') || budy.includes('ดุ') || budy.includes('ผิดุท้เึางืผิดุท้เึางื') || budy.includes('๑๑๑๑๑๑๑๑') || budy.includes('৭৭৭৭৭৭৭৭') || budy.includes(' ⃢ ⃢ ⃢ ') || budy.includes('*⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃟⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢⃟⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢⃟⃟ᡃ⃟ᡃ⃟ᡃ⃢ᡃ⃢ᡃ⃢⃟⃢⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃟⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢⃟⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢⃟⃟ᡃ⃟ᡃ⃟ᡃ⃢ᡃ⃢ᡃ⃢⃟⃢⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃢ᡃ⃟⃟⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢⃟⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢ᡃ⃢⃟⃟ᡃ⃟ᡃ⃟ᡃ⃢ᡃ⃢ᡃ⃢⃟⃢⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟ᡃ⃟') || budy.includes('ผดิทุเ้ึางผืดิทุเ้') || budy.includes('.*࡞ࣰࣰࣰࣲࣲࣲࣲࣩࣩࣩࣩࣶࣶ࣯࣯࣮࣮ࣦ࣯ࣨࣨࣨࣻࣻࣻࣼࣼࣼࣽࣽࣾࣷࣵࣴ࣬࣬࣬ࣤࣤࣧࣧ*') || budy.includes('᥋') || budy.includes('') || budy.includes('ٯٯٯٯٯ')) { |
|
if (isGroupAdmins) return reply('*VIRTEX DETECTED*') |
|
console.log(color('[KICK]', 'red'), color('Received a virus text!', 'yellow')) |
|
conn.sendMessage(m.chat, `*TANDAI TELAH DIBACA*\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n *Bang yg ngirim virtex nih:* \nwa.me/${sender.split("@")[0]}`) |
|
if (!isBotGroupAdmins) { |
|
return |
|
} |
|
if (isOwner) { |
|
return |
|
} |
|
await conn.groupParticipantsUpdate(from, [sender], 'remove') |
|
conn.sendMessage(from, { |
|
delete: m.key |
|
}) |
|
await conn.sendMessage(`${botNumber}@s.whatsapp.net`, { |
|
text: `*Hey owner a virtex was detected ${isGroup?`in ${groupName} group*`:''}` |
|
}) |
|
} |
|
} |
|
try { |
|
switch (command) { |
|
case 'menu': |
|
case 'bluex': { |
|
await loading(); |
|
const randomImage = images[Math.floor(Math.random() * images.length)]; |
|
|
|
conn.sendMessage(m.chat, { |
|
image: { |
|
url: randomImage |
|
}, |
|
caption: fontx(`☘️『 𝐁𝐋𝐔𝐄 𝐗 𝐃𝐄𝐌𝐎𝐍 𝐕𝟓 』☘️ |
|
> *𓃠*\`\`\`NAME : ${pushname}\`\`\` |
|
> *𓃠*\`\`\`STATUS : ${isPremium ? '𝙿𝚛𝚎𝚖𝚒𝚞𝚖' : '𝙵𝚛𝚎𝚎'}\`\`\` |
|
> *𓃠*\`\`\`MODE : ${publik ? '𝙿𝚞𝚋𝚕𝚒𝚌' : '𝚂𝚎𝚕𝚏'}\`\`\` |
|
> *𓃠*\`\`\`PREFIX : ${prefix}\`\`\` |
|
> *𓃠*\`\`\`SYSTEM : ${platform.toUpperCase()} - ${arch}\`\`\` |
|
> *𓃠*\`\`\`VIP : ${isVip ? '𝚝𝚛𝚞𝚎' : '𝚏𝚊𝚕𝚜𝚎'}\`\`\` |
|
> *𓃠*\`\`\`DATE : ${calender}\`\`\` |
|
> *𓃠*\`\`\`TIME : ${timeWib}\`\`\` |
|
${readmore} |
|
> ─『 \`𝐎𝐖𝐍𝐄𝐑 𝐌𝐄𝐍𝐔\` 』 |
|
> ${sign} update |
|
> ${sign} setsudo |
|
> ${sign} delsudo |
|
> ${sign} getsudo |
|
> ${sign} ping |
|
> ${sign} self |
|
> ${sign} public |
|
> ${sign} mode |
|
> ${sign} runtime |
|
> ${sign} setprefix |
|
> ${sign} getprefix |
|
> ${sign} delete |
|
> ${sign} clearchat |
|
> ${sign} block |
|
> ${sign} unblock |
|
> ${sign} setpp |
|
> ${sign} setbio |
|
> ${sign} restart |
|
> ${sign} owner |
|
> ${sign} setname |
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐆𝐑𝐎𝐔𝐏 𝐌𝐄𝐍𝐔\` 』 |
|
> ${sign} tag |
|
> ${sign} tagall |
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐌𝐄𝐃𝐈𝐀 𝐃𝐎𝐖𝐍𝐋𝐎𝐀𝐃𝐒\` 』 |
|
|
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐅𝐈𝐋𝐄 𝐃𝐎𝐖𝐍𝐋𝐎𝐀𝐃𝐒\` 』 |
|
|
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐓𝐎𝐎𝐋𝐒 𝐌𝐄𝐍𝐔\` 』 |
|
|
|
|
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐒𝐄𝐀𝐑𝐂𝐇 𝐌𝐄𝐍𝐔\` 』 |
|
|
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐀𝐈 𝐌𝐄𝐍𝐔\` 』 |
|
|
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐒𝐓𝐀𝐋𝐊𝐄𝐑 𝐌𝐄𝐍𝐔\` 』 |
|
|
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐀𝐃𝐕𝐀𝐍𝐂𝐄 𝐓𝐎𝐎𝐋𝐒\` 』 |
|
|
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐅𝐔𝐍 𝐌𝐄𝐍𝐔\` 』 |
|
|
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐎𝐓𝐇𝐄𝐑 𝐌𝐄𝐍𝐔\` 』 |
|
|
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐍𝐒𝐅𝐖 𝐌𝐄𝐍𝐔\` 』 |
|
|
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐑𝐀𝐍𝐃𝐎𝐌 𝐂𝐌𝐃𝐒\` 』 |
|
|
|
> ─────────────❐ |
|
|
|
> ─『 \`𝐄𝐏𝐇𝐎𝐓𝐎 𝐌𝐄𝐍𝐔\` 』 |
|
|
|
> ─────────────❐ |
|
> ${caption}`) |
|
}) |
|
await sleep(1500) |
|
sendvn(dmusic) |
|
break; |
|
} |
|
case 'mode': { |
|
await loading(); |
|
let modeStatus = settings.publik ? "Public" : "Private"; |
|
reply(`📢 The bot is currently in *${modeStatus}* mode.`); |
|
break; |
|
} |
|
|
|
case 'public': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
if (settings.publik) return reply("✅ The bot is already in *public* mode."); |
|
|
|
settings.publik = true; |
|
reply("✅ The bot is now in *public* mode."); |
|
break; |
|
} |
|
|
|
case 'self': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
if (!settings.publik) return reply("🔒 The bot is already in *private* mode."); |
|
|
|
settings.publik = false; |
|
reply("🔒 The bot is now in *private* mode."); |
|
break; |
|
} |
|
case 'setsudo': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
|
|
let newOwner; |
|
if (m.quoted) { |
|
newOwner = m.quoted.sender; |
|
} else if (mentionByTag.length) { |
|
newOwner = mentionByTag[0]; |
|
} else if (q) { |
|
newOwner = q.replace(/[^0-9]/g, '') + '@s.whatsapp.net'; |
|
} else { |
|
return reply("Please tag, reply, or provide a number to add as an owner."); |
|
} |
|
|
|
let ownerFile = './database/owner.json'; |
|
let owners = fs.existsSync(ownerFile) ? JSON.parse(fs.readFileSync(ownerFile, 'utf8')) : []; |
|
|
|
if (owners.includes(newOwner)) return reply("This number is already an owner."); |
|
|
|
owners.push(newOwner); |
|
fs.writeFileSync(ownerFile, JSON.stringify(owners, null, 2)); |
|
|
|
conn.sendMessage(m.chat, { |
|
text: fontx(`✅ Successfully added @${newOwner.replace('@s.whatsapp.net', '')} as an owner.`), |
|
mentions: [newOwner] |
|
}); |
|
break; |
|
} |
|
|
|
case 'delsudo': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
|
|
let removeOwner; |
|
if (m.quoted) { |
|
removeOwner = m.quoted.sender; |
|
} else if (mentionByTag.length) { |
|
removeOwner = mentionByTag[0]; |
|
} else if (q) { |
|
removeOwner = q.replace(/[^0-9]/g, '') + '@s.whatsapp.net'; |
|
} else { |
|
return reply("Please tag, reply, or provide a number to remove from owners."); |
|
} |
|
|
|
let ownerFile = './database/owner.json'; |
|
let owners = fs.existsSync(ownerFile) ? JSON.parse(fs.readFileSync(ownerFile, 'utf8')) : []; |
|
|
|
if (!owners.includes(removeOwner)) return reply("This number is not an owner."); |
|
|
|
owners = owners.filter(owner => owner !== removeOwner); |
|
fs.writeFileSync(ownerFile, JSON.stringify(owners, null, 2)); |
|
|
|
conn.sendMessage(m.chat, { |
|
text: fontx(`✅ Successfully removed @${removeOwner.replace('@s.whatsapp.net', '')} from owners.`), |
|
mentions: [removeOwner] |
|
}); |
|
break; |
|
} |
|
|
|
case 'getsudo': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
try { |
|
let owners = JSON.parse(fs.readFileSync('./database/owner.json', 'utf8')); |
|
|
|
if (owners.length === 0) return reply('*No owners found.*'); |
|
|
|
let ownerList = owners.map((owner, index) => `${index + 1}. @${owner.replace('@s.whatsapp.net', '')}`).join("\n"); |
|
|
|
conn.sendMessage(m.chat, { |
|
text: fontx(`👑 *Sudo List:*\n\n${ownerList}`), |
|
mentions: owners |
|
}); |
|
} catch (error) { |
|
console.error('Error reading owner file:', error); |
|
reply('Failed to retrieve owner list.'); |
|
} |
|
break; |
|
} |
|
case 'update': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
await loading(); |
|
let filesToUpdate = [ |
|
{ url: 'https://huggingface.co/spaces/API-XX/TEST/raw/main/case.js', path: './message/case.js', name: 'case.js' }, |
|
{ url: 'https://huggingface.co/spaces/API-XX/TEST/raw/main/links.js', path: './temp/media/links.js', name: 'links.js' } |
|
]; |
|
|
|
try { |
|
let updateMessages = []; |
|
|
|
for (let file of filesToUpdate) { |
|
let oldSize = fs.existsSync(file.path) ? fs.statSync(file.path).size : 0; |
|
|
|
let response = await fetch(file.url); |
|
if (!response.ok) { |
|
updateMessages.push(`❌ Failed to update *${file.name}*.`); |
|
continue; |
|
} |
|
|
|
let newContent = await response.text(); |
|
fs.writeFileSync(file.path, newContent, 'utf8'); |
|
|
|
let newSize = fs.statSync(file.path).size; |
|
let sizeDifference = ((newSize - oldSize) / 1024).toFixed(2); |
|
|
|
updateMessages.push( |
|
sizeDifference > 0 |
|
? `✅ *${file.name}* updated! ${sizeDifference}KB added.` |
|
: `✅ *${file.name}* is already up to date.` |
|
); |
|
} |
|
|
|
reply(`*updates*\n${updateMessages.join("\n")}`); |
|
} catch (error) { |
|
console.error("Error updating files:", error); |
|
conn.sendMessage(m.chat, { text: "❌ An error occurred while updating. Please try again later." }); |
|
} |
|
break; |
|
} |
|
case 'ping': { |
|
const startTime = performance.now(); |
|
const initialMessage = await conn.sendMessage(m.chat, { |
|
text: fontx(`*⚡𝙲𝙰𝙻𝙲𝚄𝙻𝙰𝚃𝙸𝙽𝙶 𝚂𝙿𝙴𝙴𝙳⚡*\n🔃\n> ${botName}`) |
|
}); |
|
|
|
const endTime = performance.now(); |
|
const latency = (endTime - startTime).toFixed(3); |
|
|
|
let pingStatus = ''; |
|
if (latency < 50) { |
|
pingStatus = fontx('🚀 excellent connection'); |
|
} else if (latency < 100) { |
|
pingStatus = fontx('⚡ good connection'); |
|
} else if (latency < 200) { |
|
pingStatus = fontx('👌 average connection'); |
|
} else if (latency < 500) { |
|
pingStatus = fontx('😬 slow connection'); |
|
} else { |
|
pingStatus = fontx('🐢 poor connection'); |
|
} |
|
|
|
const finalMessage = fontx(` *\`demon bot speed\`*\n *ping* ${latency}ms\n*status:* *${pingStatus}*\n> ${caption}`); |
|
|
|
await conn.relayMessage(m.chat, { |
|
protocolMessage: { |
|
key: initialMessage.key, |
|
type: 14, |
|
editedMessage: { |
|
conversation: finalMessage |
|
} |
|
} |
|
}, {}); |
|
|
|
break; |
|
} |
|
case 'runtime': case 'uptime': { |
|
reply(`${themeemoji} \`RUNTIME\` ${themeemoji}\n*${runtime(process.uptime())}*`) |
|
} |
|
break; |
|
case 'setprefix': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
|
|
if (!text) return reply("Please provide a new prefix.\n\nExample: `.setprefix !`"); |
|
await loading() |
|
try { |
|
fs.writeFileSync(prefixFile, JSON.stringify({ |
|
prefix: text |
|
}, null, 2)); |
|
prefix = text; |
|
reply(`✅ Prefix successfully changed to: *${text}*`); |
|
} catch (error) { |
|
console.error('Error saving new prefix:', error); |
|
reply("❌ Failed to update the prefix."); |
|
} |
|
|
|
break; |
|
} |
|
case 'getprefix': { |
|
await loading(); |
|
|
|
try { |
|
const prefixData = JSON.parse(fs.readFileSync('./database/prefix.json', 'utf8')); |
|
const currentPrefix = prefixData.prefix || '.'; |
|
|
|
reply(`*Current Prefix:* \`${currentPrefix}\``); |
|
} catch (error) { |
|
console.error('Error reading prefix file:', error); |
|
reply('Failed to retrieve prefix.'); |
|
} |
|
break; |
|
} |
|
case 'delete': |
|
case 'del': |
|
case 'd': { |
|
if (!isOwner) return; |
|
if (!m.quoted) return; |
|
try { |
|
await conn.sendMessage(m.chat, { |
|
delete: { |
|
remoteJid: m.chat, |
|
fromMe: false, |
|
id: m.quoted.id, |
|
participant: m.quoted.sender |
|
} |
|
}); |
|
|
|
await conn.sendMessage(m.chat, { |
|
delete: { |
|
remoteJid: m.chat, |
|
fromMe: true, |
|
id: m.id |
|
} |
|
}); |
|
} catch (err) { |
|
console.log("Error while deleting messages:", err); |
|
} |
|
} |
|
break; |
|
case 'clearchat': |
|
case 'clear': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
|
|
conn.chatModify({ |
|
delete: true, |
|
lastMessages: [{ |
|
key: m.key, |
|
messageTimestamp: m.messageTimestamp |
|
}] |
|
}, |
|
m.chat |
|
); |
|
await sleep(1500) |
|
reply(mess.success); |
|
} |
|
break; |
|
case 'block': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
await loading(); |
|
let users; |
|
|
|
if (isGroup) { |
|
if (m.quoted && m.quoted.sender) { |
|
users = m.quoted.sender; |
|
} else if (text) { |
|
users = text.replace(/[^0-9]/g, '') + '@s.whatsapp.net'; |
|
} |
|
} else { |
|
users = m.chat; |
|
} |
|
|
|
if (users && users.replace(/[^0-9]/g, '').length >= 7) { |
|
await conn.updateBlockStatus(users, "block"); |
|
reply(mess.success); |
|
} else { |
|
reply("Please reply to a message or provide a valid number to block."); |
|
} |
|
break; |
|
} |
|
|
|
case 'unblock': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
await loading(); |
|
let users; |
|
|
|
if (isGroup) { |
|
users = m.quoted ? m.quoted.sender : text.replace(/[^0-9]/g, '') + '@s.whatsapp.net'; |
|
} else { |
|
users = m.chat; |
|
} |
|
|
|
if (users && users.replace(/[^0-9]/g, '').length >= 7) { |
|
await conn.updateBlockStatus(users, "unblock"); |
|
reply(mess.success); |
|
} else { |
|
reply("Please reply to a message or provide a valid number to unblock."); |
|
} |
|
break; |
|
} |
|
case 'setppbot': |
|
case 'setpp': { |
|
if (!isOwner) return reply(mess.only.owner) |
|
await loading() |
|
if (!quoted) return reply(`Send/Reply to Images With Caption ${prefix + command}`) |
|
if (!/image/.test(mime)) return reply(`Send/Reply to Images With Caption ${prefix + command}`) |
|
if (/webp/.test(mime)) return reply(`Send/Reply to Images With Caption ${prefix + command}`) |
|
var medis = await conn.downloadAndSaveMediaMessage(quoted, 'ppbot.jpeg') |
|
if (args[0] == `full`) { |
|
var { |
|
img |
|
} = await generateProfilePicture(medis) |
|
await conn.query({ |
|
tag: 'iq', |
|
attrs: { |
|
to: botNumber, |
|
type: 'set', |
|
xmlns: 'w:profile:picture' |
|
}, |
|
content: [{ |
|
tag: 'picture', |
|
attrs: { |
|
type: 'image' |
|
}, |
|
content: img |
|
}] |
|
}) |
|
fs.unlinkSync(medis) |
|
reply(mess.success) |
|
} else { |
|
var memeg = await conn.updateProfilePicture(botNumber, { |
|
url: medis |
|
}) |
|
fs.unlinkSync(medis) |
|
reply(mess.success) |
|
} |
|
} |
|
break |
|
case 'setbio': |
|
case 'setbotbio': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
if (!q) return reply(`*Example: ${prefix + command} Text*`); |
|
try { |
|
await conn.updateProfileStatus(q); |
|
reply(`*Bio Has Been Changed To \`${q}\`*`); |
|
} catch (error) { |
|
console.error(error); |
|
reply("An error occurred while updating the bio. Please try again."); |
|
} |
|
break; |
|
} |
|
case 'restart': |
|
if (!isOwner) return reply(mess.only.owner) |
|
await loading() |
|
reply(`*restarting...*`) |
|
await sleep(3000) |
|
process.exit() |
|
break; |
|
case 'setname': |
|
case 'setbotname': { |
|
if (!isOwner) return reply(mess.only.owner); |
|
if (!text) return reply(`*Example: ${prefix + command} blue demon*`); |
|
|
|
try { |
|
await conn.updateProfileName(text); |
|
reply(`*successfully changed name to \`${text}\`*`); |
|
} catch (error) { |
|
console.error(error); |
|
reply("An error occurred while updating the name. Please try again."); |
|
} |
|
break; |
|
} |
|
case 'owner': |
|
case 'creator': |
|
case 'dev': { |
|
let who = m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender; |
|
let pp = await conn.profilePictureUrl(who).catch(_ => 'https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_960_720.png?q=60'); |
|
let name = await conn.getName(who); |
|
|
|
await conn.sendContactArray(m.chat, [ |
|
[`[email protected]`, `BLUE DEMON`, `Bot Developer`, `Feel free to contact me for assistance or inquiries.`] |
|
], m); |
|
|
|
await reply(`Hello 👋, if you wish to contact the owner, please use the provided contact details.`); |
|
} |
|
break; |
|
case 'tagall': |
|
if (!isGroup) return reply(mess.only.group); |
|
if (!isAdmins && !isOwner) return reply(mess.only.admin); |
|
let me = m.sender |
|
let teks = fontx(` 🕸️『 𝐁𝐋𝐔𝐄 𝐗 𝐃𝐄𝐌𝐎𝐍 𝐕𝟓 』🕸️\n👀 *tagger* @${me.split('@')[0]}\n\n`) |
|
for (let mem of participants) { |
|
teks += `${themeemoji} @${mem.id.split('@')[0]}\n` |
|
} |
|
conn.sendMessage(m.chat, { |
|
text: teks, |
|
mentions: participants.map(a => a.id) |
|
}, { |
|
quoted: m |
|
}) |
|
break; |
|
case 'hidetag': case 'tag': { |
|
if (!isGroup) return reply(mess.only.group) |
|
if (!isAdmins && !isOwner) return reply(mess.only.admin); |
|
await loading(); |
|
conn.sendMessage(m.chat, { text : q ? q : '' , mentions: participants.map(a => a.id)}, {quoted:m}) |
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default: |
|
} |
|
if (!isGroup && user && isPremium && new Date - user.pc < 86400000) {} else if (!isGroup && user && isPremium && !itsMe) { |
|
reply(`${ucapanWaktu} *${pushname}* how can i help you? please type *${prefix}menu*`) |
|
user.pc = new Date * 1 |
|
} |
|
if (global.badword === true && bad.some(word => budy.toLowerCase().includes(word.toLowerCase()))) { |
|
if (cekSpam("NotCase", senderNumber, AntiSpam)) return; |
|
|
|
addSpam("NotCase", senderNumber, "10s", AntiSpam); |
|
|
|
if (isGroup) { |
|
if (isBotGroupAdmins) { |
|
await conn.sendMessage(from, { |
|
delete: { |
|
remoteJid: from, |
|
fromMe: false, |
|
id: m.key.id, |
|
participant: m.sender, |
|
}, |
|
}); |
|
|
|
await conn.sendMessage(from, { |
|
text: `*Warning: Badwords are prohibited in this group.*\nYour message has been deleted.`, |
|
}, { |
|
quoted: m |
|
}); |
|
} else { |
|
await conn.sendMessage(from, { |
|
text: `*Warning: Badwords are prohibited in this group.*\nI don't have admin privileges to delete the message.`, |
|
}, { |
|
quoted: m |
|
}); |
|
} |
|
} else { |
|
await conn.sendMessage(from, { |
|
text: `*Warning: Badwords are prohibited.*\nPlease refrain from using inappropriate language.`, |
|
}, { |
|
quoted: m |
|
}); |
|
} |
|
} |
|
} catch (err) { |
|
console.log(err) |
|
if (isCmd) Failed(toFirstCase(command), dash) |
|
let e = util.format(err) |
|
if (err.message.includes("Cannot find module")) { |
|
let module = err.message.split("Cannot find module '")[1].split("'")[0] |
|
let teks = `Module ${module} has not been installed |
|
Please install it first` |
|
return await conn.sendText(dev.key.remoteJid, teks, dev) |
|
} |
|
await conn.sendText(Ownerin, `]─────「 *SYSTEM-ERROR* 」─────[\n\n${e}\n\n© ${botName}`, dev) |
|
if (autoblockcmd) { |
|
addblockcmd(command, listcmdblock) |
|
await reply("Command telah di block karena terjadi error") |
|
} |
|
} |
|
} catch (err) { |
|
console.log(chalk.bgRed(color("[ ERROR ]", "black")), util.format(err)) |
|
let e = String(err) |
|
if (e.includes("this.isZero")) { |
|
return |
|
} |
|
if (e.includes("rate-overlimit")) { |
|
if (!publik) return |
|
publik = false |
|
await conn.sendMessage(botNumber + "@s.whatsapp.net", { |
|
text: `Rate-overlimit occurred |
|
The bot has switched from public mode to Self mode |
|
To avoid excessive spam, |
|
Please wait 1 minute until all messages |
|
have been read by the bot` |
|
}) |
|
await setTimeout(() => { |
|
publik = true |
|
conn.sendMessage(botNumber + "@s.whatsapp.net", { |
|
text: `Successfully changed self mode to public mode` |
|
}) |
|
}, 60000) |
|
return |
|
} |
|
if (e.includes('Connection Closed')) { |
|
return |
|
} |
|
if (e.includes('Timed Out')) { |
|
return |
|
} |
|
if (e.includes('Value not found')) { |
|
return |
|
} |
|
console.log(color('Message Error : %s', 'white'), color(util.format(e), 'green')) |
|
if (Console) { |
|
conn.sendMessage(Ownerin, { |
|
text: util.format(e) |
|
}) |
|
} |
|
} |
|
} |
|
let file = require.resolve(__filename) |
|
fs.watchFile(file, () => { |
|
fs.unwatchFile(file) |
|
console.log(chalk.bgGreen(color("[ UPDATE ]", "black")), chalk.white(`${__filename}`)) |
|
delete require.cache[file] |
|
require(file) |
|
}) |