├── README.md ├── database ├── bot │ ├── P │ ├── event.json │ ├── nsfw.json │ ├── registered.json │ ├── simi.json │ └── welkom.json ├── group │ ├── P │ ├── antilink.json │ ├── bad.json │ ├── badword.json │ └── leveling.json └── user │ ├── P │ ├── level.json │ ├── limit.json │ ├── prem.json │ └── uang.json ├── index.js ├── install.sh ├── language ├── P ├── ind.js └── index.js ├── lib ├── P ├── Zahraaa.ttf ├── color.js ├── donasi.js ├── fetcher.js ├── functions.js ├── gtts.js ├── help.js ├── magernulis1.jpg └── ocr.js ├── package.json ├── strg ├── audio.json ├── audio │ └── @affis_saputro123 ├── image.json ├── image │ └── @affis_saputro123 ├── sticker │ └── @affis_saputro123 ├── stik.json ├── video.json └── video │ └── @affis_saputro123 └── tmp ├── P └── file /README.md: -------------------------------------------------------------------------------- 1 | 2 |

3 | 4 | 5 | 6 | 7 | 8 | 9 |

10 | 11 | ## Clone this project 12 | 13 | ```bash 14 | > git clone https://github.com/affisjunianto/botwasapv5 15 | ``` 16 | 17 | ## Install the dependencies: 18 | Before running the below command, make sure you're in the project directory that 19 | you've just cloned!! 20 | 21 | ```bash 22 | > cd botwasapv5 23 | > bash install.sh 24 | ``` 25 | 26 | ### Usage 27 | ```bash 28 | > npm start 29 | ``` 30 | 31 | ## Features 32 | 33 | | Sticker Creator | Feature | 34 | | :-----------: | :--------------------------------: | 35 | | ✅ | Send Photo with Caption | 36 | | ✅ | Reply A Photo | 37 | | ✅ | Reply A Video or GIF | 38 | | ✅ | Send Video or GIF with Caption | 39 | | ✅ | Reply A Sticker ( sticker to image ) | 40 | 41 | | Other | Feature | 42 | | :------------: | :---------------------------------------------: | 43 | | ✅ | Get a random meme | 44 | | ✅ | Text to speech | 45 | | ✅ | Writing feature | 46 | | ✅ | What Anime Is This | 47 | | ✅ | Url2Img ( Screeenshot Web ) | 48 | | ✅ | Simsimi | 49 | 50 | | Group | Feature | 51 | | :-----------: | :--------------------------------: | 52 | | ✅ | Tagall/Mentionall member | 53 | | ✅ | Kick Member Group | 54 | | ✅ | Add Member Group | 55 | | ✅ | Get List Admins Group | 56 | 57 | | Owner Bot | Feature | 58 | | :-----------: | :--------------------------------: | 59 | | ✅ | Set Prefix | 60 | | ✅ | Broadcast | 61 | | ✅ | Clear All Chats | 62 | 63 | ## Special Thanks to 64 | * [`adiwajshing/Baileys`](https://github.com/adiwajshing/Baileys) 65 | * [`Mhankbarbar`](https://github.com/MhankBarBar) 66 | 67 | 68 | ## whatsapp number 69 | * [`WhatsApp`](wa.me/6282334297175) 70 | ### Donate 71 | * [`Saweria`](https://saweria.co/ampibibot) 72 | * [`Dana : +62895710073737`] 73 | * [`Pulsa : +628233429775`] 74 | -------------------------------------------------------------------------------- /database/bot/P: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /database/bot/event.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /database/bot/nsfw.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /database/bot/registered.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /database/bot/simi.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /database/bot/welkom.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /database/group/P: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /database/group/antilink.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /database/group/bad.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /database/group/badword.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /database/group/leveling.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /database/user/P: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /database/user/level.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /database/user/limit.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /database/user/prem.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /database/user/uang.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { 2 | WAConnection, 3 | MessageType, 4 | Presence, 5 | MessageOptions, 6 | Mimetype, 7 | WALocationMessage, 8 | WA_MESSAGE_STUB_TYPES, 9 | ReconnectMode, 10 | ProxyAgent, 11 | GroupSettingChange, 12 | waChatKey, 13 | mentionedJid, 14 | processTime, 15 | } = require('@adiwajshing/baileys'); 16 | const qrcode = require("qrcode-terminal") 17 | const moment = require("moment-timezone") 18 | const fs = require("fs") 19 | const util = require('util') 20 | const fetch = require('node-fetch') 21 | const os = require('os') 22 | const crypto = require('crypto') 23 | const imageToBase64 = require('image-to-base64') 24 | const axios = require('axios') 25 | const { color, bgcolor } = require('./lib/color') 26 | const { donasi } = require('./lib/donasi') 27 | const { fetchJson } = require('./lib/fetcher') 28 | const { recognize } = require('./lib/ocr') 29 | const { exec, spawn } = require("child_process") 30 | const { wait, simih, getBuffer, h2k, generateMessageID, getGroupAdmins, getRandom, banner, start, info, success, close } = require('./lib/functions') 31 | const tiktod = require('tiktok-scraper') 32 | const brainly = require('brainly-scraper') 33 | const ffmpeg = require('fluent-ffmpeg') 34 | const ms = require('parse-ms') 35 | const toMs = require('ms') 36 | const path = require('path') 37 | const cd = 4.32e+7 38 | const { ind } = require('./language') 39 | 40 | /********** MENU SETTING **********/ 41 | const vcard = 'BEGIN:VCARD\n' 42 | + 'VERSION:3.0\n' 43 | + 'FN:Affis Admin\n' 44 | + 'ORG: Pengembang XBot;\n' 45 | + 'TEL;type=CELL;type=VOICE;waid=6282334297175:+62 823-3429-7175\n' 46 | + 'END:VCARD' 47 | blocked = [] 48 | prefix = '#' 49 | limitawal = 30 50 | memberlimit = 0 51 | ator = 'SUBSCRIBE' 52 | namo = 'AMPIBI GAMING' 53 | cr = '*BOT INI SUDAH TERVERIFIKASI*' 54 | /*************************************/ 55 | 56 | /******** OWNER NUMBER**********/ 57 | const ownerNumber = ["6288220574267@s.whatsapp.net","6285732230674@s.whatsapp.net"] 58 | /************************************/ 59 | 60 | 61 | /*********** LOAD FILE ***********/ 62 | const setiker = JSON.parse(fs.readFileSync('./strg/stik.json')) 63 | const videonye = JSON.parse(fs.readFileSync('./strg/video.json')) 64 | const audionye = JSON.parse(fs.readFileSync('./strg/audio.json')) 65 | const imagenye = JSON.parse(fs.readFileSync('./strg/image.json')) 66 | const _leveling = JSON.parse(fs.readFileSync('./database/group/leveling.json')) 67 | const _level = JSON.parse(fs.readFileSync('./database/user/level.json')) 68 | const _registered = JSON.parse(fs.readFileSync('./database/bot/registered.json')) 69 | const welkom = JSON.parse(fs.readFileSync('./database/bot/welkom.json')) 70 | const nsfw = JSON.parse(fs.readFileSync('./database/bot/nsfw.json')) 71 | const samih = JSON.parse(fs.readFileSync('./database/bot/simi.json')) 72 | const event = JSON.parse(fs.readFileSync('./database/bot/event.json')) 73 | const _limit = JSON.parse(fs.readFileSync('./database/user/limit.json')) 74 | const uang = JSON.parse(fs.readFileSync('./database/user/uang.json')) 75 | const prem = JSON.parse(fs.readFileSync('./database/user/prem.json')) 76 | const antilink = JSON.parse(fs.readFileSync('./database/group/antilink.json')) 77 | const bad = JSON.parse(fs.readFileSync('./database/group/bad.json')) 78 | const badword = JSON.parse(fs.readFileSync('./database/group/badword.json')) 79 | /*********** END LOAD ***********/ 80 | 81 | /********** FUNCTION ***************/ 82 | const getLevelingXp = (sender) => { 83 | let position = false 84 | Object.keys(_level).forEach((i) => { 85 | if (_level[i].id === sender) { 86 | position = i 87 | } 88 | }) 89 | if (position !== false) { 90 | return _level[position].xp 91 | } 92 | } 93 | 94 | const getLevelingLevel = (sender) => { 95 | let position = false 96 | Object.keys(_level).forEach((i) => { 97 | if (_level[i].id === sender) { 98 | position = i 99 | } 100 | }) 101 | if (position !== false) { 102 | return _level[position].level 103 | } 104 | } 105 | 106 | const getLevelingId = (sender) => { 107 | let position = false 108 | Object.keys(_level).forEach((i) => { 109 | if (_level[i].id === sender) { 110 | position = i 111 | } 112 | }) 113 | if (position !== false) { 114 | return _level[position].id 115 | } 116 | } 117 | 118 | const addLevelingXp = (sender, amount) => { 119 | let position = false 120 | Object.keys(_level).forEach((i) => { 121 | if (_level[i].id === sender) { 122 | position = i 123 | } 124 | }) 125 | if (position !== false) { 126 | _level[position].xp += amount 127 | fs.writeFileSync('./database/user/level.json', JSON.stringify(_level)) 128 | } 129 | } 130 | 131 | const addLevelingLevel = (sender, amount) => { 132 | let position = false 133 | Object.keys(_level).forEach((i) => { 134 | if (_level[i].id === sender) { 135 | position = i 136 | } 137 | }) 138 | if (position !== false) { 139 | _level[position].level += amount 140 | fs.writeFileSync('./database/user/level.json', JSON.stringify(_level)) 141 | } 142 | } 143 | 144 | const addLevelingId = (sender) => { 145 | const obj = {id: sender, xp: 1, level: 1} 146 | _level.push(obj) 147 | fs.writeFileSync('./database/user/level.json', JSON.stringify(_level)) 148 | } 149 | 150 | const getRegisteredRandomId = () => { 151 | return _registered[Math.floor(Math.random() * _registered.length)].id 152 | } 153 | 154 | const addRegisteredUser = (userid, sender, age, time, serials) => { 155 | const obj = { id: userid, name: sender, age: age, time: time, serial: serials } 156 | _registered.push(obj) 157 | fs.writeFileSync('./database/bot/registered.json', JSON.stringify(_registered)) 158 | } 159 | 160 | const createSerial = (size) => { 161 | return crypto.randomBytes(size).toString('hex').slice(0, size) 162 | } 163 | 164 | const checkRegisteredUser = (sender) => { 165 | let status = false 166 | Object.keys(_registered).forEach((i) => { 167 | if (_registered[i].id === sender) { 168 | status = true 169 | } 170 | }) 171 | return status 172 | } 173 | 174 | const addATM = (sender) => { 175 | const obj = {id: sender, uang : 0} 176 | uang.push(obj) 177 | fs.writeFileSync('./database/user/uang.json', JSON.stringify(uang)) 178 | } 179 | 180 | const addKoinUser = (sender, amount) => { 181 | let position = false 182 | Object.keys(uang).forEach((i) => { 183 | if (uang[i].id === sender) { 184 | position = i 185 | } 186 | }) 187 | if (position !== false) { 188 | uang[position].uang += amount 189 | fs.writeFileSync('./database/user/uang.json', JSON.stringify(uang)) 190 | } 191 | } 192 | 193 | const checkATMuser = (sender) => { 194 | let position = false 195 | Object.keys(uang).forEach((i) => { 196 | if (uang[i].id === sender) { 197 | position = i 198 | } 199 | }) 200 | if (position !== false) { 201 | return uang[position].uang 202 | } 203 | } 204 | 205 | const bayarLimit = (sender, amount) => { 206 | let position = false 207 | Object.keys(_limit).forEach((i) => { 208 | if (_limit[i].id === sender) { 209 | position = i 210 | } 211 | }) 212 | if (position !== false) { 213 | _limit[position].limit -= amount 214 | fs.writeFileSync('./database/user/limit.json', JSON.stringify(_limit)) 215 | } 216 | } 217 | 218 | const confirmATM = (sender, amount) => { 219 | let position = false 220 | Object.keys(uang).forEach((i) => { 221 | if (uang[i].id === sender) { 222 | position = i 223 | } 224 | }) 225 | if (position !== false) { 226 | uang[position].uang -= amount 227 | fs.writeFileSync('./database/user/uang.json', JSON.stringify(uang)) 228 | } 229 | } 230 | 231 | const limitAdd = (sender) => { 232 | let position = false 233 | Object.keys(_limit).forEach((i) => { 234 | if (_limit[i].id == sender) { 235 | position = i 236 | } 237 | }) 238 | if (position !== false) { 239 | _limit[position].limit += 1 240 | fs.writeFileSync('./database/user/limit.json', JSON.stringify(_limit)) 241 | } 242 | } 243 | 244 | const getPremiumExpired = (sender) => { 245 | let position = null 246 | Object.keys(prem).forEach((i) => { 247 | if (prem[i].id === sender) { 248 | position = i 249 | } 250 | }) 251 | if (position !== null) { 252 | return prem[position].expired 253 | } 254 | } 255 | 256 | const expiredCheck = () => { 257 | setInterval(() => { 258 | let position = null 259 | Object.keys(prem).forEach((i) => { 260 | if (Date.now() >= prem[i].expired) { 261 | position = i 262 | } 263 | }) 264 | if (position !== null) { 265 | console.log(`Premium expired: ${prem[position].id}`) 266 | prem.splice(position, 1) 267 | fs.writeFileSync('./database/bot/prem.json', JSON.stringify(prem)) 268 | } 269 | }, 1000) 270 | } 271 | 272 | const getAllPremiumUser = () => { 273 | const array = [] 274 | Object.keys(prem).forEach((i) => { 275 | array.push(prem[i].id) 276 | }) 277 | return array 278 | } 279 | 280 | 281 | function kyun(seconds){ 282 | function pad(s){ 283 | return (s < 10 ? '0' : '') + s; 284 | } 285 | var hours = Math.floor(seconds / (60*60)); 286 | var minutes = Math.floor(seconds % (60*60) / 60); 287 | var seconds = Math.floor(seconds % 60); 288 | return `${pad(hours)} Jam ${pad(minutes)} Menit ${pad(seconds)} Detik` 289 | } 290 | 291 | function addMetadata(packname, author) { 292 | if (!packname) packname = 'WABot'; if (!author) author = 'Bot'; 293 | author = author.replace(/[^a-zA-Z0-9]/g, ''); 294 | let name = `${author}_${packname}` 295 | if (fs.existsSync(`./${name}.exif`)) return `./${name}.exif` 296 | const json = { 297 | "sticker-pack-name": packname, 298 | "sticker-pack-publisher": author, 299 | } 300 | const littleEndian = Buffer.from([0x49, 0x49, 0x2A, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x41, 0x57, 0x07, 0x00]) 301 | const bytes = [0x00, 0x00, 0x16, 0x00, 0x00, 0x00] 302 | 303 | let len = JSON.stringify(json).length 304 | let last 305 | 306 | if (len > 256) { 307 | len = len - 256 308 | bytes.unshift(0x01) 309 | } else { 310 | bytes.unshift(0x00) 311 | } 312 | 313 | if (len < 16) { 314 | last = len.toString(16) 315 | last = "0" + len 316 | } else { 317 | last = len.toString(16) 318 | } 319 | 320 | const buf2 = Buffer.from(last, "hex") 321 | const buf3 = Buffer.from(bytes) 322 | const buf4 = Buffer.from(JSON.stringify(json)) 323 | 324 | const buffer = Buffer.concat([littleEndian, buf2, buf3, buf4]) 325 | 326 | fs.writeFile(`./${name}.exif`, buffer, (err) => { 327 | return `./${name}.exif` 328 | }) 329 | 330 | } 331 | 332 | /********** FUNCTION ***************/ 333 | 334 | const client = new WAConnection() 335 | client.on('qr', qr => { 336 | qrcode.generate(qr, { small: true }) 337 | console.log(color('[','white'),color('∆','red'),color(']','white'),color('qr already scan.subscribe','white'),color('YOU','red'),color('TUBE','white'),color('ampibi gaming','yellow')) 338 | }) 339 | 340 | client.on('credentials-updated', () => { 341 | const authInfo = client.base64EncodedAuthInfo() 342 | console.log(`credentials updated!`) 343 | fs.writeFileSync('./session.json', JSON.stringify(authInfo, null, '\t')) 344 | }) 345 | fs.existsSync('./session.json') && client.loadAuthInfo('./session.json') 346 | client.connect(); 347 | 348 | 349 | client.on('group-participants-update', async (anu) => { 350 | if (!welkom.includes(anu.jid)) return 351 | try { 352 | const mdata = await client.groupMetadata(anu.jid) 353 | console.log(anu) 354 | if (anu.action == 'add') { 355 | num = anu.participants[0] 356 | try { 357 | ppimg = await client.getProfilePicture(`${anu.participants[0].split('@')[0]}@c.us`) 358 | } catch { 359 | ppimg = 'https://i0.wp.com/www.gambarunik.id/wp-content/uploads/2019/06/Top-Gambar-Foto-Profil-Kosong-Lucu-Tergokil-.jpg' 360 | } 361 | teks = `Hallo @${num.split('@')[0]}\Selamat datang di group *${mdata.subject}* yang betah ya di sini` 362 | let buff = await getBuffer(ppimg) 363 | client.sendMessage(mdata.id, buff, MessageType.image, {caption: teks, contextInfo: {"mentionedJid": [num]}}) 364 | } else if (anu.action == 'remove') { 365 | num = anu.participants[0] 366 | try { 367 | ppimg = await client.getProfilePicture(`${num.split('@')[0]}@c.us`) 368 | } catch { 369 | ppimg = 'https://i0.wp.com/www.gambarunik.id/wp-content/uploads/2019/06/Top-Gambar-Foto-Profil-Kosong-Lucu-Tergokil-.jpg' 370 | } 371 | teks = `akhirnya beban group berkurang 𝟭,bye bye🥳 @${num.split('@')[0]} jasamu akan di kubur dalam²` 372 | let buff = await getBuffer(ppimg) 373 | client.sendMessage(mdata.id, buff, MessageType.image, {caption: teks, contextInfo: {"mentionedJid": [num]}}) 374 | } 375 | } catch (e) { 376 | console.log('Error : %s', color(e, 'red')) 377 | } 378 | }) 379 | client.on('CB:Blocklist', json => { 380 | if (blocked.length > 2) return 381 | for (let i of json[1].blocklist) { 382 | blocked.push(i.replace('c.us','s.whatsapp.net')) 383 | } 384 | }) 385 | 386 | client.on('message-new', async (mek) => { 387 | try { 388 | if (!mek.message) return 389 | if (mek.key && mek.key.remoteJid == 'status@broadcast') return 390 | if (mek.key.fromMe) return 391 | global.prefix 392 | global.blocked 393 | const content = JSON.stringify(mek.message) 394 | const from = mek.key.remoteJid 395 | const type = Object.keys(mek.message)[0] 396 | const { text, extendedText, contact, location, liveLocation, image, video, sticker, document, audio, product } = MessageType 397 | const time = moment.tz('Asia/Jakarta').format('DD/MM HH:mm:ss') 398 | const timi = moment.tz('Asia/Jakarta').add(30, 'days').calendar(); 399 | const timu = moment.tz('Asia/Jakarta').add(20, 'days').calendar(); 400 | body = (type === 'conversation' && mek.message.conversation.startsWith(prefix)) ? mek.message.conversation : (type == 'imageMessage') && mek.message.imageMessage.caption.startsWith(prefix) ? mek.message.imageMessage.caption : (type == 'videoMessage') && mek.message.videoMessage.caption.startsWith(prefix) ? mek.message.videoMessage.caption : (type == 'extendedTextMessage') && mek.message.extendedTextMessage.text.startsWith(prefix) ? mek.message.extendedTextMessage.text : '' 401 | budy = (type === 'conversation') ? mek.message.conversation : (type === 'extendedTextMessage') ? mek.message.extendedTextMessage.text : '' 402 | var pes = (type === 'conversation' && mek.message.conversation) ? mek.message.conversation : (type == 'imageMessage') && mek.message.imageMessage.caption ? mek.message.imageMessage.caption : (type == 'videoMessage') && mek.message.videoMessage.caption ? mek.message.videoMessage.caption : (type == 'extendedTextMessage') && mek.message.extendedTextMessage.text ? mek.message.extendedTextMessage.text : '' 403 | const messagesC = pes.slice(0).trim().split(/ +/).shift().toLowerCase() 404 | const command = body.slice(1).trim().split(/ +/).shift().toLowerCase() 405 | const args = body.trim().split(/ +/).slice(1) 406 | const isCmd = body.startsWith(prefix) 407 | const tescuk = ["0@s.whatsapp.net"] 408 | const isGroup = from.endsWith('@g.us') 409 | const q = args.join(' ') 410 | const botNumber = client.user.jid 411 | const sender = isGroup ? mek.participant : mek.key.remoteJid 412 | pushname = client.contacts[sender] != undefined ? client.contacts[sender].vname || client.contacts[sender].notify : undefined 413 | const groupMetadata = isGroup ? await client.groupMetadata(from) : '' 414 | const groupName = isGroup ? groupMetadata.subject : '' 415 | const groupId = isGroup ? groupMetadata.jid : '' 416 | const groupMembers = isGroup ? groupMetadata.participants : '' 417 | const groupDesc = isGroup ? groupMetadata.desc : '' 418 | const groupAdmins = isGroup ? getGroupAdmins(groupMembers) : '' 419 | 420 | /************** SCURITY FEATURE ************/ 421 | const isEventon = isGroup ? event.includes(from) : false 422 | const isRegistered = checkRegisteredUser(sender) 423 | const isBadWord = isGroup ? badword.includes(from) : false 424 | const isBotGroupAdmins = groupAdmins.includes(botNumber) || false 425 | const isLevelingOn = isGroup ? _leveling.includes(from) : false 426 | const isGroupAdmins = groupAdmins.includes(sender) || false 427 | const isWelkom = isGroup ? welkom.includes(from) : false 428 | const isNsfw = isGroup ? nsfw.includes(from) : false 429 | const isSimi = isGroup ? samih.includes(from) : false 430 | const isOwner = ownerNumber.includes(sender) 431 | const isPrem = prem.includes(sender) || isOwner 432 | const isAntiLink = isGroup ? antilink.includes(from) : false 433 | const isImage = type === 'imageMessage' 434 | const isUrl = (url) => { 435 | return url.match(new RegExp(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)/, 'gi')) 436 | } 437 | const reply = (teks) => { 438 | client.sendMessage(from, teks, text, {quoted:mek}) 439 | } 440 | const sendMess = (hehe, teks) => { 441 | client.sendMessage(hehe, teks, text) 442 | } 443 | const mentions = (teks, memberr, id) => { 444 | (id == null || id == undefined || id == false) ? client.sendMessage(from, teks.trim(), extendedText, {contextInfo: {"mentionedJid": memberr}}) : client.sendMessage(from, teks.trim(), extendedText, {quoted: mek, contextInfo: {"mentionedJid": memberr}}) 445 | } 446 | const sendImage = (teks) => { 447 | client.sendMessage(from, teks, image, {quoted:mek}) 448 | } 449 | const costum = (pesan, tipe, target, target2) => { 450 | client.sendMessage(from, pesan, tipe, {quoted: { key: { fromMe: false, participant: `${target}`, ...(from ? { remoteJid: from } : {}) }, message: { conversation: `${target2}` }}}) 451 | } 452 | const costumimg = ( pesan , tipe, target , caption) => { 453 | client.sendMessage(from, pesan , tipe , {quoted: { key: { fromMe: false, participant: `${target}`, ...(from ? { remoteJid: from } : {}) }, message: {"imageMessage":{url: 'https://mmg.whatsapp.net/d/f/Ahj0ACnTjSHHm6-HjqAUBYiCu2-85zMZp_-EhiXlsd6A.enc',mimetype: 'image/jpeg',caption: `${caption}`,fileSha256: '0Pk0qJyQFn9FCtslZrydJHRQDKryjYcdP7I3CmRrHRs=',fileLength: '20696',height: 360,width: 382,mediaKey: 'N43d/3GY7GYQpgBymb9qFY5O9iNDXuBirXsNZk+X61I=',fileEncSha256: 'IdFM58vy8URV+IUmOqAY3OZsvCN6Px8gaJlRCElqhd4=',directPath: '/v/t62.7118-24/35174026_475909656741093_8174708112574209693_n.enc?oh=2a690b130cf8f912a9ca35f366558743&oe=6061F0C6',mediaKeyTimestamp: '1614240917',jpegThumbnail: '/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABsbGxscGx4hIR4qLSgtKj04MzM4PV1CR0JHQl2NWGdYWGdYjX2Xe3N7l33gsJycsOD/2c7Z//////////////8BGxsbGxwbHiEhHiotKC0qPTgzMzg9XUJHQkdCXY1YZ1hYZ1iNfZd7c3uXfeCwnJyw4P/Zztn////////////////CABEIAEMASAMBIgACEQEDEQH/xAAwAAADAAMBAAAAAAAAAAAAAAAABAUBAwYCAQADAQEAAAAAAAAAAAAAAAABAgMABP/aAAwDAQACEAMQAAAAoy6kcWS2eH8miq17B553Thh1BgyTY9iULYfndGBmbSwNEV3eWXpjwZElG09WJckXCj8sWBVc1ZKXj2ZYaoWHnc67K3PbKwtZOqzLrzdQAg5fWFRUeCNTQG2pEKJ0wCD/xAAoEAACAgIBAQkAAwEAAAAAAAABAgADBBEScQUQEyEiMTJBYSNRYmP/2gAIAQEAAT8AaZzfEdwWcGMTE1jNv3M1ozDb+SD2jTO+Yigk6A3KqhseIdfkroTYbXQRrkVuJOplKEuOpjtpxF+IjTO+YnZoBvj4pa/msHtMnHZrgymZ6hCnSJsDl+ys7rTpGmevxMwLFS/1fcA7iNzPsDXaH1NccYH+2lJ1SnSNMlOdcbY6iYGa9g4OJzXW9zI7SBJrpjqxsA9zMkcMetf2V7NKD/McgAkxsis7EcA2fkxkqSkaYbMGRu3hr0x6q6ckufaUMpsexj0ma4Y0qDKhqlektyntXiQO4qWI0PONVZWNsNTmZwewekEwo1fpYaMZdvWf2DYrXoO/ARWLNL6VuXiYcSsuK9eXGYtHhM/nsTPVQgb7iDkydRCNBYYx1Ozj6nmSStRIgJ8UH/nMJiTZs/c7RPwExhu+vrH+p//EAB4RAAIBBAMBAAAAAAAAAAAAAAABAhAREjIhMDFC/9oACAECAQE/AOpJsxEqIj4TfNqXygIWpLc+ZEdBH//EAB4RAAICAgIDAAAAAAAAAAAAAAABAjEQETJBAxJx/9oACAEDAQE/AHWVeHQtYrDaNkno7GOzxP10xzWipDHZHidx+EuQz//Z',scansSidecar: 'choizTOCOFXo21QcOR/IlCehTFztHGnB3xo4F4d/kwmxSJJIbMmvxg==',scanLengths: [Array],midQualityFileSha256: '68OHK4IyhiKDNgNAZ3SoXsngzYENebQkV4b/RwhhYIY=',midQualityFileEncSha256: '2EYOLCXx+aqg9RyP6xJYChQNbEjXZmc0EcSwHzoyXx0='}}}}) 454 | } 455 | /*****************END SCURITY FEATURE ********/ 456 | 457 | 458 | 459 | var per = '*[▒▒▒▒▒▒▒▒▒▒] 0%*' 460 | const peri = 5000 * (Math.pow(2, getLevelingLevel(sender)) - 1) 461 | const perl = peri-getLevelingXp(sender) 462 | const resl = Math.round(100-((perl/getLevelingXp(sender))*100)) 463 | if (resl <= 10) { 464 | per = `*[█▒▒▒▒▒▒▒▒▒] ${resl}%*` 465 | } else if (resl <= 20) { 466 | per = `*[██▒▒▒▒▒▒▒▒] ${resl}%*` 467 | } else if (resl <= 30) { 468 | per = `*[███▒▒▒▒▒▒▒] ${resl}%*` 469 | } else if (resl <= 40) { 470 | per = `*[████▒▒▒▒▒▒] ${resl}%*` 471 | } else if (resl <= 50) { 472 | per = `*[█████▒▒▒▒▒] ${resl}%*` 473 | } else if (resl <= 60) { 474 | per = `*[██████▒▒▒▒] ${resl}%*` 475 | } else if (resl <= 70) { 476 | per = `*[███████▒▒▒] ${resl}%*` 477 | } else if (resl <= 80) { 478 | per = `*[████████▒▒] ${resl}%*` 479 | } else if (resl <= 90) { 480 | per = `*[█████████▒] ${resl}%*` 481 | } else if (resl <= 100) { 482 | per = `*[██████████] ${resl}%*` 483 | } 484 | 485 | 486 | //auto Expired 487 | expiredCheck() 488 | 489 | //function rank 490 | const levelRole = getLevelingLevel(sender) 491 | var role = 'Trainee' 492 | if (levelRole <= 3) { 493 | role = 'senior trainee' 494 | } else if (levelRole <= 5) { 495 | role = 'private' 496 | } else if (levelRole <= 7) { 497 | role = 'corporal' 498 | } else if (levelRole <= 8) { 499 | role = 'Sergeant' 500 | } else if (levelRole <= 9) { 501 | role = 'staff sgt I' 502 | } else if (levelRole <= 10) { 503 | role = 'staff sgt II' 504 | } else if (levelRole <= 11) { 505 | role = 'staff sgt II' 506 | } else if (levelRole <= 12) { 507 | role = 'Sgt 1st class I' 508 | } else if (levelRole <= 13) { 509 | role = 'Sgt 1st class II' 510 | } else if (levelRole <= 14) { 511 | role = 'Sgt 1st class III' 512 | } else if (levelRole <= 14) { 513 | role = 'Ggt 1st class IV' 514 | } else if (levelRole <= 15) { 515 | role = 'Master sgt I' 516 | } else if (levelRole <= 16) { 517 | role = 'Master sgt II' 518 | } else if (levelRole <= 17) { 519 | role = 'Master sgt III' 520 | } else if (levelRole <= 18) { 521 | role = 'Master sgt IV' 522 | } else if (levelRole <= 19) { 523 | role = 'Master sgt V' 524 | } else if (levelRole <= 20) { 525 | role = '2nd Lt I' 526 | } else if (levelRole <= 21) { 527 | role = '2nd Lt II' 528 | } else if (levelRole <= 22) { 529 | role = '2nd Lt III' 530 | } else if (levelRole <= 23) { 531 | role = '2nd Lt IV' 532 | } 533 | 534 | var premi = '*X*' 535 | if (isPrem) { 536 | premi = '*✓*' 537 | } 538 | if (isOwner) { 539 | premi = '*owner*' 540 | } 541 | 542 | 543 | //function leveling 544 | if (isGroup && isRegistered && isLevelingOn) { 545 | const currentLevel = getLevelingLevel(sender) 546 | const checkId = getLevelingId(sender) 547 | try { 548 | if (currentLevel === undefined && checkId === undefined) addLevelingId(sender) 549 | const amountXp = Math.floor(Math.random() * 10) + 500 550 | const requiredXp = 5000 * (Math.pow(2, currentLevel) - 1) 551 | const getLevel = getLevelingLevel(sender) 552 | addLevelingXp(sender, amountXp) 553 | if (requiredXp <= getLevelingXp(sender)) { 554 | addLevelingLevel(sender, 1) 555 | bayarLimit(sender, 3) 556 | await reply(ind.levelup(pushname, sender, getLevelingXp, getLevel, getLevelingLevel, role)) 557 | } 558 | } catch (err) { 559 | console.error(err) 560 | } 561 | } 562 | //function check limit 563 | const checkLimit = (sender) => { 564 | let found = false 565 | for (let lmt of _limit) { 566 | if (lmt.id === sender) { 567 | let limitCounts = limitawal - lmt.limit 568 | if (limitCounts <= 0) return client.sendMessage(from,`Limit request anda sudah habis\n\n_Note : limit bisa di dapatkan dengan cara ${prefix}buylimit dan dengan naik level_`, text,{ quoted: mek}) 569 | client.sendMessage(from, ind.limitcount(limitCounts), text, { quoted : mek}) 570 | found = true 571 | } 572 | } 573 | if (found === false) { 574 | let obj = { id: sender, limit: 0 } 575 | _limit.push(obj) 576 | fs.writeFileSync('./database/user/limit.json', JSON.stringify(_limit)) 577 | client.sendMessage(from, ind.limitcount(limitCounts), text, { quoted : mek}) 578 | } 579 | } 580 | 581 | //funtion limited 582 | const isLimit = (sender) =>{ 583 | if (isOwner && isPrem) {return false;} 584 | let position = false 585 | for (let i of _limit) { 586 | if (i.id === sender) { 587 | let limits = i.limit 588 | if (limits >= limitawal ) { 589 | position = true 590 | client.sendMessage(from, ind.limitend(pushname), text, {quoted: mek}) 591 | return true 592 | } else { 593 | _limit 594 | position = true 595 | return false 596 | } 597 | } 598 | } 599 | if (position === false) { 600 | const obj = { id: sender, limit: 0 } 601 | _limit.push(obj) 602 | fs.writeFileSync('./database/user/limit.json',JSON.stringify(_limit)) 603 | return false 604 | } 605 | } 606 | 607 | if (isGroup) { 608 | try { 609 | const getmemex = groupMembers.length 610 | if (getmemex <= memberlimit) { 611 | reply(`maaf member group belum memenuhi syarat. minimal member group adalah ${memberlimit}`) 612 | setTimeout( () => { 613 | client.groupLeave(from) 614 | }, 5000) 615 | setTimeout( () => { 616 | client.updatePresence(from, Presence.composing) 617 | reply("1detik") 618 | }, 4000) 619 | setTimeout( () => { 620 | client.updatePresence(from, Presence.composing) 621 | reply("2detik") 622 | }, 3000) 623 | setTimeout( () => { 624 | client.updatePresence(from, Presence.composing) 625 | reply("3detik") 626 | }, 2000) 627 | setTimeout( () => { 628 | client.updatePresence(from, Presence.composing) 629 | reply("4detik") 630 | }, 1000) 631 | setTimeout( () => { 632 | client.updatePresence(from, Presence.composing) 633 | reply("5detik") 634 | }, 0) 635 | } 636 | } catch (err) { console.error(err) } 637 | } 638 | 639 | if (isGroup && isBadWord) { 640 | if (bad.includes(messagesC)) { 641 | if (!isGroupAdmins) { 642 | try { 643 | reply("JAGA UCAPAN DONG!! 😠") 644 | setTimeout( () => { 645 | client.groupLeave(from) 646 | }, 5000) 647 | setTimeout( () => { 648 | client.updatePresence(from, Presence.composing) 649 | reply("1detik") 650 | }, 4000) 651 | setTimeout( () => { 652 | client.updatePresence(from, Presence.composing) 653 | reply("2detik") 654 | }, 3000) 655 | setTimeout( () => { 656 | client.updatePresence(from, Presence.composing) 657 | reply("3detik") 658 | }, 2000) 659 | setTimeout( () => { 660 | client.updatePresence(from, Presence.composing) 661 | reply("4detik") 662 | }, 1000) 663 | setTimeout( () => { 664 | client.updatePresence(from, Presence.composing) 665 | reply("*「 ANTI BADWORD 」*\nKamu dikick karena berkata kasar!") 666 | }, 0) 667 | } catch { client.sendMessage(from, `Untung cya bukan admin, kalo admin udah cya kick!`, text , {quoted : mek}) } 668 | } else { 669 | return reply( "Tolong Jaga Ucapan Min 😇") 670 | } 671 | } 672 | } 673 | 674 | //function antilink 675 | if (messagesC.includes("://chat.whatsapp.com/")){ 676 | if (!isGroup) return 677 | if (!isAntiLink) return 678 | if (isGroupAdmins) return reply('karena kamu adalah admin group, bot tidak akan kick kamu') 679 | client.updatePresence(from, Presence.composing) 680 | if (messagesC.includes("#izinadmin")) return reply("#izinadmin diterima") 681 | var kic = `${sender.split("@")[0]}@s.whatsapp.net` 682 | reply(`Link Group Terdeteksi maaf ${sender.split("@")[0]} anda akan di kick dari group 5detik lagi`) 683 | setTimeout( () => { 684 | client.groupRemove(from, [kic]).catch((e)=>{reply(`*ERR:* ${e}`)}) 685 | }, 5000) 686 | setTimeout( () => { 687 | client.updatePresence(from, Presence.composing) 688 | reply("1detik") 689 | }, 4000) 690 | setTimeout( () => { 691 | client.updatePresence(from, Presence.composing) 692 | reply("2detik") 693 | }, 3000) 694 | setTimeout( () => { 695 | client.updatePresence(from, Presence.composing) 696 | reply("3detik") 697 | }, 2000) 698 | setTimeout( () => { 699 | client.updatePresence(from, Presence.composing) 700 | reply("4detik") 701 | }, 1000) 702 | setTimeout( () => { 703 | client.updatePresence(from, Presence.composing) 704 | reply("5detik") 705 | }, 0) 706 | } 707 | 708 | 709 | //function balance 710 | if (isRegistered ) { 711 | const checkATM = checkATMuser(sender) 712 | try { 713 | if (checkATM === undefined) addATM(sender) 714 | const uangsaku = Math.floor(Math.random() * 10) + 90 715 | addKoinUser(sender, uangsaku) 716 | } catch (err) { 717 | console.error(err) 718 | } 719 | } 720 | 721 | //kolor 722 | colors = ['red','white','black','blue','yellow','green'] 723 | 724 | //detector media 725 | const isMedia = (type === 'imageMessage' || type === 'videoMessage') 726 | const isQuotedImage = type === 'extendedTextMessage' && content.includes('imageMessage') 727 | const isQuotedAudio = type === 'extendedTextMessage' && content.includes('audioMessage') 728 | const isQuotedVideo = type === 'extendedTextMessage' && content.includes('videoMessage') 729 | const isQuotedSticker = type === 'extendedTextMessage' && content.includes('stickerMessage') 730 | 731 | //private chat message 732 | if (!isGroup && isCmd) console.log('\x1b[1;31m~\x1b[1;37m>', '[\x1b[1;32mEXEC\x1b[1;37m]', time, color(command), 'from', color(sender.split('@')[0]), 'args :', color(args.length)) 733 | if (!isGroup && !isCmd) console.log('\x1b[1;31m~\x1b[1;37m>', '[\x1b[1;31mRECV\x1b[1;37m]', time, color('Message'), 'from', color(sender.split('@')[0]), 'args :', color(args.length)) 734 | 735 | //group message 736 | if (isCmd && isGroup) console.log('\x1b[1;31m~\x1b[1;37m>', '[\x1b[1;32mEXEC\x1b[1;37m]', time, color(command), 'from', color(sender.split('@')[0]), 'in', color(groupName), 'args :', color(args.length)) 737 | if (!isCmd && isGroup) console.log('\x1b[1;31m~\x1b[1;37m>', '[\x1b[1;31mRECV\x1b[1;37m]', time, color('Message'), 'from', color(sender.split('@')[0]), 'in', color(groupName), 'args :', color(args.length)) 738 | 739 | switch(command) { 740 | //apivinz 741 | case 'tebakgambar': 742 | if (!isRegistered) return reply(ind.noregis()) 743 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 744 | anu = await fetchJson(`https://api.zeks.xyz/api/tebakgambar?apikey=apivinz`, {method: 'get'}) 745 | ngebuff = await getBuffer(anu.result.soal) 746 | tebak = `➸ Jawaban : *${anu.result.jawaban}*` 747 | setTimeout( () => { 748 | client.sendMessage(from, tebak, text, {quoted: mek}) 749 | }, 30000) // 1000 = 1s, 750 | setTimeout( () => { 751 | client.sendMessage(from, '_10 Detik lagi..._', text) // ur cods 752 | }, 20000) // 1000 = 1s, 753 | setTimeout( () => { 754 | client.sendMessage(from, '_20 Detik lagi..._', text) // ur cods 755 | }, 10000) // 1000 = 1s, 756 | setTimeout( () => { 757 | client.sendMessage(from, '_30 Detik lagi..._', text) // ur cods 758 | }, 2500) // 1000 = 1s, 759 | setTimeout( () => { 760 | client.sendMessage(from, ngebuff, image, { caption: '_Tebak bro!!! gak bisa jawab donasi ya:v_', quoted: mek }) // ur cods 761 | }, 0) // 1000 = 1s, 762 | await limitAdd(sender) 763 | break 764 | case 'meme': 765 | if (!isRegistered) return reply(ind.noregis()) 766 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 767 | nganu = await fetchJson(`https://vinz.zeks.xyz/api/meme`) 768 | buper = await getBuffer(nganu.result) 769 | client.sendMessage(from, buper, image, {quoted: mek}) 770 | await limitAdd(sender) 771 | break 772 | case 'ttp': 773 | pngttp = './tmp/ttp.png' 774 | webpng = './tmp/ttp.webp' 775 | const ttptext = body.slice(5) 776 | fetch(`https://api.areltiyan.site/sticker_maker?text=${ttptext}`, { method: 'GET'}) 777 | .then(async res => { 778 | const ttptxt = await res.json() 779 | base64Img.img(ttptxt.base64, 'tmp', 'ttp', function(err, filepath) { 780 | if (err) return console.log(err); 781 | exec(`ffmpeg -i ${pngttp} -vcodec libwebp -filter:v fps=fps=20 -lossless 1 -loop 0 -preset default -an -vsync 0 -s 512:512 ${webpng}`, (err) => { 782 | buffer = fs.readFileSync(webpng) 783 | client.sendMessage(from, buffer, sticker) 784 | fs.unlinkSync(webpng) 785 | fs.unlinkSync(pngttp) 786 | }) 787 | }) 788 | }); 789 | break 790 | case 'pornhub': 791 | if (!isRegistered) return reply(ind.noregis()) 792 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 793 | var gh = body.slice(9) 794 | var porn = gh.split("&")[0]; 795 | var hub = gh.split("&")[1]; 796 | if (args.length < 1) return reply(`「❗」Contoh : ${prefix}pornhub Ramlan & Hub`) 797 | reply(ind.wait()) 798 | alan = await getBuffer(`https://vinz.zeks.xyz/api/pornhub?text1=${porn}&text2=${hub}`) 799 | client.sendMessage(from, alan, image, {quoted: mek}) 800 | await limitAdd(sender) 801 | break 802 | case 'textlight': 803 | if (!isRegistered) return reply(ind.noregis()) 804 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 805 | if (args.length < 1) return reply(ind.wrongf()) 806 | ligh = body.slice(11) 807 | if (ligh.length > 10) return reply('Teksnya kepanjangan, maksimal 9 karakter') 808 | reply(ind.wait()) 809 | lawak = await getBuffer(`https://api.zeks.xyz/api/tlight?text=${ligh}&apikey=apivinz`) 810 | client.sendMessage(from, lawak, image, {quoted: mek}) 811 | await limitAdd(sender) 812 | break 813 | case 'glitchtext': 814 | if (!isRegistered) return reply(ind.noregis()) 815 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 816 | var gh = body.slice(12) 817 | var gli = gh.split("&")[0]; 818 | var tch = gh.split("&")[1]; 819 | if (args.length < 1) return reply(`「❗」Contoh : ${prefix}glitchtext Ramlan & Gans`) 820 | reply(ind.wait()) 821 | buffer = await getBuffer(`https://api.zeks.xyz/api/gtext?text1=${gli}&text2=${tch}&apikey=apivinz`) 822 | client.sendMessage(from, buffer, image, {quoted: mek}) 823 | await limitAdd(sender) 824 | break 825 | case 'nulis': 826 | if (!isRegistered) return reply(ind.noregis()) 827 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 828 | if (args.length < 1) return reply(`Teksnya mana kak? Contoh : ${prefix}nulis Ramlan baik hati`) 829 | nul = body.slice(7) 830 | reply('「❗」WAIT BRO GUE NULIS DUMLU YAKAN') 831 | tak = await getBuffer(`https://api.zeks.xyz/api/nulis?text=${nul}&apikey=apivinz`) 832 | client.sendMessage(from, tak, image, {quoted: mek, caption: 'Lebih baik nulis sendiri ya kak :*'}) 833 | await limitAdd(sender) 834 | break 835 | case 'tahta': 836 | if (!isRegistered) return reply(ind.noregis()) 837 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 838 | if (args.length < 1) return reply(`「❗」Contoh : ${prefix}hartatahta hanya dia`) 839 | har = body.slice(12) 840 | reply('「❗」Hirti Tihti Tai Anjg :v') 841 | buffer = await getBuffer(`https://api.zeks.xyz/api/hartatahta?text=${har}&apikey=apivinz`) 842 | client.sendMessage(from, buffer, image, {quoted: mek}) 843 | await limitAdd(sender) 844 | break 845 | //premiom 846 | case 'checkprem': 847 | const cekExp = ms(getPremiumExpired(sender) - Date.now()) 848 | reply(`*「 PREMIUM EXPIRED 」*\n\n➸ *ID*: ${sender.split('@')[0]}\n➸ *Premium left*: ${cekExp.days} day(s) ${cekExp.hours} hour(s) ${cekExp.minutes} minute(s)`) 849 | break 850 | 851 | //qr 852 | case 'qrcode': 853 | if (!isRegistered) return reply(ind.noregis()) 854 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 855 | const tex = encodeURIComponent(body.slice(8)) 856 | if (!tex) return client.sendMessage(from, 'MASUKAN URL/TEKS UNTUK DI JADIKAN QR', text, {quoted: mek}) 857 | const buff = await getBuffer(`https://api.qrserver.com/v1/create-qr-code/?size=500x500&data=${tex}`) 858 | client.sendMessage(from, buff, image, {quoted: mek}) 859 | await limitAdd(sender) 860 | break 861 | //tobz 862 | case 'lirik': 863 | anu = await fetchJson(`https://tobz-api.herokuapp.com/api/lirik?q=${body.slice(7)}&apikey=BotWeA`) 864 | thum = await getBuffer(anu.result.thumb) 865 | teks = `*「 LAGU DI TEMUKAN 」*\n\n*Judul* : ${anu.result.judul}\n*Album* : ${anu.result.album}\n*public in* : ${anu.result.dipublikasi}\n*Lyrics* : ${anu.result.lirik}` 866 | client.sendMessage(from, thum, image, { quoted : mek, caption: teks }) 867 | break 868 | case 'ttp': 869 | anu = await fetchJson(`https://tobz-api.herokuapp.com/api/ttp?text=${body.slice(5)}&apikey=BotWeA`) 870 | res = await getBase64(anu.base64) 871 | client.sendMessage(from, res, sticker, {quoted:mek}) 872 | break 873 | case 'chord': 874 | anu = await fetchJson(`https://tobz-api.herokuapp.com/api/chord?q=${body.slice(7)}&apikey=BotWeA`) 875 | client.sendMessage(from, anu.result, text, {quoted:mek}) 876 | break 877 | case 'moddroid': 878 | if (!isRegistered) return reply(ind.noregis()) 879 | if (!isPrem) return reply(ind.premon(pushname)) 880 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 881 | data = await fetchJson(`https://tobz-api.herokuapp.com/api/moddroid?q=${body.slice(10)}&apikey=BotWeA`) 882 | hepi = data.result[0] 883 | teks = `*Nama*: ${data.result[0].title}\n*publisher*: ${hepi.publisher}\n*mod info:* ${hepi.mod_info}\n*size*: ${hepi.size}\n*latest version*: ${hepi.latest_version}\n*genre*: ${hepi.genre}\n*link:* ${hepi.link}\n*download*: ${hepi.download}` 884 | buffer = await getBuffer(hepi.image) 885 | client.sendMessage(from, buffer, image, {quoted: mek, caption: `${teks}`}) 886 | await limitAdd(sender) 887 | break 888 | case 'happymod': 889 | if (!isRegistered) return reply(ind.noregis()) 890 | if (!isPrem) return reply(ind.premon(pushname)) 891 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 892 | data = await fetchJson(`https://tobz-api.herokuapp.com/api/happymod?q=${body.slice(10)}&apikey=BotWeA`) 893 | hupo = data.result[0] 894 | teks = `*Nama*: ${data.result[0].title}\n*version*: ${hupo.version}\n*size:* ${hupo.size}\n*root*: ${hupo.root}\n*purchase*: ${hupo.price}\n*link*: ${hupo.link}\n*download*: ${hupo.download}` 895 | buffer = await getBuffer(hupo.image) 896 | client.sendMessage(from, buffer, image, {quoted: mek, caption: `${teks}`}) 897 | await limitAdd(sender) 898 | break 899 | case 'bitly': 900 | if (!isRegistered) return reply(ind.noregis()) 901 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 902 | client.updatePresence(from, Presence.composing) 903 | data = await fetchJson(`https://tobz-api.herokuapp.com/api/bitly?url=${args[0]}&apikey=BotWeA`) 904 | hasil = `link : ${args[0]}\n\nOutput : ${data.result}` 905 | reply(hasil) 906 | await limitAdd(sender) 907 | break 908 | case 'nangis': 909 | if (!isRegistered) return reply(ind.noregis()) 910 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 911 | ranp = getRandom('.gif') 912 | rano = getRandom('.webp') 913 | anu = await fetchJson('https://tobz-api.herokuapp.com/api/cry?apikey=BotWeA', {method: 'get'}) 914 | if (anu.error) return reply(anu.error) 915 | exec(`wget ${anu.result} -O ${ranp} && ffmpeg -i ${ranp} -vcodec libwebp -filter:v fps=fps=15 -lossless 1 -loop 0 -preset default -an -vsync 0 -s 512:512 ${rano}`, (err) => { 916 | fs.unlinkSync(ranp) 917 | if (err) return reply(ind.stikga()) 918 | buffer = fs.readFileSync(rano) 919 | client.sendMessage(from, buffer, sticker, {quoted: mek}) 920 | fs.unlinkSync(rano) 921 | }) 922 | await limitAdd(sender) 923 | break 924 | case 'blowjob': 925 | if (!isRegistered) return reply(ind.noregis()) 926 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 927 | if (!isNsfw) return reply(ind.nsfwoff()) 928 | ranp = getRandom('.gif') 929 | rano = getRandom('.webp') 930 | anu = await fetchJson('https://tobz-api.herokuapp.com/api/nsfwblowjob?apikey=BotWeA', {method: 'get'}) 931 | if (anu.error) return reply(anu.error) 932 | exec(`wget ${anu.result} -O ${ranp} && ffmpeg -i ${ranp} -vcodec libwebp -filter:v fps=fps=15 -lossless 1 -loop 0 -preset default -an -vsync 0 -s 512:512 ${rano}`, (err) => { 933 | fs.unlinkSync(ranp) 934 | if (err) return reply(ind.stikga()) 935 | buffer = fs.readFileSync(rano) 936 | client.sendMessage(from, buffer, sticker, {quoted: mek}) 937 | fs.unlinkSync(rano) 938 | }) 939 | await limitAdd(sender) 940 | break 941 | case 'cium': 942 | if (!isRegistered) return reply(ind.noregis()) 943 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 944 | if (!isNsfw) return reply(ind.nsfwoff()) 945 | ranp = getRandom('.gif') 946 | rano = getRandom('.webp') 947 | anu = await fetchJson('https://tobz-api.herokuapp.com/api/kiss?apikey=BotWeA', {method: 'get'}) 948 | if (anu.error) return reply(anu.error) 949 | exec(`wget ${anu.result} -O ${ranp} && ffmpeg -i ${ranp} -vcodec libwebp -filter:v fps=fps=15 -lossless 1 -loop 0 -preset default -an -vsync 0 -s 512:512 ${rano}`, (err) => { 950 | fs.unlinkSync(ranp) 951 | if (err) return reply(ind.stikga()) 952 | buffer = fs.readFileSync(rano) 953 | client.sendMessage(from, buffer, sticker, {quoted: mek}) 954 | fs.unlinkSync(rano) 955 | }) 956 | await limitAdd(sender) 957 | break 958 | case 'peluk': 959 | if (!isRegistered) return reply(ind.noregis()) 960 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 961 | if (!isNsfw) return reply(ind.nsfwoff()) 962 | ranp = getRandom('.gif') 963 | rano = getRandom('.webp') 964 | anu = await fetchJson('https://tobz-api.herokuapp.com/api/hug?apikey=BotWeA', {method: 'get'}) 965 | if (anu.error) return reply(anu.error) 966 | exec(`wget ${anu.result} -O ${ranp} && ffmpeg -i ${ranp} -vcodec libwebp -filter:v fps=fps=15 -lossless 1 -loop 0 -preset default -an -vsync 0 -s 512:512 ${rano}`, (err) => { 967 | fs.unlinkSync(ranp) 968 | if (err) return reply(ind.stikga()) 969 | buffer = fs.readFileSync(rano) 970 | client.sendMessage(from, buffer, sticker, {quoted: mek}) 971 | fs.unlinkSync(rano) 972 | }) 973 | await limitAdd(sender) 974 | break 975 | case 'husbu': 976 | if (!isRegistered) return reply(ind.noregis()) 977 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 978 | if (!isNsfw) return reply(ind.nsfwoff()) 979 | try { 980 | res = await fetchJson(`https://tobz-api.herokuapp.com/api/husbu?apikey=BotWeA`) 981 | buffer = await getBuffer(res.image) 982 | client.sendMessage(from, buffer, image, {quoted: mek, caption: 'Ingat! Cintai husbumu'}) 983 | } catch (e) { 984 | console.log(`Error :`, color(e,'red')) 985 | reply('❌ *ERROR* ❌') 986 | } 987 | await limitAdd(sender) 988 | break 989 | case 'ranime': 990 | if (!isRegistered) return reply(ind.noregis()) 991 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 992 | if (!isNsfw) return reply(ind.nsfwoff()) 993 | gatauda = body.slice(8) 994 | reply(ind.wait()) 995 | anu = await fetchJson(`https://tobz-api.herokuapp.com/api/randomanime?apikey=BotWeA`, {method: 'get'}) 996 | buffer = await getBuffer(anu.result) 997 | client.sendMessage(from, buffer, image, {quoted: mek}) 998 | await limitAdd(sender) 999 | break 1000 | case 'joox': 1001 | if (!isRegistered) return reply(ind.noregis()) 1002 | if (!isPrem) return reply(ind.premon(pushname)) 1003 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1004 | data = await fetchJson(`https://tobz-api.herokuapp.com/api/joox?q=${body.slice(6)}&apikey=BotWeA`, {method: 'get'}) 1005 | if (data.error) return reply(data.error) 1006 | infomp3 = `*Lagu Ditemukan!!!*\nJudul : ${data.result.judul}\nAlbum : ${data.result.album}\nDipublikasi : ${data.result.dipublikasi}` 1007 | buffer = await getBuffer(data.result.thumb) 1008 | lagu = await getBuffer(data.result.mp3) 1009 | client.sendMessage(from, buffer, image, {quoted: mek, caption: infomp3}) 1010 | client.sendMessage(from, lagu, audio, {mimetype: 'audio/mp4', filename: `${data.result.title}.mp3`, quoted: mek}) 1011 | await limitAdd(sender) 1012 | break 1013 | //freerestapi 1014 | case 'igstalk': 1015 | if (!isRegistered) return reply(ind.noregis()) 1016 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1017 | hmm = await fetchJson(`https://freerestapi.herokuapp.com/api/v1/igs?u=${body.slice(9)}`) 1018 | buffer = await getBuffer(hmm.data.profilehd) 1019 | hasil = `Fullname : ${hmm.data.fullname}\npengikut : ${hmm.data.follower}\nMengikuti : ${hmm.data.following}\nPrivate : ${hmm.data.private}\nVerified : ${hmm.data.verified}\nbio : ${hmm.data.bio}` 1020 | client.sendMessage(from, buffer, image, {quoted: mek, caption: hasil}) 1021 | await limitAdd(sender) 1022 | break 1023 | //daftar 1024 | case 'daftar': 1025 | if (isRegistered) return reply(ind.rediregis()) 1026 | if (!q.includes('|')) return reply(ind.wrongf()) 1027 | const namaUser = q.substring(0, q.indexOf('|') - 0) 1028 | const umurUser = q.substring(q.lastIndexOf('|') + 1) 1029 | const serialUser = createSerial(20) 1030 | if(isNaN(umurUser)) return await reply('Umur harus berupa angka!!') 1031 | if (namaUser.length >= 30) return reply(`why is your name so long it's a name or a train`) 1032 | if (umurUser > 40) return reply(`your age is too old maximum 40 years`) 1033 | if (umurUser < 12) return reply(`your age is too young minimum 12 years`) 1034 | try { 1035 | ppimg = await client.getProfilePicture(`${sender.split('@')[0]}@c.us`) 1036 | } catch { 1037 | ppimg = 'https://i0.wp.com/www.gambarunik.id/wp-content/uploads/2019/06/Top-Gambar-Foto-Profil-Kosong-Lucu-Tergokil-.jpg' 1038 | } 1039 | veri = sender 1040 | if (isGroup) { 1041 | addRegisteredUser(sender, namaUser, umurUser, time, serialUser) 1042 | await client.sendMessage(from, ppimg, image, {quoted: mek, caption: ind.registered(namaUser, umurUser, serialUser, time, sender)}) 1043 | addATM(sender) 1044 | addLevelingId(sender) 1045 | checkLimit(sender) 1046 | console.log(color('[REGISTER]'), color(time, 'yellow'), 'Name:', color(namaUser, 'cyan'), 'Age:', color(umurUser, 'cyan'), 'Serial:', color(serialUser, 'cyan'), 'in', color(sender || groupName)) 1047 | } else { 1048 | addRegisteredUser(sender, namaUser, umurUser, time, serialUser) 1049 | await client.sendMessage(from, ppimg, image, {quoted: mek, caption: ind.registered(namaUser, umurUser, serialUser, time, sender)}) 1050 | addATM(sender) 1051 | addLevelingId(sender) 1052 | checkLimit(sender) 1053 | console.log(color('[REGISTER]'), color(time, 'yellow'), 'Name:', color(namaUser, 'cyan'), 'Age:', color(umurUser, 'cyan'), 'Serial:', color(serialUser, 'cyan')) 1054 | } 1055 | break 1056 | //terhambar 1057 | case 'quotemaker': 1058 | if (!isRegistered) return reply(ind.noregis()) 1059 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1060 | var gh = body.slice(12) 1061 | var quote = gh.split("|")[0]; 1062 | var wm = gh.split("|")[1]; 1063 | const pref = `Usage: \n${prefix}quotemaker teks|watermark\n\nEx :\n${prefix}quotemaker ini contoh|bicit` 1064 | if (args.length < 1) return reply(pref) 1065 | reply(ind.wait()) 1066 | anu = await fetchJson(`https://terhambar.com/aw/qts/?kata=${quote}&author=${wm}&tipe=random`, {method: 'get'}) 1067 | buffer = await getBuffer(anu.result) 1068 | client.sendMessage(from, buffer, image, {caption: 'Nih anjim', quoted: mek}) 1069 | await limitAdd(sender) 1070 | break 1071 | //fadli 1072 | case 'pinterest': 1073 | if (!isRegistered) return reply(ind.noregis()) 1074 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1075 | client.updatePresence(from, Presence.composing) 1076 | data = await fetchJson(`https://api.fdci.se/rep.php?gambar=${body.slice(11)}`, {method: 'get'}) 1077 | reply(ind.wait()) 1078 | n = JSON.parse(JSON.stringify(data)); 1079 | nimek = n[Math.floor(Math.random() * n.length)]; 1080 | pok = await getBuffer(nimek) 1081 | client.sendMessage(from, pok, image, { quoted: mek, caption: `*𝐏𝐈𝐍𝐓𝐄𝐑𝐄𝐒𝐓*`}) 1082 | await limitAdd(sender) 1083 | break 1084 | case 'pokemon': 1085 | if (!isRegistered) return reply(ind.noregis()) 1086 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1087 | if (!isGroup) return reply(ind.groupo()) 1088 | if (!isNsfw) return reply(ind.nsfwoff()) 1089 | anu = await fetchJson(`https://api.fdci.se/rep.php?gambar=pokemon`, {method: 'get'}) 1090 | reply(ind.wait()) 1091 | var n = JSON.parse(JSON.stringify(anu)); 1092 | var nimek = n[Math.floor(Math.random() * n.length)]; 1093 | pok = await getBuffer(nimek) 1094 | client.sendMessage(from, pok, image, { quoted: mek }) 1095 | await limitAdd(sender) 1096 | break 1097 | case 'anjing': 1098 | if (!isRegistered) return reply(ind.noregis()) 1099 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1100 | if (!isGroup) return reply(ind.groupo()) 1101 | if (!isNsfw) return reply(ind.nsfwoff()) 1102 | anu = await fetchJson(`https://api.fdci.se/rep.php?gambar=anjing`, {method: 'get'}) 1103 | reply(ind.wait()) 1104 | var n = JSON.parse(JSON.stringify(anu)); 1105 | var nimek = n[Math.floor(Math.random() * n.length)]; 1106 | pok = await getBuffer(nimek) 1107 | client.sendMessage(from, pok, image, { quoted: mek }) 1108 | await limitAdd(sender) 1109 | break 1110 | //jojo 1111 | case 'stickerhide': 1112 | ranp = getRandom('.gif') 1113 | rano = getRandom('.webp') 1114 | anu = await fetchJson(`https://docs-jojo.herokuapp.com/api/screed?text=${args[0]}`,{method: 'get'}) 1115 | exec(`wget ${anu} -O ${ranp} && ffmpeg -i ${ranp} -vcodec libwebp -filter:v fps=fps=15 -lossless 1 -loop 0 -preset default -an -vsync 0 -s 512:512 ${rano}`, (err) => { 1116 | fs.unlinkSync(ranp) 1117 | if (err) return reply(ind.stikga()) 1118 | buffer = fs.readFileSync(rano) 1119 | client.sendMessage(from, buffer, sticker, {quoted: mek}) 1120 | fs.unlinkSync(rano) 1121 | }) 1122 | break 1123 | case 'emoji': 1124 | anu = await fetchJson(`https://docs-jojo.herokuapp.com/api/emoji2png?emoji=${args[0]}&type=aple`, {method: 'get'}) 1125 | jes = await getBuffer(anu) 1126 | client.sendMessage(from, jes, image,{quoted : mek, caption : 'DONE'}) 1127 | break 1128 | case 'tiktok': 1129 | if (!isPrem) return reply(ind.premon(pushname)) 1130 | anu = await fetchJson (`https://docs-jojo.herokuapp.com/api/tiktok_nowm?url=${args[0]}`, {method : 'get' }) 1131 | if (anu.error) return reply(anu.error) 1132 | teks = `*From* : ${anu.result.from}\n*Judul* : ${anu.result.title}\n*Upload* : ${anu.result.uploaded}` 1133 | thumb = await getBuffer(anu.result.thumb) 1134 | client.sendMessage(from, thumb, image, {quoted: mek, caption: teks}) 1135 | buffer = await getBuffer(anu.result.url) 1136 | client.sendMessage(from, buffer, video, {mimetype: 'video/mp4', filename: `${anu.title}.mp4`, quoted: mek}) 1137 | break 1138 | case 'quotes': 1139 | if (!isRegistered) return reply(ind.noregis()) 1140 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1141 | anu = await fetchJson(`https://docs-jojo.herokuapp.com/api/quotesnime/random`, {method: 'get'}) 1142 | reply(anu.data.quote) 1143 | await limitAdd(sender) 1144 | break 1145 | case 'infonomor': 1146 | if (!isRegistered) return reply(ind.noregis()) 1147 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1148 | if (args.length < 1) return reply(`Masukan Nomor\nContoh : ${prefix}infonomor 0812345678`) 1149 | data = await fetchJson(`https://docs-jojo.herokuapp.com/api/infonomor?no=${body.slice(11)}`) 1150 | if (data.error) return reply(data.error) 1151 | if (data.result) return reply(data.result) 1152 | hasil = `╠➥ internasional : ${data.international}\n╠➥ nomor : ${data.nomor}\n╠➥ operator : ${data.op}` 1153 | reply(hasil) 1154 | await limitAdd(sender) 1155 | break 1156 | case 'beritahoax': 1157 | if (!isRegistered) return reply(ind.noregis()) 1158 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1159 | client.updatePresence(from, Presence.composing) 1160 | data = await fetchJson(`https://docs-jojo.herokuapp.com/api/infohoax`, {method: 'get'}) 1161 | teks = '=================\n' 1162 | for (let i of data.result) { 1163 | teks += `*Gambar* : ${i.image}\n*Title* : ${i.title}\n*link* : ${i.link}\n*tag* : ${i.tag}\n=================\n` 1164 | } 1165 | reply(teks.trim()) 1166 | await limitAdd(sender) 1167 | break 1168 | case 'ytmp4': 1169 | if (!isRegistered) return reply(ind.noregis()) 1170 | if (!isPrem) return reply(ind.premon(pushname)) 1171 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1172 | if (args.length < 1) return reply('Urlnya mana um?') 1173 | if(!isUrl(args[0]) && !args[0].includes('youtu')) return reply(ind.stikga()) 1174 | anu = await fetchJson(`https://docs-jojo.herokuapp.com/api/ytmp4?url=${args[0]}`, {method: 'get'}) 1175 | if (anu.error) return reply(anu.error) 1176 | teks = `*Title* : ${anu.title}\n*Size* : ${anu.filesize}` 1177 | thumb = await getBuffer(anu.thumb) 1178 | client.sendMessage(from, thumb, image, {quoted: mek, caption: teks}) 1179 | buffer = await getBuffer(anu.result) 1180 | client.sendMessage(from, buffer, video, {mimetype: 'video/mp4', filename: `${anu.title}.mp4`, quoted: mek}) 1181 | await limitAdd(sender) 1182 | break 1183 | case 'ytmp3': 1184 | if (!isRegistered) return reply(ind.noregis()) 1185 | if (!isPrem) return reply(ind.premon(pushname)) 1186 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1187 | if (args.length < 1) return reply('Urlnya mana um?') 1188 | if(!isUrl(args[0]) && !args[0].includes('youtu')) return reply(ind.wrogf()) 1189 | anu = await fetchJson(`https://docs-jojo.herokuapp.com/api/ytmp3?url=${args[0]}`, {method: 'get'}) 1190 | if (anu.error) return reply(anu.error) 1191 | teks = `*Title* : ${anu.title}\n*Size* : ${anu.filesize}` 1192 | thumb = await getBuffer(anu.thumb) 1193 | client.sendMessage(from, thumb, image, {quoted: mek, caption: teks}) 1194 | buffer = await getBuffer(anu.result) 1195 | client.sendMessage(from, buffer, audio, {mimetype: 'audio/mp4', filename: `${anu.title}.mp3`, quoted: mek}) 1196 | await limitAdd(sender) 1197 | break 1198 | case 'text3d': 1199 | if (!isRegistered) return reply(ind.noregis()) 1200 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1201 | if (args.length < 1) return reply('teksnya mana kak?') 1202 | teks = `${body.slice(8)}` 1203 | if (teks.length > 10) return client.sendMessage(from, 'Teksnya kepanjangan, Maksimal 10 kalimat', text, {quoted: mek}) 1204 | buff = await getBuffer(`https://docs-jojo.herokuapp.com/api/text3d?text=${teks}`, {method: 'get'}) 1205 | client.sendMessage(from, buff, image, {quoted: mek, caption: `${teks}`}) 1206 | await limitAdd(sender) 1207 | break 1208 | case 'fototiktok': 1209 | if (!isRegistered) return reply(ind.noregis()) 1210 | if (!isPrem) return reply(ind.premon(pushname)) 1211 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1212 | gatauda = body.slice(12) 1213 | anu = await fetchJson(`https://docs-jojo.herokuapp.com/api/tiktokpp?user=${gatauda}` , {method: 'get'}) 1214 | buff = await getBuffer(anu.result) 1215 | reply(buff) 1216 | await limitAdd(sender) 1217 | break 1218 | //mhazria 1219 | case 'resepmasakan': 1220 | if (!isRegistered) return reply(ind.noregis()) 1221 | anu = await fetchJson(`https://mnazria.herokuapp.com/api/resep?key=${body.slice(14)}`, {method: 'get'}) 1222 | if (anu.error) return reply(anu.error) 1223 | buff = await getBuffer(anu.thumb_item) 1224 | hasil = `*title* \n ${anu.title} *item_name* \n ${anu.item_name} *ingredient* \n${anu.ingredient} *step* \n${anu.step}` 1225 | client.sendMessage(from, buff, image, {quoted: mek, caption: hasil}) 1226 | await limitAdd(sender) 1227 | break 1228 | case 'ssweb': 1229 | if (!isRegistered) return reply(ind.noregis()) 1230 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1231 | if (args.length < 1) return reply('Urlnya mana om') 1232 | teks = body.slice(7) 1233 | reply(ind.wait()) 1234 | anu = await fetchJson(`https://mnazria.herokuapp.com/api/screenshotweb?url=${teks}`) 1235 | buff = await getBuffer(anu.gambar) 1236 | client.sendMessage(from, buff, image, {quoted: mek}) 1237 | await limitAdd(sender) 1238 | break 1239 | case 'map': 1240 | if (!isRegistered) return reply(ind.noregis()) 1241 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1242 | anu = await fetchJson(`https://mnazria.herokuapp.com/api/maps?search=${body.slice(5)}`, {method: 'get'}) 1243 | buffer = await getBuffer(anu.gambar) 1244 | client.sendMessage(from, buffer, image, {quoted: mek, caption: `${body.slice(5)}`}) 1245 | await limitAdd(sender) 1246 | break 1247 | case 'kbbi': 1248 | if (!isRegistered) return reply(ind.noregis()) 1249 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1250 | if (args.length < 1) return reply('Apa yang mau dicari um?') 1251 | anu = await fetchJson(`https://mnazria.herokuapp.com/api/kbbi?search=${body.slice(6)}`, {method: 'get'}) 1252 | reply('Menurut Kbbi:\n\n'+anu.result) 1253 | await limitAdd(sender) 1254 | break 1255 | case 'artinama': 1256 | if (!isRegistered) return reply(ind.noregis()) 1257 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1258 | if (args.length < 1) return reply('Apa yang mau dicari um?') 1259 | anu = await fetchJson(`https://mnazria.herokuapp.com/api/arti?nama=${body.slice(10)}`, {method: 'get'}) 1260 | reply('Menurut nama:\n\n'+anu.result) 1261 | await limitAdd(sender) 1262 | break 1263 | //auto respond 1264 | case 'ping': 1265 | if (!isRegistered) return reply(ind.noregis()) 1266 | await client.sendMessage(from, `Pong!!!!\nSpeed: ${processTime(time, moment())} _Second_`) 1267 | break 1268 | case 'help': 1269 | case 'menu': 1270 | if (!isRegistered) return reply(ind.noregis()) 1271 | const reqXp = 5000 * (Math.pow(2, getLevelingLevel(sender)) - 1) 1272 | const uangku = checkATMuser(sender) 1273 | //const anos = client.user.os_version 1274 | //const merek = clien 1275 | await costum(ind.menu(pushname, prefix, getLevelingLevel, getLevelingXp, sender, reqXp, _registered, uangku, role, premi, client, process,kyun), text, tescuk, cr) 1276 | break 1277 | case 'info': 1278 | me = client.user 1279 | uptime = process.uptime() 1280 | teks = `*Nama bot* : ${me.name}\n*OWNER* : *AMPIBI*\n*AUTHOR* : AMPIBI\n*Nomor Bot* : @${me.jid.split('@')[0]}\n*Prefix* : ${prefix}\n*Total Block Contact* : ${blocked.length}\n*The bot is active on* : ${kyun(uptime)}` 1281 | buffer = await getBuffer(me.imgUrl) 1282 | client.sendMessage(from, buffer, image, {caption: teks, contextInfo:{mentionedJid: [me.jid]}}) 1283 | break 1284 | case 'blocklist': 1285 | teks = '𝗕𝗟𝗢𝗖𝗞 𝗟𝗜𝗦𝗧 :\n' 1286 | for (let block of blocked) { 1287 | teks += `┣➢ @${block.split('@')[0]}\n` 1288 | } 1289 | teks += `𝗧𝗼𝘁𝗮𝗹 : ${blocked.length}` 1290 | client.sendMessage(from, teks.trim(), extendedText, {quoted: mek, contextInfo: {"mentionedJid": blocked}}) 1291 | break 1292 | case 'donasi': 1293 | case 'donate': 1294 | if (!isRegistered) return reply(ind.noregis()) 1295 | client.sendMessage(from, donasi(), text) 1296 | break 1297 | case 'admin': 1298 | case 'owner': 1299 | case 'creator': 1300 | client.sendMessage(from, {displayname: "Jeff", vcard: vcard}, MessageType.contact, { quoted: mek}) 1301 | client.sendMessage(from, 'Tuh nomer owner ku >_<, jangan spam atau ku block kamu',MessageType.text, { quoted: mek} ) 1302 | break 1303 | case 'leaderboard': 1304 | case 'lb': 1305 | bo = args[0] 1306 | _level.sort((a, b) => (a.xp < b.xp) ? 1 : -1) 1307 | uang.sort((a, b) => (a.uang < b.uang) ? 1 : -1) 1308 | let leaderboardlvl = '-----[ *LEADERBOARD LEVEL* ]----\n\n' 1309 | let leaderboarduang = '-----[ *LEADERBOARD UANG* ]----\n\n' 1310 | let nom = 0 1311 | try { 1312 | for (let i = 0; i < 10; i++) { 1313 | nom++ 1314 | leaderboardlvl += `*[${nom}]* wa.me/${_level[i].id.replace('@s.whatsapp.net', '')}\n┗⊱ *XP*: ${_level[i].xp} *Level*: ${_level[i].level}\n` 1315 | leaderboarduang += `*[${nom}]* wa.me/${uang[i].id.replace('@s.whatsapp.net', '')}\n┣⊱ *Uang*: _Rp${uang[i].uang}_\n┗⊱ *Limit*: ${limitawal - _limit[i].limit}\n` 1316 | } 1317 | await reply(leaderboardlvl) 1318 | await reply(leaderboarduang) 1319 | } catch (err) { 1320 | console.error(err) 1321 | await reply(`minimal ${len} user untuk bisa mengakses database`) 1322 | } 1323 | break 1324 | case 'limit': 1325 | if (!isRegistered) return reply(ind.noregis()) 1326 | checkLimit(sender) 1327 | break 1328 | case 'giftlimit': 1329 | if (!isOwner,!isPrem) return reply(ind.premon(pushname)) 1330 | const nomerr = args[0].replace('@','') 1331 | const jmla = args[1] 1332 | if (jmla <= 1) return reply(`minimal gift limit adalah 1`) 1333 | if (isNaN(jmla)) return reply(`limit harus berupa angka`) 1334 | if (!nomerr) return reply(`maaf format salah\nmasukan parameter yang benar\ncontoh : ${prefix}giftlimit @62895710074883 20`) 1335 | const cysz = nomerr + '@s.whatsapp.net' 1336 | var found = false 1337 | Object.keys(_limit).forEach((i) => { 1338 | if(_limit[i].id === cysz){ 1339 | found = i 1340 | } 1341 | }) 1342 | if (found !== false) { 1343 | _limit[found].limit -= jmla 1344 | const updated = _limit[found] 1345 | const result = `Gift kuota limit sukses dengan SN: ${createSerial(8)} pada ${moment().format('DD/MM/YY HH:mm:ss')} 1346 | *「 GIFT KUOTA LIMIT 」* 1347 | 1348 | • User : @${updated.id.replace('@s.whatsapp.net','')} 1349 | • Limit: ${limitawal-updated.limit}` 1350 | console.log(_limit[found]) 1351 | fs.writeFileSync('./database/user/limit.json',JSON.stringify(_limit)); 1352 | reply(result) 1353 | } else { 1354 | reply(`Maaf, nomor ${nomerr} tidak terdaftar di database!`) 1355 | } 1356 | break 1357 | case 'premlist': 1358 | case 'listprem': 1359 | if (!isRegistered) return reply( ind.noregis()) 1360 | let listPremi = '「 *PREMIUM USER LIST* 」\n\n' 1361 | let nomorList = 0 1362 | const deret = getAllPremiumUser() 1363 | const arrayPremi = [] 1364 | for (let i = 0; i < deret.length; i++) { 1365 | const checkExp = ms(getPremiumExpired(deret[i]) - Date.now()) 1366 | arrayPremi.push(getAllPremiumUser()[i]) 1367 | nomorList++ 1368 | listPremi += `${nomorList}. wa.me/${getAllPremiumUser()[i].split("@")[0]}\n➸ *Expired*: ${checkExp.days} day(s) ${checkExp.hours} hour(s) ${checkExp.minutes} minute(s)\n\n` 1369 | } 1370 | await reply(listPremi) 1371 | break 1372 | case 'mutual': 1373 | if (!isRegistered) return reply( ind.noregis()) 1374 | if (isGroup) return reply( 'Command ini tidak bisa digunakan di dalam grup!') 1375 | anug = getRegisteredRandomId(_registered).replace('@s.whatsapp.net','') 1376 | await reply('Looking for a partner...') 1377 | await reply(`wa.me/${anug}`) 1378 | await reply( `Partner found: 🙉\n*${prefix}next* — find a new partner`) 1379 | break 1380 | case 'next': 1381 | if (!isRegistered) return reply( ind.noregis()) 1382 | if (isGroup) return reply( 'Command ini tidak bisa digunakan di dalam grup!') 1383 | anug = getRegisteredRandomId(_registered).replace('@s.whatsapp.net','') 1384 | await reply('Looking for a partner...') 1385 | await reply(`wa.me/${anug}`) 1386 | await reply( `Partner found: 🙉\n*${prefix}next* — find a new partner`) 1387 | break 1388 | case 'transfer': 1389 | if (!isRegistered) return reply(ind.noregis()) 1390 | if (!q.includes('|')) return reply(ind.wrongf()) 1391 | const tujuan = q.substring(0, q.indexOf('|') - 1) 1392 | const jumblah = q.substring(q.lastIndexOf('|') + 1) 1393 | if(isNaN(jumblah)) return await reply('jumlah harus berupa angka!!') 1394 | if (jumblah < 100 ) return reply(`minimal transfer 100`) 1395 | if (checkATMuser(sender) < jumblah) return reply(`uang mu tidak mencukupi untuk melakukan transfer`) 1396 | const tujuantf = `${tujuan.replace("@", '')}@s.whatsapp.net` 1397 | fee = 0.005 * jumblah 1398 | hasiltf = jumblah - fee 1399 | addKoinUser(tujuantf, hasiltf) 1400 | confirmATM(sender, jumblah) 1401 | addKoinUser('62895710073737@s.whatsapp.net', fee) 1402 | reply(`*「 SUKSES 」*\n\npengiriman uang telah sukses\ndari : +${sender.split("@")[0]}\nke : +${tujuan}\njumblah transfer : ${jumblah}\npajak : ${fee}`) 1403 | break 1404 | case 'dompet': 1405 | if (!isRegistered) return reply(ind.noregis()) 1406 | const kantong = checkATMuser(sender) 1407 | reply(ind.uangkau(pushname, sender, kantong)) 1408 | break 1409 | case 'buylimit': 1410 | if (!isRegistered) return reply(ind.noregis()) 1411 | payout = body.slice(10) 1412 | if(isNaN(payout)) return await reply('limit harus berupa angka!!') 1413 | const koinPerlimit = 300 1414 | const total = koinPerlimit * payout 1415 | if ( checkATMuser(sender) <= total) return reply(`maaf uang kamu belum mencukupi. silahkan kumpulkan dan beli nanti`) 1416 | if ( checkATMuser(sender) >= total ) { 1417 | confirmATM(sender, total) 1418 | bayarLimit(sender, payout) 1419 | await reply(`*「 PEMBAYARAN BERHASIL 」*\n\n*pengirim* : Admin\n*penerima* : ${pushname}\n*nominal pembelian* : ${payout} \n*harga limit* : ${koinPerlimit}/limit\n*sisa uang mu* : ${checkATMuser(sender)}\n\nproses berhasil dengan nomer pembayaran\n${createSerial(15)}`) 1420 | } 1421 | break 1422 | //no rest api 1423 | case 'slap': 1424 | kapankah = body.slice(1) 1425 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1426 | const slap =['anjing','babi lu','anak anjing','udah tolol nub Lagi','muka lo kek monyet','udah jomblo sendirian lagi dirumah tolol','so so an mau punya pacar muka aja kek monyet lepass dari kandang','ganteng doang di toxic aja dibilang baperan','pantek kau','bangsat kau','ku entod kalian nangis kau','memek lu semua','lihat anak anjing lagi baca','ganteng doang jemput cewe dipanggang','kamu cantik beb bullshit anjing cowo buaya','anak dajjal','puki lu','anjing ngajak gelud','sama hantu takut cupu ngentod','cupu cupu aja gausah bacot','kontol lu semua','bocah lu semua kontol','3 Hari Lagi'] 1427 | const ple = slap[Math.floor(Math.random() * slap.length)] 1428 | pod = await getBuffer(`https://media.giphy.com/media/S8507sBJm1598XnsgD/source.gif`) 1429 | client.sendMessage(from, pod, image, { quoted: mek, caption: '*Toxic*\n\n'+ ple }) 1430 | await limitAdd(sender) 1431 | break 1432 | case 'tampar': 1433 | if (!isRegistered) return reply(ind.noregis()) 1434 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1435 | ranp = getRandom('.gif') 1436 | rano = getRandom('.webp') 1437 | buffer = await getBuffer('https://media.giphy.com/media/S8507sBJm1598XnsgD/source.gif', {method: 'get'}) 1438 | exec(`wget ${buffer.result} -O ${ranp} && ffmpeg -i ${ranp} -vcodec libwebp -filter:v fps=fps=15 -lossless 1 -loop 0 -preset default -an -vsync 0 -s 512:512 ${rano}`, (err) => { 1439 | fs.unlinkSync(ranp) 1440 | if (err) return reply(ind.stikga()) 1441 | buffer = fs.readFileSync(rano) 1442 | client.sendMessage(from, buffer, sticker, {quoted: mek}) 1443 | fs.unlinkSync(rano) 1444 | }) 1445 | await limitAdd(sender) 1446 | break 1447 | case 'brainly': 1448 | if (!isRegistered) return reply(ind.noregis()) 1449 | if (!isPrem) return reply(ind.premon(pushname)) 1450 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1451 | brien = body.slice(9) 1452 | brainly(`${brien}`).then(res => { 1453 | teks = '❉───────────❉\n' 1454 | for (let Y of res.data) { 1455 | teks += `\n*「 _BRAINLY_ 」*\n\n*➸ Pertanyaan:* ${Y.pertanyaan}\n\n*➸ Jawaban:* ${Y.jawaban[0].text}\n❉───────────❉\n` 1456 | } 1457 | client.sendMessage(from, teks, text, {quoted: mek, detectLinks: false}) 1458 | console.log(res) 1459 | }) 1460 | await limitAdd(sender) 1461 | break 1462 | case 'bisakah': 1463 | if (!isRegistered) return reply(ind.noregis()) 1464 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1465 | bisakah = body.slice(1) 1466 | const bisa =['Bisa','Tidak Bisa','Coba Ulangi'] 1467 | const keh = bisa[Math.floor(Math.random() * bisa.length)] 1468 | client.sendMessage(from, 'Pertanyaan : *'+bisakah+'*\n\nJawaban : '+ keh, text, { quoted: mek }) 1469 | await limitAdd(sender) 1470 | break 1471 | case 'kapankah': 1472 | if (!isRegistered) return reply(ind.noregis()) 1473 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1474 | kapankah = body.slice(1) 1475 | const kapan =['Besok','Lusa','Tadi','4 Hari Lagi','5 Hari Lagi','6 Hari Lagi','1 Minggu Lagi','2 Minggu Lagi','3 Minggu Lagi','1 Bulan Lagi','2 Bulan Lagi','3 Bulan Lagi','4 Bulan Lagi','5 Bulan Lagi','6 Bulan Lagi','1 Tahun Lagi','2 Tahun Lagi','3 Tahun Lagi','4 Tahun Lagi','5 Tahun Lagi','6 Tahun Lagi','1 Abad lagi','3 Hari Lagi'] 1476 | const koh = kapan[Math.floor(Math.random() * kapan.length)] 1477 | client.sendMessage(from, 'Pertanyaan : *'+kapankah+'*\n\nJawaban : '+ koh, text, { quoted: mek }) 1478 | await limitAdd(sender) 1479 | break 1480 | case 'apakah': 1481 | if (!isRegistered) return reply(ind.noregis()) 1482 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1483 | apakah = body.slice(1) 1484 | const apa =['Iya','Tidak','Bisa Jadi','Coba Ulangi'] 1485 | const kah = apa[Math.floor(Math.random() * apa.length)] 1486 | client.sendMessage(from, 'Pertanyaan : *'+apakah+'*\n\nJawaban : '+ kah, text, { quoted: mek }) 1487 | await limitAdd(sender) 1488 | break 1489 | case 'rate': 1490 | if (!isRegistered) return reply(ind.noregis()) 1491 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1492 | rate = body.slice(1) 1493 | const ra =['4','9','17','28','34','48','59','62','74','83','97','100','29','94','75','82','41','39'] 1494 | const te = ra[Math.floor(Math.random() * ra.length)] 1495 | client.sendMessage(from, 'Pertanyaan : *'+rate+'*\n\nJawaban : '+ te+'%', text, { quoted: mek }) 1496 | await limitAdd(sender) 1497 | break 1498 | case 'truth': 1499 | if (!isRegistered) return reply(ind.noregis()) 1500 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1501 | const trut =['Pernah suka sama siapa aja? berapa lama?','Kalau boleh atau kalau mau, di gc/luar gc siapa yang akan kamu jadikan sahabat?(boleh beda/sma jenis)','apa ketakutan terbesar kamu?','pernah suka sama orang dan merasa orang itu suka sama kamu juga?','Siapa nama mantan pacar teman mu yang pernah kamu sukai diam diam?','pernah gak nyuri uang nyokap atau bokap? Alesanya?','hal yang bikin seneng pas lu lagi sedih apa','pernah cinta bertepuk sebelah tangan? kalo pernah sama siapa? rasanya gimana brou?','pernah jadi selingkuhan orang?','hal yang paling ditakutin','siapa orang yang paling berpengaruh kepada kehidupanmu','hal membanggakan apa yang kamu dapatkan di tahun ini','siapa orang yang bisa membuatmu sange','siapa orang yang pernah buatmu sange','(bgi yg muslim) pernah ga solat seharian?','Siapa yang paling mendekati tipe pasangan idealmu di sini','suka mabar(main bareng)sama siapa?','pernah nolak orang? alasannya kenapa?','Sebutkan kejadian yang bikin kamu sakit hati yang masih di inget','pencapaian yang udah didapet apa aja ditahun ini?','kebiasaan terburuk lo pas di sekolah apa?'] 1502 | const ttrth = trut[Math.floor(Math.random() * trut.length)] 1503 | truteh = await getBuffer(`https://i.ibb.co/305yt26/bf84f20635dedd5dde31e7e5b6983ae9.jpg`) 1504 | client.sendMessage(from, truteh, image, { caption: '*Truth*\n\n'+ ttrth, quoted: mek }) 1505 | await limitAdd(sender) 1506 | break 1507 | case 'dare': 1508 | if (!isRegistered) return reply(ind.noregis()) 1509 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1510 | const dare =['Kirim pesan ke mantan kamu dan bilang "aku masih suka sama kamu','telfon crush/pacar sekarang dan ss ke pemain','pap ke salah satu anggota grup','Bilang "KAMU CANTIK BANGET NGGAK BOHONG" ke cowo','ss recent call whatsapp','drop emot "🦄??" setiap ngetik di gc/pc selama 1 hari','kirim voice note bilang can i call u baby?','drop kutipan lagu/quote, terus tag member yang cocok buat kutipan itu','pake foto sule sampe 3 hari','ketik pake bahasa daerah 24 jam','ganti nama menjadi "gue anak lucinta luna" selama 5 jam','chat ke kontak wa urutan sesuai %batre kamu, terus bilang ke dia "i lucky to hv you','prank chat mantan dan bilang " i love u, pgn balikan','record voice baca surah al-kautsar','bilang "i hv crush on you, mau jadi pacarku gak?" ke lawan jenis yang terakhir bgt kamu chat (serah di wa/tele), tunggu dia bales, kalo udah ss drop ke sini','sebutkan tipe pacar mu!','snap/post foto pacar/crush','teriak gajelas lalu kirim pake vn kesini','pap mukamu lalu kirim ke salah satu temanmu','kirim fotomu dengan caption, aku anak pungut','teriak pake kata kasar sambil vn trus kirim kesini','teriak " anjimm gabutt anjimmm " di depan rumah mu','ganti nama jadi " BOWO " selama 24 jam','Pura pura kerasukan, contoh : kerasukan maung, kerasukan belalang, kerasukan kulkas, dll'] 1511 | const der = dare[Math.floor(Math.random() * dare.length)] 1512 | tod = await getBuffer(`https://i.ibb.co/305yt26/bf84f20635dedd5dde31e7e5b6983ae9.jpg`) 1513 | client.sendMessage(from, tod, image, { quoted: mek, caption: '*Dare*\n\n'+ der }) 1514 | await limitAdd(sender) 1515 | break 1516 | case 'ocr': 1517 | if (!isRegistered) return reply(ind.noregis()) 1518 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1519 | if ((isMedia && !mek.message.videoMessage || isQuotedImage) && args.length == 0) { 1520 | const encmedia = isQuotedImage ? JSON.parse(JSON.stringify(mek).replace('quotedM','m')).message.extendedTextMessage.contextInfo : mek 1521 | const media = await client.downloadAndSaveMediaMessage(encmedia) 1522 | reply(ind.wait()) 1523 | await recognize(media, {lang: 'eng+ind', oem: 1, psm: 3}) 1524 | .then(teks => { 1525 | reply(teks.trim()) 1526 | fs.unlinkSync(media) 1527 | }) 1528 | .catch(err => { 1529 | reply(err.message) 1530 | fs.unlinkSync(media) 1531 | }) 1532 | } else { 1533 | reply('𝗸𝗶𝗿𝗶𝗺 𝗳𝗼𝘁𝗼 𝗱𝗲𝗻??𝗮?? 𝗰𝗲𝗽𝘁𝗶𝗼𝗻 ${prefix}??𝗰𝗿') 1534 | } 1535 | await limitAdd(sender) 1536 | break 1537 | case 's': 1538 | case 'stiker': 1539 | case 'sticker': 1540 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1541 | await limitAdd(sender) 1542 | if ((isMedia && !mek.message.videoMessage || isQuotedImage) && args.length == 0) { 1543 | const encmedia = isQuotedImage ? JSON.parse(JSON.stringify(mek).replace('quotedM','m')).message.extendedTextMessage.contextInfo : mek 1544 | const media = await client.downloadAndSaveMediaMessage(encmedia) 1545 | ran = getRandom('.webp') 1546 | await ffmpeg(`./${media}`) 1547 | .input(media) 1548 | .on('start', function (cmd) { 1549 | console.log(`Started : ${cmd}`) 1550 | }) 1551 | .on('error', function (err) { 1552 | console.log(`Error : ${err}`) 1553 | fs.unlinkSync(media) 1554 | reply(ind.stikga) 1555 | }) 1556 | .on('end', function () { 1557 | console.log('Finish') 1558 | exec(`webpmux -set exif ${addMetadata(namo, ator)} ${ran} -o ${ran}`, async (error) => { 1559 | //if (error) { 1560 | // reply(ind.stikga()) 1561 | // fs.unlinkSync(media) 1562 | // fs.unlinkSync(ran) 1563 | // } 1564 | client.sendMessage(from, fs.readFileSync(ran), sticker, {quoted: mek}) 1565 | fs.unlinkSync(media) 1566 | fs.unlinkSync(ran) 1567 | }) 1568 | }) 1569 | .addOutputOptions([`-vcodec`,`libwebp`,`-vf`,`scale='min(320,iw)':min'(320,ih)':force_original_aspect_ratio=decrease,fps=15, pad=320:320:-1:-1:color=white@0.0, split [a][b]; [a] palettegen=reserve_transparent=on:transparency_color=ffffff [p]; [b][p] paletteuse`]) 1570 | .toFormat('webp') 1571 | .save(ran) 1572 | } else if ((isMedia && mek.message.videoMessage.seconds < 11 || isQuotedVideo && mek.message.extendedTextMessage.contextInfo.quotedMessage.videoMessage.seconds < 11) && args.length == 0) { 1573 | const encmedia = isQuotedVideo ? JSON.parse(JSON.stringify(mek).replace('quotedM','m')).message.extendedTextMessage.contextInfo : mek 1574 | const media = await client.downloadAndSaveMediaMessage(encmedia) 1575 | ran = getRandom('.webp') 1576 | reply(ind.wait()) 1577 | await ffmpeg(`./${media}`) 1578 | .inputFormat(media.split('.')[1]) 1579 | .on('start', function (cmd) { 1580 | console.log(`Started : ${cmd}`) 1581 | }) 1582 | .on('error', function (err) { 1583 | console.log(`Error : ${err}`) 1584 | fs.unlinkSync(media) 1585 | tipe = media.endsWith('.mp4') ? 'video' : 'gif' 1586 | reply(`❌ Gagal, pada saat mengkonversi ${tipe} ke stiker`) 1587 | }) 1588 | .on('end', function () { 1589 | console.log('Finish') 1590 | exec(`webpmux -set exif ${addMetadata(namo, ator)} ${ran} -o ${ran}`, async (error) => { 1591 | //if (error) { 1592 | // reply(ind.stikga()) 1593 | // fs.unlinkSync(media) 1594 | // fs.unlinkSync(ran) 1595 | // } 1596 | client.sendMessage(from, fs.readFileSync(ran), sticker, {quoted: mek}) 1597 | fs.unlinkSync(media) 1598 | fs.unlinkSync(ran) 1599 | }) 1600 | }) 1601 | .addOutputOptions([`-vcodec`,`libwebp`,`-vf`,`scale='min(320,iw)':min'(320,ih)':force_original_aspect_ratio=decrease,fps=15, pad=320:320:-1:-1:color=white@0.0, split [a][b]; [a] palettegen=reserve_transparent=on:transparency_color=ffffff [p]; [b][p] paletteuse`]) 1602 | .toFormat('webp') 1603 | .save(ran) 1604 | } else { 1605 | reply(`Kirim gambar dengan caption ${prefix}sticker atau tag gambar yang sudah dikirim`) 1606 | } 1607 | break 1608 | case 'tts': 1609 | if (!isRegistered) return reply(ind.noregis()) 1610 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1611 | if (args.length < 1) return client.sendMessage(from, 'Diperlukan kode bahasa!!', text, {quoted: mek}) 1612 | const gtts = require('./lib/gtts')(args[0]) 1613 | if (args.length < 2) return client.sendMessage(from, 'Textnya mana om', text, {quoted: mek}) 1614 | dtt = body.slice(8) 1615 | ranm = getRandom('.mp3') 1616 | rano = getRandom('.ogg') 1617 | dtt.length > 600 1618 | ? reply('Textnya kebanyakan om') 1619 | : gtts.save(ranm, dtt, function() { 1620 | exec(`ffmpeg -i ${ranm} -ar 48000 -vn -c:a libopus ${rano}`, (err) => { 1621 | fs.unlinkSync(ranm) 1622 | buffer = fs.readFileSync(rano) 1623 | if (err) return reply('Gagal om:(') 1624 | client.sendMessage(from, buffer, audio, {quoted: mek, ptt:true}) 1625 | fs.unlinkSync(rano) 1626 | }) 1627 | }) 1628 | await limitAdd(sender) 1629 | break 1630 | case 'simi': 1631 | if (args.length < 1) return reply('Textnya mana um?') 1632 | teks = body.slice(5) 1633 | anu = await simih(teks) 1634 | reply(anu) 1635 | break 1636 | case 'toimg': 1637 | if (!isRegistered) return reply(ind.noregis()) 1638 | if (!isQuotedSticker) return reply('𝗥𝗲𝗽𝗹𝘆/𝘁𝗮𝗴 𝘀𝘁𝗶𝗰𝗸𝗲𝗿 !') 1639 | reply(ind.wait()) 1640 | encmedia = JSON.parse(JSON.stringify(mek).replace('quotedM','m')).message.extendedTextMessage.contextInfo 1641 | media = await client.downloadAndSaveMediaMessage(encmedia) 1642 | ran = getRandom('.png') 1643 | exec(`ffmpeg -i ${media} ${ran}`, (err) => { 1644 | fs.unlinkSync(media) 1645 | if (err) return reply(ind.stikga()) 1646 | buffer = fs.readFileSync(ran) 1647 | client.sendMessage(from, buffer, image, {quoted: mek, caption: '𝗱𝗮?? 𝗷𝗮𝗱𝗶 '}) 1648 | fs.unlinkSync(ran) 1649 | }) 1650 | await limitAdd(sender) 1651 | break 1652 | case 'tiktokstalk': 1653 | if (!isRegistered) return reply(ind.noregis()) 1654 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1655 | try { 1656 | if (args.length < 1) return client.sendMessage(from, '𝘂𝘀𝗲??𝗻𝗮𝗺𝗲 𝗺𝗮𝗻𝗮 ?', text, {quoted: mek}) 1657 | let { user, stats } = await tiktod.getUserProfileInfo(args[0]) 1658 | reply(ind.wait()) 1659 | teks = `*ID* : ${user.id}\n*Username* : ${user.uniqueId}\n*Nickname* : ${user.nickname}\n*Followers* : ${stats.followerCount}\n*Followings* : ${stats.followingCount}\n*Posts* : ${stats.videoCount}\n*Luv* : ${stats.heart}\n` 1660 | buffer = await getBuffer(user.avatarLarger) 1661 | client.sendMessage(from, buffer, image, {quoted: mek, caption: teks}) 1662 | } catch (e) { 1663 | console.log(`Error :`, color(e,'red')) 1664 | reply('[??𝗥𝗥𝗢??] 𝗸𝗲𝗺𝘂𝗻𝗴𝗸𝗶𝗻𝗮𝗻 𝘂𝘀𝗲𝗿𝗻𝗮𝗺?? 𝘁𝗶𝗱𝗮𝗸 𝘃𝗮𝗹𝗶??') 1665 | } 1666 | await limitAdd(sender) 1667 | break 1668 | //group feature 1669 | case 'hidetag': 1670 | if (!isRegistered) return reply(ind.noregis()) 1671 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1672 | if (!isGroup) return reply(ind.groupo()) 1673 | if (!isGroupAdmins) return reply(ind.admin()) 1674 | var value = body.slice(9) 1675 | var group = await client.groupMetadata(from) 1676 | var member = group['participants'] 1677 | var mem = [] 1678 | member.map( async adm => { 1679 | mem.push(adm.id.replace('c.us', 's.whatsapp.net')) 1680 | }) 1681 | var options = { 1682 | text: value, 1683 | contextInfo: { mentionedJid: mem }, 1684 | quoted: mek 1685 | } 1686 | client.sendMessage(from, options, text) 1687 | await limitAdd(sender) 1688 | break 1689 | case 'add': 1690 | if (!isGroup) return reply(ind.groupo()) 1691 | if (!isGroupAdmins) return reply(ind.admin()) 1692 | if (!isBotGroupAdmins) return reply(ind.badmin()) 1693 | if (args.length < 1) return reply('Yang mau di add jin ya?') 1694 | if (args[0].startsWith('08')) return reply('Gunakan kode negara mas') 1695 | try { 1696 | num = `${args[0].replace(/ /g, '')}@s.whatsapp.net` 1697 | client.groupAdd(from, [num]) 1698 | } catch (e) { 1699 | console.log('Error :', e) 1700 | reply('Gagal menambahkan target, mungkin karena di private') 1701 | } 1702 | break 1703 | case 'level': 1704 | if (!isRegistered) return reply(ind.noregis()) 1705 | if (!isLevelingOn) return reply(ind.lvlnoon()) 1706 | if (!isGroup) return reply(ind.groupo()) 1707 | const userLevel = getLevelingLevel(sender) 1708 | const userXp = getLevelingXp(sender) 1709 | if (userLevel === undefined && userXp === undefined) return reply(ind.lvlnul()) 1710 | const requiredXp = 5000 * (Math.pow(2, userLevel) - 1) 1711 | resul = `┏━━❉ *LEVEL* ❉━━\n┣⊱ *Nama* : ${pushname}\n┣⊱ Nomor : wa.me/${sender.split("@")[0]}\n┣⊱ User XP : ${userXp}/${requiredXp}\n┣⊱ User Level : ${userLevel}\n┗━━━━━━━━━━━━` 1712 | costum(resul, text, tescuk, per) 1713 | break 1714 | case 'mining': 1715 | if (!isRegistered) return reply(ind.noregis()) 1716 | if (isLimit(sender)) return reply(ind.limitend(pushname)) 1717 | if (!isEventon) return reply(`maaf ${pushname} event mining tidak di aktifkan oleh owner`) 1718 | if (isOwner) { 1719 | const one = 999999999 1720 | addLevelingXp(sender, one) 1721 | addLevelingLevel(sender, 99) 1722 | reply(`karena anda owner kami dari team bot mengirim ${one}Xp untuk anda`) 1723 | }else{ 1724 | const mining = Math.ceil(Math.random() * 10000) 1725 | addLevelingXp(sender, mining) 1726 | await reply(`*selamat* ${pushname} kamu mendapatkan *${mining}Xp*`) 1727 | } 1728 | await limitAdd(sender) 1729 | break 1730 | case 'grup': 1731 | case 'group': 1732 | if (!isGroup) return reply(ind.groupo()) 1733 | if (!isGroupAdmins) return reply(ind.admin()) 1734 | if (!isBotGroupAdmins) return reply(ind.badmin()) 1735 | if (args[0] === 'buka') { 1736 | reply(`*BERHASIL MEMBUKA GROUP*`) 1737 | client.groupSettingChange(from, GroupSettingChange.messageSend, false) 1738 | } else if (args[0] === 'tutup') { 1739 | reply(`*BERHASIL MENUTUP GROUP`) 1740 | client.groupSettingChange(from, GroupSettingChange.messageSend, true) 1741 | } 1742 | break 1743 | case 'setname': 1744 | if (!isGroup) return reply(ind.groupo()) 1745 | if (!isGroupAdmins) return reply(ind.admin()) 1746 | if (!isBotGroupAdmins) return reply(ind.badmin()) 1747 | client.groupUpdateSubject(from, `${body.slice(9)}`) 1748 | client.sendMessage(from, 'Succes, Ganti Nama Grup', text, {quoted: mek}) 1749 | break 1750 | case 'setdesc': 1751 | if (!isGroup) return reply(ind.groupo()) 1752 | if (!isGroupAdmins) return reply(ind.admin()) 1753 | if (!isBotGroupAdmins) return reply(ind.badmin()) 1754 | client.groupUpdateDescription(from, `${body.slice(9)}`) 1755 | client.sendMessage(from, 'Succes, Ganti Deskripsi Grup', text, {quoted: mek}) 1756 | break 1757 | case 'demote': 1758 | if (!isGroup) return reply(ind.groupo()) 1759 | if (!isGroupAdmins) return reply(ind.admin()) 1760 | if (!isBotGroupAdmins) return reply(ind.badmin()) 1761 | if (mek.message.extendedTextMessage === undefined || mek.message.extendedTextMessage === null) return reply('𝗧𝗮𝗴 𝘁𝗮𝗿𝗴𝗲𝘁 ??𝗮𝗻?? ??𝗻𝗴??𝗻 𝗱𝗶 𝘁𝗲𝗻𝗱𝗮𝗻𝗴!') 1762 | mentioned = mek.message.extendedTextMessage.contextInfo.mentionedJid 1763 | if (mentioned.length > 1) { 1764 | teks = '' 1765 | for (let _ of mentioned) { 1766 | teks += `*jabatan kamu di copot*🏃 :\n` 1767 | teks += `@_.split('@')[0]` 1768 | } 1769 | mentions(teks, mentioned, true) 1770 | client.groupDemoteAdmin(from, mentioned) 1771 | } else { 1772 | mentions(`𝘆𝗮𝗵𝗵 @${mentioned[0].split('@')[0]} 𝗷𝗮??𝗮??𝗮𝗻 𝗮𝗱𝗺𝗶𝗻 𝗸𝗮𝗺𝘂 𝘀??𝗱𝗮𝗵 𝗱𝗶 𝗰𝗼𝗽𝗼𝘁🏃`, mentioned, true) 1773 | client.groupDemoteAdmin(from, mentioned) 1774 | } 1775 | break 1776 | case 'promote': 1777 | if (!isGroup) return reply(ind.groupo()) 1778 | if (!isGroupAdmins) return reply(ind.admin()) 1779 | if (!isBotGroupAdmins) return reply(ind.badmin()) 1780 | if (mek.message.extendedTextMessage === undefined || mek.message.extendedTextMessage === null) return reply('𝗧𝗮𝗴 ??𝗮??𝗴𝗲𝘁 𝘆𝗮𝗻𝗴 𝗶𝗻??𝗶𝗻 𝗱𝗶 ??????𝗱𝗮𝗻𝗴!') 1781 | mentioned = mek.message.extendedTextMessage.contextInfo.mentionedJid 1782 | if (mentioned.length > 1) { 1783 | teks = '' 1784 | for (let _ of mentioned) { 1785 | teks += `𝗦𝗲𝗹𝗮𝗺𝗮𝘁🥳 𝗮𝗻𝗱𝗮 𝗻𝗮𝗶𝗸 𝗺𝗲𝗻𝗷𝗮𝗱𝗶 𝗮𝗱𝗺𝗶𝗻 𝗴𝗿𝗼𝘂𝗽 (+_+) :\n` 1786 | teks += `@_.split('@')[0]` 1787 | } 1788 | mentions(teks, mentioned, true) 1789 | client.groupMakeAdmin(from, mentioned) 1790 | } else { 1791 | mentions(`𝗦𝗲𝗹𝗮𝗺𝗮𝘁🥳 @${mentioned[0].split('@')[0]} *anda naik menjadi admin group* (+_+)`, mentioned, true) 1792 | client.groupMakeAdmin(from, mentioned) 1793 | } 1794 | break 1795 | case 'kick': 1796 | if (!isGroup) return reply(ind.groupo()) 1797 | if (!isGroupAdmins) return reply(ind.admin()) 1798 | if (!isBotGroupAdmins) return reply(ind.badmin()) 1799 | if (mek.message.extendedTextMessage === undefined || mek.message.extendedTextMessage === null) return reply('𝗧𝗮𝗴 𝘁𝗮𝗿𝗴𝗲𝘁 ??𝗮𝗻𝗴 𝗶𝗻𝗴𝗶𝗻 𝗱?? 𝘁𝗲𝗻𝗱𝗮𝗻𝗴!') 1800 | mentioned = mek.message.extendedTextMessage.contextInfo.mentionedJid 1801 | if (mentioned.length > 1) { 1802 | teks = '' 1803 | for (let _ of mentioned) { 1804 | teks += `𝗔𝘀𝗲𝗸 𝗱𝗮𝗽𝗮𝘁 𝗺𝗮𝗸𝗮𝗻𝗮𝗻,𝗼𝘁𝘄 𝗸𝗶𝗰𝗸 🏃 :\n` 1805 | teks += `@_.split('@')[0]` 1806 | } 1807 | mentions(teks, mentioned, true) 1808 | client.groupRemove(from, mentioned) 1809 | } else { 1810 | mentions(`??𝘀𝗲𝗸 ????𝗽𝗮𝘁 𝗺𝗮𝗸𝗮??𝗮𝗻,𝗼𝘁𝘄 𝗸𝗶??𝗸 @${mentioned[0].split('@')[0]} ??`, mentioned, true) 1811 | client.groupRemove(from, mentioned) 1812 | } 1813 | break 1814 | case 'listadmin': 1815 | if (!isGroup) return reply(ind.groupo()) 1816 | teks = `𝗟𝗶𝘀𝘁 𝗮𝗱𝗺𝗶𝗻 𝗼𝗳 𝗴𝗿𝗼𝘂𝗽 *${groupMetadata.subject}*\n𝗧𝗼𝘁𝗮𝗹 : ${groupAdmins.length}\n\n` 1817 | no = 0 1818 | for (let admon of groupAdmins) { 1819 | no += 1 1820 | teks += `[${no.toString()}] @${admon.split('@')[0]}\n` 1821 | } 1822 | mentions(teks, groupAdmins, true) 1823 | break 1824 | case 'welcome': 1825 | if (!isGroup) return reply(ind.groupo()) 1826 | if (!isGroupAdmins) return reply(ind.admin()) 1827 | if (args.length < 1) return reply('Boo :𝘃') 1828 | if (Number(args[0]) === 1) { 1829 | if (isWelkom) return reply('*SUDAH AKTIF* !!!') 1830 | welkom.push(from) 1831 | fs.writeFileSync('./database/bot/welkom.json', JSON.stringify(welkom)) 1832 | reply('❬ 𝗦𝗨𝗞𝗦𝗘𝗦 ❭ 𝗠𝗲𝗻𝗴𝗮𝗸𝘁𝗶𝗳𝗸𝗮𝗻 𝗳𝗶𝘁𝘂𝗿 𝘄𝗲𝗹𝗰𝗼𝗺𝗲/𝗹𝗲𝗳𝘁 𝗱𝗶 𝗴𝗿𝗼𝘂𝗽 𝗶𝗻𝗶️') 1833 | } else if (Number(args[0]) === 0) { 1834 | welkom.splice(from, 1) 1835 | fs.writeFileSync('./database/bot/welkom.json', JSON.stringify(welkom)) 1836 | reply('❬ 𝗦𝗨𝗞𝗦𝗘𝗦 ❭ 𝗠𝗲𝗻𝗼𝗻𝗮𝗸𝘁𝗶𝗳𝗸𝗮𝗻 𝗳𝗶𝘁𝘂𝗿 𝘄𝗲𝗹𝗰𝗼??𝗲/𝗹𝗲𝗳𝘁 𝗱𝗶 𝗴𝗿𝗼𝘂𝗽 𝗶𝗻𝗶️') 1837 | } else { 1838 | reply(ind.satukos()) 1839 | } 1840 | break 1841 | case 'simih': 1842 | if (!isGroup) return reply(ind.groupo()) 1843 | if (!isGroupAdmins) return reply(ind.admin()) 1844 | if (args.length < 1) return reply('Boo :𝘃') 1845 | if (Number(args[0]) === 1) { 1846 | if (isSimi) return reply('𝘀𝘂𝗱𝗮𝗵 𝗮𝗸𝘁𝗶𝗳 !!!') 1847 | samih.push(from) 1848 | fs.writeFileSync('./database/bot/simi.json', JSON.stringify(samih)) 1849 | reply('❬ 𝗦𝗨𝗞𝗦𝗘𝗦 ❭ 𝗠𝗲𝗻𝗴𝗮??𝘁𝗶𝗳𝗸𝗮𝗻 𝗳𝗶𝘁𝘂𝗿 𝘀𝗶𝗺𝗶 𝗱𝗶 𝗴𝗿𝗼𝘂𝗽 𝗶𝗻𝗶️') 1850 | } else if (Number(args[0]) === 0) { 1851 | samih.splice(from, 1) 1852 | fs.writeFileSync('./database/bot/simi.json', JSON.stringify(samih)) 1853 | reply('❬ 𝗦𝗨𝗞𝗦𝗘𝗦 ❭ 𝗠𝗲𝗻𝗼𝗻𝗮𝗸𝘁𝗶𝗳𝗸𝗮𝗻 𝗳𝗶𝘁𝘂𝗿 𝘀𝗶𝗺𝗶 𝗱𝗶 𝗴𝗿𝗼𝘂𝗽 𝗶𝗻𝗶️️') 1854 | } else { 1855 | reply(ind.satukos()) 1856 | } 1857 | break 1858 | case 'nsfw': 1859 | if (!isGroup) return reply(ind.groupo()) 1860 | if (!isGroupAdmins) return reply(ind.admin()) 1861 | if (args.length < 1) return reply('Boo :𝘃') 1862 | if (Number(args[0]) === 1) { 1863 | if (isNsfw) return reply(' *sudah aktif* !!') 1864 | nsfw.push(from) 1865 | fs.writeFileSync('./database/bot/nsfw.json', JSON.stringify(nsfw)) 1866 | reply('❬ 𝗦𝗨𝗞𝗦𝗘𝗦 ❭ 𝗠𝗲𝗻𝗴𝗮𝗸𝘁𝗶𝗳𝗸𝗮𝗻 𝗳𝗶𝘁𝘂𝗿 𝗻𝘀𝗳𝘄 𝗱𝗶 𝗴𝗿𝗼𝘂𝗽 𝗶𝗻𝗶') 1867 | } else if (Number(args[0]) === 0) { 1868 | nsfw.splice(from, 1) 1869 | fs.writeFileSync('./database/bot/nsfw.json', JSON.stringify(nsfw)) 1870 | reply('❬ 𝗦𝗨𝗞𝗦𝗘𝗦 ❭ 𝗠𝗲𝗻𝗼??𝗮𝗸𝘁𝗶𝗳𝗸𝗮𝗻 𝗳𝗶𝘁𝘂𝗿 𝗻𝘀𝗳𝘄 𝗱𝗶 ??𝗿𝗼??𝗽 𝗶𝗻𝗶️') 1871 | } else { 1872 | reply(ind.satukos()) 1873 | } 1874 | break 1875 | case 'leveling': 1876 | if (!isGroup) return reply(ind.groupo()) 1877 | if (!isGroupAdmins) return reply(ind.admin()) 1878 | if (args.length < 1) return reply('Boo :??') 1879 | if (args[0] === 'enable') { 1880 | if (isLevelingOn) return reply('*fitur level sudah aktif sebelum nya*') 1881 | _leveling.push(from) 1882 | fs.writeFileSync('./database/group/leveling.json', JSON.stringify(_leveling)) 1883 | reply(ind.lvlon()) 1884 | } else if (args[0] === 'disable') { 1885 | _leveling.splice(from, 1) 1886 | fs.writeFileSync('./database/group/leveling.json', JSON.stringify(_leveling)) 1887 | reply(ind.lvloff()) 1888 | } else { 1889 | reply(ind.satukos()) 1890 | } 1891 | break 1892 | case 'nobadword': 1893 | if (!isGroup) return reply(ind.groupo()) 1894 | if (!isGroupAdmins) return reply(ind.admin()) 1895 | if (args.length < 1) return reply('Boo :??') 1896 | if (args[0] === 'enable') { 1897 | if (isBadWord) return reply('*fitur BadWord sudah aktif sebelum nya*') 1898 | badword.push(from) 1899 | fs.writeFileSync('./database/group/badword.json', JSON.stringify(badword)) 1900 | reply(`badword is enable`) 1901 | } else if (args[0] === 'disable') { 1902 | badword.splice(from, 1) 1903 | fs.writeFileSync('./database/group/badword.json', JSON.stringify(badword)) 1904 | reply(`badword is disable`) 1905 | } else { 1906 | reply(ind.satukos()) 1907 | } 1908 | break 1909 | case 'linkgc': 1910 | if (!isGroup) return reply(ind.groupo()) 1911 | if (isLimit(sender)) return reply(ind.limitend(pusname)) 1912 | if (!isBotGroupAdmins) return reply(ind.badmin()) 1913 | linkgc = await client.groupInviteCode (from) 1914 | yeh = `https://chat.whatsapp.com/${linkgc}\n\nlink Group *${groupName}*` 1915 | client.sendMessage(from, yeh, text, {quoted: mek}) 1916 | await limitAdd(sender) 1917 | break 1918 | case 'tagall': 1919 | if (!isGroup) return reply(ind.groupo()) 1920 | if (!isGroupAdmins) return reply(ind.admin()) 1921 | members_id = [] 1922 | teks = (args.length > 1) ? body.slice(8).trim() : '' 1923 | teks += '\n\n' 1924 | for (let mem of groupMembers) { 1925 | teks += `┣➥ @${mem.jid.split('@')[0]}\n` 1926 | members_id.push(mem.jid) 1927 | } 1928 | mentions(teks, members_id, true) 1929 | break 1930 | case 'delete': 1931 | case 'del': 1932 | case 'd': 1933 | client.deleteMessage(from, { id: mek.message.extendedTextMessage.contextInfo.stanzaId, remoteJid: from, fromMe: true }) 1934 | break 1935 | case 'addbadword': 1936 | if (!isOwner) return reply(ind.ownerb()) 1937 | if (!isGroupAdmins) return reply(ind.admin()) 1938 | if (args.length < 1) return reply( `Kirim perintah ${prefix}addbadword [kata kasar]. contoh ${prefix}addbadword bego`) 1939 | const bw = body.slice(12) 1940 | bad.push(bw) 1941 | fs.writeFileSync('./database/group/bad.json', JSON.stringify(bad)) 1942 | reply('Success Menambahkan Bad Word!') 1943 | break 1944 | case 'delbadword': 1945 | if (!isOwner) return reply(ind.ownerb()) 1946 | if (!isGroupAdmins) return reply(ind.admin()) 1947 | if (args.length < 1) return reply( `Kirim perintah ${prefix}addbadword [kata kasar]. contoh ${prefix}addbadword bego`) 1948 | let dbw = body.slice(12) 1949 | bad.splice(dbw) 1950 | fs.writeFileSync('./database/group/bad.json', JSON.stringify(bad)) 1951 | reply('Success Menghapus BAD WORD!') 1952 | break 1953 | case 'listbadword': 1954 | let lbw = `Ini adalah list BAD WORD\nTotal : ${bad.length}\n` 1955 | for (let i of bad) { 1956 | lbw += `➸ ${i.replace(bad)}\n` 1957 | } 1958 | await reply(lbw) 1959 | break 1960 | 1961 | 1962 | //admin feature 1963 | case 'kickall': 1964 | if (!isOwner) return reply(ind.ownerb()) 1965 | members_id = [] 1966 | teks = (args.length > 1) ? body.slice(8).trim() : '' 1967 | teks += '\n\n' 1968 | for (let mem of groupMembers) { 1969 | teks += `*😘* ${mem.jid.split('@')[0]}\n` 1970 | members_id.push(mem.jid) 1971 | } 1972 | mentions(teks, members_id, true) 1973 | client.groupRemove(from, members_id) 1974 | break 1975 | case 'setreply': 1976 | if (!isOwner) return reply(ind.ownerb()) 1977 | client.updatePresence(from, Presence.composing) 1978 | if (args.length < 1) return 1979 | cr = body.slice(10) 1980 | reply(`reply berhasil di ubah menjadi : ${cr}`) 1981 | await limitAdd(sender) 1982 | break 1983 | case 'clone': 1984 | if (!isGroup) return reply(ind.groupo()) 1985 | if (!isOwner) return reply(ind.ownerg()) 1986 | if (args.length < 1) return reply(' *TAG YANG MAU DI CLONE!!!* ') 1987 | if (mek.message.extendedTextMessage === undefined || mek.message.extendedTextMessage === null) return reply('Tag cvk') 1988 | mentioned = mek.message.extendedTextMessage.contextInfo.mentionedJid[0] 1989 | let { jid, id, notify } = groupMembers.find(x => x.jid === mentioned) 1990 | try { 1991 | pp = await client.getProfilePicture(id) 1992 | buffer = await getBuffer(pp) 1993 | client.updateProfilePicture(botNumber, buffer) 1994 | mentions(`Foto profile Berhasil di perbarui menggunakan foto profile @${id.split('@')[0]}`, [jid], true) 1995 | } catch (e) { 1996 | reply(ind.stikga()) 1997 | } 1998 | break 1999 | case 'event': 2000 | if (!isGroup) return reply(ind.groupo()) 2001 | if (!isOwner) return reply(ind.ownerb()) 2002 | if (args.length < 1) return reply('Boo :𝘃') 2003 | if (Number(args[0]) === 1) { 2004 | if (isEventon) return reply('*SUDAH AKTIF* !!!') 2005 | event.push(from) 2006 | fs.writeFileSync('./database/bot/event.json', JSON.stringify(event)) 2007 | reply('*❬ 𝗦𝗨𝗞𝗦𝗘𝗦 ❭ 𝗠𝗲𝗻𝗴𝗮𝗸𝘁𝗶𝗳𝗸𝗮𝗻 EVENT 𝗱𝗶 𝗴𝗿𝗼𝘂𝗽 𝗶𝗻𝗶️*') 2008 | } else if (Number(args[0]) === 0) { 2009 | event.splice(from, 1) 2010 | fs.writeFileSync('./database/bot/event.json', JSON.stringify(event)) 2011 | reply('*❬ 𝗦𝗨𝗞𝗦𝗘𝗦 ❭ 𝗠𝗲𝗻𝗼𝗻𝗮𝗸𝘁??𝗳𝗸??𝗻 EVENT 𝗱𝗶 𝗴𝗿𝗼𝘂𝗽 𝗶𝗻𝗶️*') 2012 | } else { 2013 | reply(ind.satukos()) 2014 | } 2015 | break 2016 | case 'antilink': 2017 | if (!isGroup) return reply(ind.groupo()) 2018 | if (!isGroupAdmins) return reply(ind.ownerg()) 2019 | if (args.length < 1) return reply('Boo :𝘃') 2020 | if (Number(args[0]) === 1) { 2021 | if (isEventon) return reply('*SUDAH AKTIF* !!!') 2022 | antilink.push(from) 2023 | fs.writeFileSync('./database/group/antilink.json', JSON.stringify(antilink)) 2024 | reply('*❬ 𝗦𝗨𝗞𝗦𝗘𝗦 ❭ ACTIVATED ANTILINK*') 2025 | } else if (Number(args[0]) === 0) { 2026 | antilink.splice(from, 1) 2027 | fs.writeFileSync('./database/group/antilink.json', JSON.stringify(antilink)) 2028 | reply('*❬ 𝗦𝗨𝗞𝗦𝗘𝗦 ❭ DEACTIVATED ANTILINK*') 2029 | } else { 2030 | reply(ind.satukos()) 2031 | } 2032 | break 2033 | case 'block': 2034 | client.updatePresence(from, Presence.composing) 2035 | if (!isGroup) return reply(ind.groupo()) 2036 | if (!isOwner) return reply(ind.ownerb()) 2037 | client.blockUser (`${body.slice(8)}@c.us`, "add") 2038 | client.sendMessage(from, `perintah Diterima, memblokir wa.me${body.slice(8)}@c.us`, text) 2039 | break 2040 | case 'unblock': 2041 | client.updatePresence(from, Presence.composing) 2042 | if (!isGroup) return reply(ind.group()) 2043 | if (!isOwner) return reply(ind.ownerb()) 2044 | client.blockUser (`${body.slice(10)}@c.us`, "remove") 2045 | client.sendMessage(from, `perintah Diterima, membuka blokir wa.me/${body.slice(10)}`, text) 2046 | break 2047 | case 'setppbot': 2048 | if (!isOwner) return reply(ind.ownerb()) 2049 | client.updatePresence(from, Presence.composing) 2050 | if (!isQuotedImage) return reply(`Kirim gambar dengan caption ${prefix}setbotpp atau tag gambar yang sudah dikirim`) 2051 | enmedia = JSON.parse(JSON.stringify(mek).replace('quotedM','m')).message.extendedTextMessage.contextInfo 2052 | media = await client.downloadAndSaveMediaMessage(enmedia) 2053 | await client.updateProfilePicture(botNumber, media) 2054 | reply('Makasih profil barunya😗') 2055 | break 2056 | case 'setpp': 2057 | if (!isGroup) return reply(ind.groupo()) 2058 | if (!isGroupAdmins) return reply(ind.admin()) 2059 | if (!isBotGroupAdmins) return reply(ind.badmin()) 2060 | media = await client.downloadAndSaveMediaMessage(mek) 2061 | await client.updateProfilePicture (from, media) 2062 | reply('SUCCESS CHANGE PROFILE GROUP') 2063 | break 2064 | case 'leave': 2065 | if (!isGroup) return reply(ind.groupo()) 2066 | if (!isOwner) return reply(ind.ownerb()) 2067 | await reply(from, 'bye').then(() => client.groupLeave(from)) 2068 | break 2069 | case 'bc': 2070 | if (!isOwner) return reply(ind.ownerb()) 2071 | if (args.length < 1) return reply('.......') 2072 | anu = await client.chats.all() 2073 | if (isMedia && !mek.message.videoMessage || isQuotedImage) { 2074 | const encmedia = isQuotedImage ? JSON.parse(JSON.stringify(mek).replace('quotedM','m')).message.extendedTextMessage.contextInfo : mek 2075 | buff = await client.downloadMediaMessage(encmedia) 2076 | for (let _ of anu) { 2077 | client.sendMessage(_.jid, buff, image, {caption: `❮ 𝙋𝙀𝙎𝘼?? 𝘽??𝙊𝘼𝘿𝘾𝘼𝙎𝙏 ❯\n\n${body.slice(4)}`}) 2078 | } 2079 | reply('𝙨𝙪𝙘𝙘𝙚𝙨𝙨 𝙗𝙧𝙤𝙖𝙙𝙘𝙖𝙨𝙩 ') 2080 | } else { 2081 | for (let _ of anu) { 2082 | sendMess(_.jid, `*「 BROADCAST BOT 」*\n\n${body.slice(4)}`) 2083 | } 2084 | reply('𝙨𝙪𝙘𝙘𝙚𝙨𝙨 𝙗𝙧𝙤𝙖𝙙??𝙖𝙨𝙩 ') 2085 | } 2086 | break 2087 | case 'clearall': 2088 | if (!isOwner) return reply(ind.ownerb()) 2089 | anu = await client.chats.all() 2090 | client.setMaxListeners(25) 2091 | for (let _ of anu) { 2092 | client.deleteChat(_.jid) 2093 | } 2094 | reply(ind.clears()) 2095 | break 2096 | case 'setprefix': 2097 | if (args.length < 1) return 2098 | if (!isOwner) return reply(ind.ownerb()) 2099 | prefix = args[0] 2100 | reply(`Change Prefix To ${prefix} SUCCESS!`) 2101 | break 2102 | case 'setmemlimit': 2103 | if (args.length < 1) return 2104 | if (!isOwner) return reply(ind.ownerb()) 2105 | if (isNaN(args[0])) return reply('limit harus angka') 2106 | memberlimit = args[0] 2107 | reply(`Change Member limit To ${memberlimit} SUCCESS!`) 2108 | break 2109 | case 'bcgc': 2110 | if (!isOwner) return reply(ind.ownerb()) 2111 | if (args.length < 1) return reply('.......') 2112 | anu = await groupMembers 2113 | nom = mek.participant 2114 | if (isMedia && !mek.message.videoMessage || isQuotedImage) { 2115 | const encmedia = isQuotedImage ? JSON.parse(JSON.stringify(mek).replace('quotedM','m')).message.extendedTextMessage.contextInfo : mek 2116 | buff = await client.downloadMediaMessage(encmedia) 2117 | for (let _ of anu) { 2118 | client.sendMessage(_.jid, buff, image, {caption: `*「 BC GROUP 」*\n\nDari Grup : ${groupName}\nPengirim : wa.me/${(sender.split('@')[0])}\nPesan : ${body.slice(6)}`}) 2119 | } 2120 | reply('') 2121 | } else { 2122 | for (let _ of anu) { 2123 | sendMess(_.jid, `*「 BC GROUP 」*\n\nDari Grup : ${groupName}\nPengirim : wa.me/${(sender.split('@')[0])}\nPesan : ${body.slice(6)}`) 2124 | } 2125 | reply('Sukses broadcast group') 2126 | } 2127 | break 2128 | case 'addprem': 2129 | if (!isOwner) return reply(ind.ownerb()) 2130 | expired = "30d" 2131 | if (args.length < 1 ) return reply(' tag member') 2132 | mente = `${args[0].replace('@','')}@s.whatsapp.net` 2133 | const pnom = {id: mente , expired: Date.now() + toMs(expired) } 2134 | prem.push(pnom) 2135 | fs.writeFileSync('./database/user/prem.json',JSON.stringify(prem)) 2136 | reply(ind.premadd(args[0])) 2137 | break 2138 | 2139 | case 'delprem': 2140 | if (!isOwner) return reply(ind.ownerb()) 2141 | if (args.length < 1 ) return reply(' tag member') 2142 | mente = `${args[0].replace('@','')}@s.whatsapp.net` 2143 | for( var i = 0; i < arr.length; i++){ 2144 | if ( arr[i] === mente) { 2145 | arr.splice(i, 1); 2146 | i--; 2147 | fs.writeFileSync('./database/user/prem.json',JSON.stringify(arr)) 2148 | } 2149 | } 2150 | reply(ind.dellprem(args[0])) 2151 | break 2152 | case 'eval': 2153 | if (!isOwner) return reply(ind.ownerb()) 2154 | if (!q) return reply(ind.wrongf()) 2155 | try { 2156 | let evaled = await eval(q) 2157 | if (typeof evaled !== 'string') evaled = require('util').inspect(evaled) 2158 | await reply(evaled) 2159 | // client.sendMessage(from, JSON.stringify(eval(body.slice(6))). text) 2160 | } catch (err) { 2161 | console.error(err) 2162 | await reply('Error!') 2163 | } 2164 | break 2165 | case 'listonline': 2166 | if (!isOwner) return reply(ind.ownerb()) 2167 | let ido = args && /\d+\-\d+@g.us/.test(args[0]) ? args[0] : from 2168 | let online = [...Object.keys(client.chats.get(ido).presences), client.user.jid] 2169 | client.sendMessage(from, 'List Online:\n' + online.map(v => '- @' + v.replace(/@.+/, '')).join`\n`, text, { quoted: mek, 2170 | contextInfo: { mentionedJid: online } 2171 | }) 2172 | break 2173 | case '=>': 2174 | const cmd = body.slice(4) 2175 | exec(cmd, (err, stdout) => { 2176 | if (err) return client.sendMessage(from, `root@Nfz.01:~ ${err}`, text, { quoted: mek }) 2177 | if (stdout) { 2178 | client.sendMessage(from, stdout, text) 2179 | } 2180 | }) 2181 | break 2182 | //tools 2183 | case 'tomp3': 2184 | client.updatePresence(from, Presence.composing) 2185 | if (!isQuotedVideo) return reply('itu video bruh?:V') 2186 | reply(ind.wait()) 2187 | encmedia = JSON.parse(JSON.stringify(mek).replace('quotedM', 'm')).message.extendedTextMessage.contextInfo 2188 | media = await client.downloadAndSaveMediaMessage(encmedia) 2189 | ran = getRandom('.mp4') 2190 | exec(`ffmpeg -i ${media} ${ran}`, (err) => { 2191 | fs.unlinkSync(media) 2192 | if (err) return reply('Yahh emrror bruh:(') 2193 | buffer = fs.readFileSync(ran) 2194 | client.sendMessage(from, buffer, audio, { mimetype: 'audio/mp4', quoted: mek }) 2195 | fs.unlinkSync(ran) 2196 | }) 2197 | break 2198 | case 'slowmo': 2199 | if (!isRegistered) return reply(ind.noregis()) 2200 | encmedia = JSON.parse(JSON.stringify(mek).replace('quotedM','m')).message.extendedTextMessage.contextInfo 2201 | media = await client.downloadAndSaveMediaMessage(encmedia) 2202 | ran = getRandom('.mp3') 2203 | exec(`ffmpeg -i ${media} -filter:a "atempo=0.7,asetrate=44100" ${ran}`, (err, stderr, stdout) => { 2204 | fs.unlinkSync(media) 2205 | if (err) return reply('Error!') 2206 | uhh = fs.readFileSync(ran) 2207 | client.sendMessage(from, uhh, audio, {mimetype: 'audio/mp4', ptt:true, quoted: mek}) 2208 | fs.unlinkSync(ran) 2209 | }) 2210 | break 2211 | 2212 | case 'tupai': 2213 | if (!isRegistered) return reply(ind.noregis()) 2214 | encmedia = JSON.parse(JSON.stringify(mek).replace('quotedM','m')).message.extendedTextMessage.contextInfo 2215 | media = await client.downloadAndSaveMediaMessage(encmedia) 2216 | ran = getRandom('.mp3') 2217 | exec(`ffmpeg -i ${media} -filter:a "atempo=0.5,asetrate=65100" ${ran}`, (err, stderr, stdout) => { 2218 | fs.unlinkSync(media) 2219 | if (err) return reply('Error!') 2220 | hah = fs.readFileSync(ran) 2221 | client.sendMessage(from, hah, audio, {mimetype: 'audio/mp4', ptt:true, quoted: mek}) 2222 | fs.unlinkSync(ran) 2223 | }) 2224 | break 2225 | case 'gemok': 2226 | if (!isRegistered) return reply(ind.noregis()) 2227 | encmedia = JSON.parse(JSON.stringify(mek).replace('quotedM','m')).message.extendedTextMessage.contextInfo 2228 | media = await client.downloadAndSaveMediaMessage(encmedia) 2229 | ran = getRandom('.mp3') 2230 | exec(`ffmpeg -i ${media} -filter:a "atempo=1.6,asetrate=22100" ${ran}`, (err, stderr, stdout) => { 2231 | fs.unlinkSync(media) 2232 | if (err) return reply('Error!') 2233 | hah = fs.readFileSync(ran) 2234 | client.sendMessage(from, hah, audio, {mimetype: 'audio/mp4', ptt:true, quoted: mek}) 2235 | fs.unlinkSync(ran) 2236 | }) 2237 | break 2238 | case 'bass': 2239 | if (!isRegistered) return reply(ind.noregis()) 2240 | encmedia = JSON.parse(JSON.stringify(mek).replace('quotedM','m')).message.extendedTextMessage.contextInfo 2241 | media = await client.downloadAndSaveMediaMessage(encmedia) 2242 | ran = getRandom('.mp3') 2243 | exec(`ffmpeg -i ${media} -af equalizer=f=94:width_type=o:width=2:g=30 ${ran}`, (err, stderr, stdout) => { 2244 | fs.unlinkSync(media) 2245 | if (err) return reply('Error!') 2246 | hah = fs.readFileSync(ran) 2247 | client.sendMessage(from, hah, audio, {mimetype: 'audio/mp4', ptt:true, quoted: mek}) 2248 | fs.unlinkSync(ran) 2249 | }) 2250 | break 2251 | case 'getsticker': 2252 | case 'gets': 2253 | if (!isRegistered) return reply(ind.noregis()) 2254 | namastc = body.slice(12) 2255 | result = fs.readFileSync(`./strg/sticker/${namastc}.webp`) 2256 | client.sendMessage(from, result, sticker, {quoted :mek}) 2257 | break 2258 | case 'stickerlist': 2259 | case 'liststicker': 2260 | if (!isRegistered) return reply(ind.noregis()) 2261 | teks = '*Sticker List :*\n\n' 2262 | for (let awokwkwk of setiker) { 2263 | teks += `- ${awokwkwk}\n` 2264 | } 2265 | teks += `\n*Total : ${setiker.length}*` 2266 | client.sendMessage(from, teks.trim(), extendedText, { quoted: mek, contextInfo: { "mentionedJid": setiker } }) 2267 | break 2268 | case 'addsticker': 2269 | if (!isRegistered) return reply(ind.noregis()) 2270 | if (!isQuotedSticker) return reply('Reply stiker nya') 2271 | svst = body.slice(12) 2272 | if (!svst) return reply('Nama sticker nya apa?') 2273 | boij = JSON.parse(JSON.stringify(mek).replace('quotedM', 'm')).message.extendedTextMessage.contextInfo 2274 | delb = await client.downloadMediaMessage(boij) 2275 | setiker.push(`${svst}`) 2276 | fs.writeFileSync(`./strg/sticker/${svst}.webp`, delb) 2277 | fs.writeFileSync(`./strg/stik.json`, JSON.stringify(setiker)) 2278 | client.sendMessage(from, `Sukses Menambahkan Sticker\nCek dengan cara ${prefix}liststicker`, MessageType.text, { quoted: mek }) 2279 | break 2280 | case 'addvn': 2281 | if (!isRegistered) return reply(ind.noregis()) 2282 | if (!isQuotedAudio) return reply('Reply vnnya blokk!') 2283 | svst = body.slice(7) 2284 | if (!svst) return reply('Nama audionya apa su?') 2285 | boij = JSON.parse(JSON.stringify(mek).replace('quotedM', 'm')).message.extendedTextMessage.contextInfo 2286 | delb = await client.downloadMediaMessage(boij) 2287 | audionye.push(`${svst}`) 2288 | fs.writeFileSync(`./strg/audio/${svst}.mp3`, delb) 2289 | fs.writeFileSync('./strg/audio.json', JSON.stringify(audionye)) 2290 | client.sendMessage(from, `Sukses Menambahkan Video\nCek dengan cara ${prefix}listvn`, MessageType.text, { quoted: mek }) 2291 | break 2292 | case 'getvn': 2293 | if (!isRegistered) return reply(ind.noregis()) 2294 | namastc = body.slice(7) 2295 | buffer = fs.readFileSync(`./strg/audio/${namastc}.mp3`) 2296 | client.sendMessage(from, buffer, audio, { mimetype: 'audio/mp4', quoted: mek, ptt: true }) 2297 | break 2298 | case 'listvn': 2299 | case 'vnlist': 2300 | if (!isRegistered) return reply(ind.noregis()) 2301 | teks = '*List Vn:*\n\n' 2302 | for (let awokwkwk of audionye) { 2303 | teks += `- ${awokwkwk}\n` 2304 | } 2305 | teks += `\n*Total : ${audionye.length}*` 2306 | client.sendMessage(from, teks.trim(), extendedText, { quoted: mek, contextInfo: { "mentionedJid": audionye } }) 2307 | break 2308 | case 'addimage': 2309 | if (!isRegistered) return reply(ind.noregis()) 2310 | if (!isQuotedImage) return reply('Reply imagenya blokk!') 2311 | svst = body.slice(10) 2312 | if (!svst) return reply('Nama imagenya apa su?') 2313 | boij = JSON.parse(JSON.stringify(mek).replace('quotedM', 'm')).message.extendedTextMessage.contextInfo 2314 | delb = await client.downloadMediaMessage(boij) 2315 | imagenye.push(`${svst}`) 2316 | fs.writeFileSync(`./strg/image/${svst}.jpeg`, delb) 2317 | fs.writeFileSync('./strg/image.json', JSON.stringify(imagenye)) 2318 | client.sendMessage(from, `Sukses Menambahkan Video\nCek dengan cara ${prefix}listimage`, MessageType.text, { quoted: mek }) 2319 | break 2320 | case 'getimage': 2321 | if (!isRegistered) return reply(ind.noregis()) 2322 | namastc = body.slice(10) 2323 | buffer = fs.readFileSync(`./strg/image/${namastc}.jpeg`) 2324 | client.sendMessage(from, buffer, image, { quoted: mek, caption: `Result From Database : ${namastc}.jpeg` }) 2325 | break 2326 | case 'imagelist': 2327 | case 'listimage': 2328 | if (!isRegistered) return reply(ind.noregis()) 2329 | teks = '*List Image :*\n\n' 2330 | for (let awokwkwk of imagenye) { 2331 | teks += `- ${awokwkwk}\n` 2332 | } 2333 | teks += `\n*Total : ${imagenye.length}*` 2334 | client.sendMessage(from, teks.trim(), extendedText, { quoted: mek, contextInfo: { "mentionedJid": imagenye } }) 2335 | break 2336 | case 'addvideo': 2337 | if (!isRegistered) return reply(ind.noregis()) 2338 | if (!isQuotedVideo) return reply('Reply videonya blokk!') 2339 | svst = body.slice(10) 2340 | if (!svst) return reply('Nama videonya apa su?') 2341 | boij = JSON.parse(JSON.stringify(mek).replace('quotedM', 'm')).message.extendedTextMessage.contextInfo 2342 | delb = await client.downloadMediaMessage(boij) 2343 | videonye.push(`${svst}`) 2344 | fs.writeFileSync(`./strg/video/${svst}.mp4`, delb) 2345 | fs.writeFileSync('./strg/video.json', JSON.stringify(videonye)) 2346 | client.sendMessage(from, `Sukses Menambahkan Video\nCek dengan cara ${prefix}listvideo`, MessageType.text, { quoted: mek }) 2347 | break 2348 | case 'getvideo': 2349 | if (!isRegistered) return reply(ind.noregis()) 2350 | namastc = body.slice(10) 2351 | buffer = fs.readFileSync(`./strg/video/${namastc}.mp4`) 2352 | client.sendMessage(from, buffer, video, { mimetype: 'video/mp4', quoted: mek }) 2353 | break 2354 | case 'listvideo': 2355 | case 'videolist': 2356 | if (!isRegistered) return reply(ind.noregis()) 2357 | teks = '*List Video :*\n\n' 2358 | for (let awokwkwk of videonye) { 2359 | teks += `- ${awokwkwk}\n` 2360 | } 2361 | teks += `\n*Total : ${videonye.length}*` 2362 | client.sendMessage(from, teks.trim(), extendedText, { quoted: mek, contextInfo: { "mentionedJid": videonye } }) 2363 | break 2364 | 2365 | default: 2366 | if (body.startsWith(`${prefix}${command}`)) { 2367 | reply(`Maaf *${pushname}*, Command *${prefix}${command}* Tidak Terdaftar Di Dalam *${prefix}menu*!`) 2368 | } 2369 | if (/^>/.test(pes)) { 2370 | let txt = pes.replace(/^>/, '') 2371 | let type = Function 2372 | if (/await/.test(pes)) type = (async () => {}).constructor 2373 | let func = new type('print', 'client', 'MessageType', 'mek', 'text', 'from', 'image', 'os', 'fetch', txt) 2374 | console.log('[EvalF]', func.toString()) 2375 | let output 2376 | try { 2377 | output = await func((...args) => { 2378 | console.log('[EvalP]', ...args) 2379 | client.sendMessage(from, util.format(...args), MessageType.extendedText, { 2380 | quoted: mek 2381 | }) 2382 | }, client, MessageType, mek, text, from, await image, os, fetch) 2383 | console.log('[EvalO]', output) 2384 | client.sendMessage(from, util.format(output), MessageType.extendedText, { 2385 | quoted: mek 2386 | }) 2387 | } catch (e) { 2388 | console.error('[EvalE]', e) 2389 | client.sendMessage(from, util.format(e), MessageType.extendedText, { 2390 | quoted: mek 2391 | }) 2392 | } 2393 | } 2394 | if (isGroup && !isCmd && isSimi && budy != undefined) { 2395 | console.log(budy) 2396 | muehe = await simih(budy) 2397 | reply(ind.cmdnf(prefix, command)) 2398 | } else { 2399 | console.log(color('[ERROR]','red'), 'Unregistered Command from', color(sender.split('@')[0])) 2400 | } 2401 | } 2402 | } catch (e) { 2403 | console.log('Error : %s', color(e, 'red')) 2404 | } 2405 | }) 2406 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | apt-get update 4 | apt-get upgrade 5 | apt-get install nodejs 6 | apt-get install libwebp 7 | apt-get install mc 8 | apt-get install ffmpeg 9 | apt-get install wget 10 | apt-get install tesseract 11 | wget -O ~/../usr/share/tessdata/ind.traineddata "https://github.com/tesseract-ocr/tessdata/blob/master/ind.traineddata?raw=true" 12 | npm install 13 | 14 | echo "[*] All dependencies have been installed, please run the command \"npm start\" to immediately start the script" 15 | -------------------------------------------------------------------------------- /language/P: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/ind.js: -------------------------------------------------------------------------------- 1 | const a = '```' 2 | 3 | exports.wait = () => { 4 | return`*「 WAIT 」 SEDANG PROSES*` 5 | } 6 | 7 | exports.succes = () => { 8 | return`*「 SUCCES 」*` 9 | } 10 | 11 | exports.lvlon = () => { 12 | return`*「 ENABLE 」 LEVELING*` 13 | } 14 | 15 | exports.lvloff = () => { 16 | return`*「 DISABLE 」 LEVELING*` 17 | } 18 | 19 | exports.lvlnul = () => { 20 | return`*LEVELMU MASIH KOSONG*` 21 | } 22 | 23 | exports.lvlnoon = () => { 24 | return`*LEVEL DI GRUB BELUM DI AKTIFKAN*` 25 | } 26 | 27 | exports.noregis = () => { 28 | return`*「 BELUM DAFTAR 」*\n\n*cara daftar ${prefix}daftar nama|umur* \n*contoh ${prefix}daftar affis|17*` 29 | } 30 | 31 | exports.rediregis = () => { 32 | return`*「 SUDAH DAFTAR 」*\n\n*kamu sudah terdaftar di database bot*` 33 | } 34 | 35 | exports.stikga = () => { 36 | return`*yah gagal coba ulangi beberapa saat lagi*` 37 | } 38 | 39 | exports.linkga = () => { 40 | return`*maaf link tidak valid*` 41 | } 42 | 43 | exports.groupo = () => { 44 | return`*「GROUP ONLY」*` 45 | } 46 | 47 | exports.ownerb = () => { 48 | return`*「OWNER BOT ONLY」*` 49 | } 50 | 51 | exports.ownerg = () => { 52 | return`*「OWNER GROUP ONLY」*` 53 | } 54 | 55 | exports.admin = () => { 56 | return`*「ADMIN GROUP ONLY」*` 57 | } 58 | 59 | exports.badmin = () => { 60 | return`*「BOT HARUS JADI ADMIN」*` 61 | } 62 | 63 | exports.nsfwoff = () => { 64 | return`*NSFW GAK AKTIF*` 65 | } 66 | 67 | exports.bug = () => { 68 | return`*Masalah telah di laporkan ke owner BOT, laporan palsu/main2 tidak akan ditanggapi*` 69 | } 70 | 71 | exports.wrongf = () => { 72 | return`*format salah/text kosong*` 73 | } 74 | 75 | exports.clears = () => { 76 | return`*clear all Success*` 77 | } 78 | 79 | exports.pc = () => { 80 | return`*「 REGISTRASI 」*\n\nuntuk mengetahui apa kamu sudah terdaftar silahkah check message yang saya kirim \n\nNOTE:\n*jika kamu belum mendapatkan pesan. berarti kamu belum menyimpan nomer bot*` 81 | } 82 | 83 | exports.registered = (namaUser, umurUser, serialUser, time, sender) => { 84 | return`*「 DATA NEGARA 」*\n\nkamu sudah terdaftar dengan data \n\n┏━⊱nama\n┗⊱${namaUser}\n┏━⊱nomer\n┗⊱wa.me/${sender.split("@")[0]}\n┏━⊱umur\n┗⊱${umurUser}\n┏━⊱waktu pendaftaran\n┗⊱${time}\n\n┏━❉ *NS* ❉━\n┣⊱${serialUser}\n┗⊱NOTE : jangan sampai lupa nomer ini karena ini penting:v` 85 | } 86 | 87 | exports.cmdnf = (prefix, command) => { 88 | return`command *${prefix}${command}* tidak di temukan\coba tulis *${prefix}menu*` 89 | } 90 | 91 | exports.owneresce = (pushname) => { 92 | return`*maaf tapi ${pushname} bukan owner script*` 93 | } 94 | 95 | exports.reglevelaha = (command, pushname, getLevelingLevel, sender, aha) => { 96 | return`*Maaf ${pushname} level mu belum mencukupi*\n\n*┏⊱level mu : ${getLevelingLevel(sender)}*\n*┣⊱jenis command : ${command}*\n*┗⊱syarat level : ${aha}*\n\n_NOTE : CHAT/SELALU ON UNTUK MENDAPATKAN XP_` 97 | } 98 | 99 | exports.reglevelahb = (command, pushname, getLevelingLevel, sender, ahb) => { 100 | return`*Maaf ${pushname} level mu belum mencukupi*\n\n*┏⊱level mu : ${getLevelingLevel(sender)}*\n*┣⊱jenis command : ${command}*\n*┗⊱syarat level : ${ahb}*\n\n_NOTE : CHAT/SELALU ON UNTUK MENDAPATKAN XP_` 101 | } 102 | 103 | exports.reglevelahc = (command, pushname, getLevelingLevel, sender, ahc) => { 104 | return`*Maaf ${pushname} level mu belum mencukupi*\n\n*┏⊱level mu : ${getLevelingLevel(sender)}*\n*┣⊱jenis command : ${command}*\n*┗⊱syarat level : ${ahc}*\n\n_NOTE : CHAT/SELALU ON UNTUK MENDAPATKAN XP_` 105 | } 106 | 107 | exports.reglevelahd = (command, pushname, getLevelingLevel, sender, ahd) => { 108 | return`*Maaf ${pushname} level mu belum mencukupi*\n\n*┏⊱level mu : ${getLevelingLevel(sender)}*\n*┣⊱jenis command : ${command}*\n*┗⊱syarat level : ${ahd}*\n\n_NOTE : CHAT/SELALU ON UNTUK MENDAPATKAN XP_` 109 | } 110 | 111 | exports.reglevelahe = (command, pushname, getLevelingLevel, sender, ahe) => { 112 | return`*Maaf ${pushname} level mu belum mencukupi*\n\n*┏⊱level mu : ${getLevelingLevel(sender)}*\n*┣⊱jenis command : ${command}*\n*┗⊱syarat level : ${ahe}*\n\n_NOTE : CHAT/SELALU ON UNTUK MENDAPATKAN XP_` 113 | } 114 | 115 | exports.reglevelahf = (command, pushname, getLevelingLevel, sender, ahf) => { 116 | return`*Maaf ${pushname} level mu belum mencukupi*\n\n*┏⊱level mu : ${getLevelingLevel(sender)}*\n*┣⊱jenis command : ${command}*\n*┗⊱syarat level : ${ahf}*\n\n_NOTE : CHAT/SELALU ON UNTUK MENDAPATKAN XP_` 117 | } 118 | 119 | exports.menu = (pushname, prefix, getLevelingLevel, getLevelingXp, sender, reqXp, _registered, uangku, role, premi, client , process) => { 120 | return ` 121 | ${a}❏ ABOUT USER${a} 122 | ${a}│ Nama : ${pushname}${a} 123 | ${a}│ Premium :${a} ${premi} 124 | ${a}│ Nomer : wa.me/${sender.split("@")[0]}${a} 125 | ${a}│ Uang mu : Rp${uangku}${a} 126 | ${a}│ XP : ${getLevelingXp(sender)}/${reqXp} ${a} 127 | ${a}│ Level : ${getLevelingLevel(sender)}${a} 128 | ${a}│ Role : ${role}${a} 129 | ${a}╰ User register : ${_registered.length}${a} 130 | 131 | *${prefix}info* 132 | *${prefix}donasi* 133 | *${prefix}owner* 134 | 135 | ${a}❏MAKER MENU${a} 136 | ${a}│•${prefix}sticker${a} 137 | ${a}│•${prefix}quotemaker${a} 138 | ${a}│•${prefix}qrcode${a} 139 | ${a}│•${prefix}nulis${a} 140 | ${a}│•${prefix}tahta${a} 141 | ${a}╰•${prefix}ttp${a} 142 | 143 | ${a}❏FUN MENU${a} 144 | ${a}│•${prefix}lirik${a} 145 | ${a}│•${prefix}artinama${a} 146 | ${a}│•${prefix}chord${a} 147 | ${a}│•${prefix}bisakah${a} 148 | ${a}│•${prefix}kapankah${a} 149 | ${a}│•${prefix}apakah${a} 150 | ${a}│•${prefix}rate${a} 151 | ${a}│•${prefix}tebakgambar${a} 152 | ${a}│•${prefix}meme${a} 153 | ${a}│•${prefix}textlight${a} 154 | ${a}│•${prefix}glitchtext${a} 155 | ${a}│•${prefix}slap${a} 156 | ${a}│•${prefix}tampar${a} 157 | ${a}│•${prefix}moddroid${a} *[VIP]* 158 | ${a}╰•${prefix}happymod${a} *[VIP]* 159 | 160 | ${a}❏MUTUAL${a} 161 | ${a}│•${prefix}mutual${a} 162 | ${a}╰•${prefix}next${a} 163 | 164 | ${a}❏MEDIA MENU${a} 165 | ${a}│•${prefix}brainly${a} *[VIP]* 166 | ${a}│•${prefix}pinterest${a} 167 | ${a}│•${prefix}resepmasakan${a} 168 | ${a}│•${prefix}igstalk${a} 169 | ${a}│•${prefix}bitly${a} 170 | ${a}│•${prefix}tiktokstalk${a} *[VIP]* 171 | ${a}│•${prefix}ssweb${a} 172 | ${a}╰•${prefix}kbbi${a} 173 | 174 | ${a}❏SONG${a} 175 | ${a}╰•${prefix}joox${a} *[VIP]* 176 | 177 | ${a}❏NSFW${a} 178 | ${a}│•${prefix}anjing${a} 179 | ${a}│•${prefix}blowjob${a} 180 | ${a}│•${prefix}nekonime${a} 181 | ${a}│•${prefix}pokemon${a} 182 | ${a}│•${prefix}husbu${a} 183 | ${a}│•${prefix}nangis${a} 184 | ${a}│•${prefix}cium${a} 185 | ${a}│•${prefix}peluk${a} 186 | ${a}╰•${prefix}ranime${a} 187 | 188 | ${a}❏LIMIT & UANG${a} 189 | ${a}│•${prefix}limit${a} 190 | ${a}│•${prefix}buylimit${a} 191 | ${a}│•${prefix}transfer${a} 192 | ${a}│•${prefix}dompet${a} 193 | ${a}│•${prefix}giftlimit${a} 194 | ${a}╰•${prefix}leaderboard${a} 195 | 196 | ${a}❏GROUP MENU${a} 197 | ${a}│•${prefix}delete${a} 198 | ${a}│•${prefix}hidetag${a} 199 | ${a}│•${prefix}blocklist${a} 200 | ${a}│•${prefix}grouplist${a} 201 | ${a}│•${prefix}level${a} 202 | ${a}│•${prefix}linkgc${a} 203 | ${a}│•${prefix}tagall${a} 204 | ${a}│•${prefix}setpp${a} 205 | ${a}│•${prefix}add${a} 206 | ${a}│•${prefix}kick${a} 207 | ${a}│•${prefix}setname${a} 208 | ${a}│•${prefix}setdesc${a} 209 | ${a}│•${prefix}demote${a} 210 | ${a}│•${prefix}promote${a} 211 | ${a}│•${prefix}listadmin${a} 212 | ${a}│•${prefix}group [buka/tutup]${a} 213 | ${a}│•${prefix}leveling [enable/disable]${a} 214 | ${a}│•${prefix}nsfw [1/0]${a} 215 | ${a}│•${prefix}simih [1/0]${a} 216 | ${a}│•${prefix}welcome [1/0]${a} 217 | ${a}│•${prefix}antilink [1/0]${a} 218 | ${a}╰•${prefix}nobadword [enable/disable]${a} 219 | 220 | ${a}❏TOOLS${a} 221 | ${a}│•${prefix}bass${a} 222 | ${a}│•${prefix}tomp3${a} 223 | ${a}│•${prefix}slowmo${a} 224 | ${a}│•${prefix}gemok${a} 225 | ${a}╰•${prefix}tupai${a} 226 | 227 | ${a}❏CLOUD STORAGE${a} 228 | ${a}│•${prefix}addsticker${a} 229 | ${a}│•${prefix}getsticker${a} 230 | ${a}│•${prefix}stickerlist${a} 231 | ${a}│•${prefix}addvideo${a} 232 | ${a}│•${prefix}getvideo${a} 233 | ${a}│•${prefix}videolist${a} 234 | ${a}│•${prefix}getimage${a} 235 | ${a}│•${prefix}addImage${a} 236 | ${a}│•${prefix}imagelist${a} 237 | ${a}│•${prefix}addaudio${a} 238 | ${a}│•${prefix}getaudio${a} 239 | ${a}╰•${prefix}audiolist${a} 240 | 241 | ${a}❏OWNER MENU${a} 242 | ${a}│•${prefix}bc${a} 243 | ${a}│•${prefix}addbadword${a} 244 | ${a}│•${prefix}delbadword${a} 245 | ${a}│•${prefix}bcgc${a} 246 | ${a}│•${prefix}kickall${a} 247 | ${a}│•${prefix}setreply${a} 248 | ${a}│•${prefix}setprefix${a} 249 | ${a}│•${prefix}clearall${a} 250 | ${a}│•${prefix}block${a} 251 | ${a}│•${prefix}unblock${a} 252 | ${a}│•${prefix}leave${a} 253 | ${a}│•${prefix}event [1/0]${a} 254 | ${a}│•${prefix}clone${a} 255 | ${a}╰•${prefix}setppbot${a} 256 | 257 | ${a}❏ABOUT BOT${a} 258 | ${a}│ • Name : ${client.user.name}${a} 259 | ${a}│ • browser : ${client.browserDescription[1]}${a} 260 | ${a}│ • server : ${client.browserDescription[0]}${a} 261 | ${a}│ • version : ${client.browserDescription[2]}${a} 262 | ${a}│ • speed : ${process.uptime()}${a} 263 | ${a}│ • handphone : ${client.user.phone.device_manufacturer}${a} 264 | ${a}╰ • versi wa : ${client.user.phone.wa_version}${a} 265 | 266 | ${a}❏THANGKS TO${a} 267 | ${a}│${a} 268 | ${a}│ • AFFIS JUNIANTO ${a} 269 | ${a}│ • FADHIL GRAPHY ${a} 270 | ${a}│ • MHANKBARBARS ${a} 271 | ${a}│ • MYBOT TEAM ${a} 272 | ${a}│${a} 273 | ${a}╰ • NOTE : jangan ngemis${a} 274 | ` 275 | } 276 | 277 | exports.levelup = (pushname, sender, getLevelingXp, getLevel, getLevelingLevel, role) => { 278 | return` 279 | 280 | *「 SELAMAT 」* 281 | ┏⊱ *Nama* : ${pushname} 282 | ┣⊱ *Nomer* : wa.me/${sender.split("@")[0]} 283 | ┣⊱ *Xp* : ${getLevelingXp(sender)} 284 | ┣⊱ *Limit* : +3 285 | ┣⊱ *Role*: ${role} 286 | ┗⊱ *Level* : ${getLevel} ⊱ ${getLevelingLevel(sender)} 287 | `} 288 | 289 | exports.limitend = (pushname) => { 290 | return`*maaf ${pushname} limit hari ini habis*\n*beli limit untuk mendapatkan limit/ naik level*` 291 | } 292 | 293 | exports.limitcount = (limitCounts) => { 294 | return` 295 | *「 LIMIT COUNT 」* 296 | sisa limit anda : ${limitCounts} 297 | 298 | NOTE : untuk mendapatkan limit. bisa lewat naik level atau buylimit` 299 | } 300 | 301 | exports.satukos = () => { 302 | return`*Tambah parameter 1/enable atau 0/disable` 303 | } 304 | 305 | exports.uangkau = (pushname, sender, uangkau) => { 306 | return`*┏⊱ 「 ATM 」⊰━┓*\n┣⊱ *Nama* : ${pushname}\n┣⊱ *Nomer* : ${sender.split("@")[0]}\n┣⊱ *Uang* : ${uangkau}\n┗━━━━━━━━━━` 307 | } 308 | 309 | exports.premadd = (pnom) => { 310 | return`*「 PREMIUM ADD 」* 311 | 312 | *Name* : ${pnom} 313 | *Expired* : 30 DAY\n*thank for order premium*` 314 | } 315 | 316 | exports.dellprem = (hnom) => { 317 | return`*「 PREMIUM DELETE 」* 318 | 319 | *Name* : ${hnom} 320 | *Expired* : NOW:v\n*thank for order premium back soon for buying again:D*` 321 | } 322 | 323 | exports.premon = (pushname) => { 324 | return`MAAF ${pushname} ANDA BUKAN USER PREMIUM` 325 | } 326 | 327 | -------------------------------------------------------------------------------- /language/index.js: -------------------------------------------------------------------------------- 1 | exports.ind = require('./ind') -------------------------------------------------------------------------------- /lib/P: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/Zahraaa.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/affisjunianto/botwasapv5/95e98ff3ebd9368f564ea6e898b043473e07b58e/lib/Zahraaa.ttf -------------------------------------------------------------------------------- /lib/color.js: -------------------------------------------------------------------------------- 1 | const chalk = require('chalk') 2 | 3 | const color = (text, color) => { 4 | return !color ? chalk.green(text) : chalk.keyword(color)(text) 5 | } 6 | 7 | const bgcolor = (text, bgcolor) => { 8 | return !bgcolor ? chalk.green(text) : chalk.bgKeyword(bgcolor)(text) 9 | } 10 | 11 | module.exports = { 12 | color, 13 | bgcolor 14 | } 15 | -------------------------------------------------------------------------------- /lib/donasi.js: -------------------------------------------------------------------------------- 1 | const donasi = () => { 2 | return ` 3 | ┏━━━━━━━━━━━━━━━━━━━━ 4 | ┃ 𝗗𝗢𝗡𝗔𝗦𝗜 5 | ┣━━━━━━━━━━━━━━━━━━━━ 6 | ┣━⊱ *DINAI PAGGES ❉⊰━━✿ 7 | ┃ 8 | ┣━⊱ *DANA* 9 | ┣⊱ _+62895710073737_ 10 | ┣━⊱ *PULSA* 11 | ┣⊱ _+6282334297175_ 12 | ┣━⊱ *PAYPAL* 13 | ┣⊱ _affisjunianto25062003@gmail.com_ 14 | ┣━⊱ *TRAKTEER.ID* 15 | ┣⊱ _https://trakteer.id/ampibigaming_ 16 | ┣━⊱ *SAWERIA* 17 | ┣⊱ _https://saweria.co/ampibibot_ 18 | ┗━━━━━━━━━━━━━━━━━━━━` 19 | } 20 | 21 | exports.donasi = donasi -------------------------------------------------------------------------------- /lib/fetcher.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch') 2 | const fs = require('fs') 3 | const util = require('util') 4 | const path = require('path') 5 | const FileType = require('file-type') 6 | const { spawn } = require('child_process') 7 | const { MessageType } = require('@adiwajshing/baileys') 8 | 9 | 10 | exports.getBase64 = getBase64 = async (url) => { 11 | const response = await fetch(url, { headers: { 'User-Agent': 'okhttp/4.5.0' } }); 12 | if (!response.ok) throw new Error(`unexpected response ${response.statusText}`); 13 | const buffer = await response.buffer(); 14 | const videoBase64 = `data:${response.headers.get('content-type')};base64,` + buffer.toString('base64'); 15 | if (buffer) 16 | return videoBase64; 17 | }; 18 | 19 | exports.getBuffer = getBuffer = async (url) => { 20 | const res = await fetch(url, {headers: { 'User-Agent': 'okhttp/4.5.0'}, method: 'GET' }) 21 | const anu = fs.readFileSync('./src/emror.jpg') 22 | if (!res.ok) return { type: 'image/jpeg', result: anu } 23 | const buff = await res.buffer() 24 | if (buff) 25 | return { type: res.headers.get('content-type'), result: buff } 26 | } 27 | 28 | exports.fetchJson = fetchJson = (url, options) => new Promise(async (resolve, reject) => { 29 | fetch(url, options) 30 | .then(response => response.json()) 31 | .then(json => { 32 | // console.log(json) 33 | resolve(json) 34 | }) 35 | .catch((err) => { 36 | reject(err) 37 | }) 38 | }) 39 | 40 | 41 | exports.fetchText = fetchText = (url, options) => new Promise(async (resolve, reject) => { 42 | fetch(url, options) 43 | .then(response => response.text()) 44 | .then(text => { 45 | // console.log(text) 46 | resolve(text) 47 | }) 48 | .catch((err) => { 49 | reject(err) 50 | }) 51 | }) 52 | 53 | 54 | //exports.getBase64 = getBase64; 55 | -------------------------------------------------------------------------------- /lib/functions.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch') 2 | const axios = require('axios') 3 | const cfonts = require('cfonts') 4 | const spin = require('spinnies') 5 | const Crypto = require('crypto') 6 | const { spawn } = require('child_process') 7 | const fs = require('fs') 8 | const path = require('path') 9 | 10 | const wait = async (media) => new Promise(async (resolve, reject) => { 11 | const attachmentData = `data:image/jpeg;base64,${media.toString('base64')}` 12 | const response = await fetch("https://trace.moe/api/search",{method: "POST",body: JSON.stringify({ image: attachmentData }),headers: { "Content-Type": "application/json" }}); 13 | if (!response.ok) reject(`Gambar tidak ditemukan!`); 14 | const result = await response.json() 15 | try { 16 | const { is_adult, title, title_chinese, title_romaji, title_english, episode, season, similarity, filename, at, tokenthumb, anilist_id } = result.docs[0] 17 | let belief = () => similarity < 0.89 ? "Saya memiliki keyakinan rendah dalam hal ini : " : "" 18 | let ecch = () => is_adult ? "Iya" : "Tidak" 19 | resolve({video: await getBuffer(`https://media.trace.moe/video/${anilist_id}/${encodeURIComponent(filename)}?t=${at}&token=${tokenthumb}`), teks: `${belief()} 20 | ~> Ecchi : *${ecch()}* 21 | ~> Judul Jepang : *${title}* 22 | ~> Ejaan Judul : *${title_romaji}* 23 | ~> Judul Inggris : *${title_english}* 24 | ~> Episode : *${episode}* 25 | ~> Season : *${season}*`}); 26 | } catch (e) { 27 | console.log(e) 28 | reject(`Saya tidak tau ini anime apa`) 29 | } 30 | }) 31 | 32 | const simih = async (text) => { 33 | try { 34 | const sami = await fetch(`https://secureapp.simsimi.com/v1/simsimi/talkset?uid=297971048&av=6.9.3.4&lc=id&cc=ID&tz=Asia%2FJakarta&os=a&ak=quS%2FxiW%2Bb8ys5agzpljUdoPdLH8%3D&message_sentence=${text}&normalProb=8&isFilter=1&talkCnt=1&talkCntTotal=1&reqFilter=1&session=nSt8PSSmKRbcR7quUkfhXYpmDYgErtBefVbkkri9CrGSVjm4Cj2e2zBFjvdxSijp56WjyK6g2EWTj3KxKz65DL22&triggerKeywords=%5B%5D`, {method: 'GET'}) 35 | const res = await sami.json() 36 | return res.simsimi_talk_set.answers[0].sentence 37 | } catch { 38 | return 'Simi ga tau apa yang anda ngomong, bahasa alien yah kak?' 39 | } 40 | } 41 | 42 | const h2k = (number) => { 43 | var SI_POSTFIXES = ["", " K", " M", " G", " T", " P", " E"] 44 | var tier = Math.log10(Math.abs(number)) / 3 | 0 45 | if(tier == 0) return number 46 | var postfix = SI_POSTFIXES[tier] 47 | var scale = Math.pow(10, tier * 3) 48 | var scaled = number / scale 49 | var formatted = scaled.toFixed(1) + '' 50 | if (/\.0$/.test(formatted)) 51 | formatted = formatted.substr(0, formatted.length - 2) 52 | return formatted + postfix 53 | } 54 | 55 | const getBuffer = async (url, options) => { 56 | try { 57 | options ? options : {} 58 | const res = await axios({ 59 | method: "get", 60 | url, 61 | headers: { 62 | 'DNT': 1, 63 | 'Upgrade-Insecure-Request': 1 64 | }, 65 | ...options, 66 | responseType: 'arraybuffer' 67 | }) 68 | return res.data 69 | } catch (e) { 70 | console.log(`Error : ${e}`) 71 | } 72 | } 73 | 74 | const randomBytes = (length) => { 75 | return Crypto.randomBytes(length) 76 | } 77 | 78 | const generateMessageID = () => { 79 | return randomBytes(10).toString('hex').toUpperCase() 80 | } 81 | 82 | const getGroupAdmins = (participants) => { 83 | admins = [] 84 | for (let i of participants) { 85 | i.isAdmin ? admins.push(i.jid) : '' 86 | } 87 | return admins 88 | } 89 | 90 | const getRandom = (ext) => { 91 | return `${Math.floor(Math.random() * 10000)}${ext}` 92 | } 93 | 94 | const spinner = { 95 | "interval": 120, 96 | "frames": [ 97 | "🕐", 98 | "🕑", 99 | "🕒", 100 | "🕓", 101 | "🕔", 102 | "🕕", 103 | "🕖", 104 | "🕗", 105 | "🕘", 106 | "🕙", 107 | "🕚", 108 | "🕛" 109 | ]} 110 | 111 | let globalSpinner; 112 | 113 | 114 | const getGlobalSpinner = (disableSpins = false) => { 115 | if(!globalSpinner) globalSpinner = new spin({ color: 'blue', succeedColor: 'green', spinner, disableSpins}); 116 | return globalSpinner; 117 | } 118 | 119 | spins = getGlobalSpinner(false) 120 | 121 | const start = (id, text) => { 122 | spins.add(id, {text: text}) 123 | /*setTimeout(() => { 124 | spins.succeed('load-spin', {text: 'Suksess'}) 125 | }, Number(wait) * 1000)*/ 126 | } 127 | const info = (id, text) => { 128 | spins.update(id, {text: text}) 129 | } 130 | const success = (id, text) => { 131 | spins.succeed(id, {text: text}) 132 | 133 | } 134 | 135 | const close = (id, text) => { 136 | spins.fail(id, {text: text}) 137 | } 138 | 139 | const banner = cfonts.render(('ampibi|ampibi'), { 140 | font: 'chrome', 141 | color: 'candy', 142 | align: 'center', 143 | gradient: ["red","yellow"], 144 | lineHeight: 3 145 | }); 146 | 147 | 148 | 149 | module.exports = { wait, simih, getBuffer, h2k, generateMessageID, getGroupAdmins, getRandom, start, info, success, banner, close} 150 | -------------------------------------------------------------------------------- /lib/gtts.js: -------------------------------------------------------------------------------- 1 | const request = require('request'); 2 | const escapeStringRegexp = require('escape-string-regexp'); 3 | const async = require('async'); 4 | const fs = require('fs'); 5 | const MultiStream = require('multistream'); 6 | const fakeUa = require('fake-useragent'); 7 | 8 | const GOOGLE_TTS_URL = 'http://translate.google.com/translate_tts'; 9 | const MAX_CHARS = 100; 10 | const LANGUAGES = { 11 | 'af': 'Afrikaans', 12 | 'sq': 'Albanian', 13 | 'ar': 'Arabic', 14 | 'hy': 'Armenian', 15 | 'ca': 'Catalan', 16 | 'zh': 'Chinese', 17 | 'zh-cn': 'Chinese (Mandarin/China)', 18 | 'zh-tw': 'Chinese (Mandarin/Taiwan)', 19 | 'zh-yue': 'Chinese (Cantonese)', 20 | 'hr': 'Croatian', 21 | 'cs': 'Czech', 22 | 'da': 'Danish', 23 | 'nl': 'Dutch', 24 | 'en': 'English', 25 | 'en-au': 'English (Australia)', 26 | 'en-uk': 'English (United Kingdom)', 27 | 'en-us': 'English (United States)', 28 | 'eo': 'Esperanto', 29 | 'fi': 'Finnish', 30 | 'fr': 'French', 31 | 'de': 'German', 32 | 'el': 'Greek', 33 | 'ht': 'Haitian Creole', 34 | 'hi': 'Hindi', 35 | 'hu': 'Hungarian', 36 | 'is': 'Icelandic', 37 | 'id': 'Indonesian', 38 | 'it': 'Italian', 39 | 'ja': 'Japanese', 40 | 'ko': 'Korean', 41 | 'la': 'Latin', 42 | 'lv': 'Latvian', 43 | 'mk': 'Macedonian', 44 | 'no': 'Norwegian', 45 | 'pl': 'Polish', 46 | 'pt': 'Portuguese', 47 | 'pt-br': 'Portuguese (Brazil)', 48 | 'ro': 'Romanian', 49 | 'ru': 'Russian', 50 | 'sr': 'Serbian', 51 | 'sk': 'Slovak', 52 | 'es': 'Spanish', 53 | 'es-es': 'Spanish (Spain)', 54 | 'es-us': 'Spanish (United States)', 55 | 'sw': 'Swahili', 56 | 'sv': 'Swedish', 57 | 'ta': 'Tamil', 58 | 'th': 'Thai', 59 | 'tr': 'Turkish', 60 | 'vi': 'Vietnamese', 61 | 'cy': 'Welsh' 62 | } 63 | 64 | function Text2Speech(_lang, _debug) { 65 | var lang = _lang || 'en'; 66 | var debug = _debug || false; 67 | lang = lang.toLowerCase(); 68 | 69 | if (!LANGUAGES[lang]) 70 | throw new Error('Language not supported: ' + lang); 71 | 72 | var getArgs = getArgsFactory(lang); 73 | 74 | return { 75 | tokenize: tokenize, 76 | createServer: (port) => createServer(getArgs, port), 77 | stream: (text) => stream(getArgs, text), 78 | save: (filepath, text, callback) => save(getArgs, filepath, text, callback) 79 | } 80 | } 81 | 82 | function save(getArgs, filepath, text, callback) { 83 | var text_parts = tokenize(text); 84 | var total = text_parts.length; 85 | async.eachSeries(text_parts, function(part, cb) { 86 | var index = text_parts.indexOf(part); 87 | var headers = getHeader(); 88 | var args = getArgs(part, index, total); 89 | var fullUrl = GOOGLE_TTS_URL + args; 90 | 91 | var writeStream = fs.createWriteStream(filepath, { 92 | flags: index > 0 ? 'a' : 'w' 93 | }); 94 | request({ 95 | uri: fullUrl, 96 | headers: headers, 97 | method: 'GET' 98 | }) 99 | .pipe(writeStream); 100 | writeStream.on('finish', cb); 101 | writeStream.on('error', cb); 102 | }, callback); 103 | } 104 | 105 | function stream(getArgs, text) { 106 | var text_parts = tokenize(text); 107 | var total = text_parts.length; 108 | 109 | return MultiStream(text_parts.map(function(part, index) { 110 | var headers = getHeader(); 111 | var args = getArgs(part, index, total); 112 | var fullUrl = GOOGLE_TTS_URL + args 113 | 114 | return request({ 115 | uri: fullUrl, 116 | headers: headers, 117 | method: 'GET' 118 | }); 119 | })); 120 | } 121 | 122 | function getHeader() { 123 | var headers = { 124 | "User-Agent": fakeUa() 125 | }; 126 | //console.log('headers', headers); 127 | return headers; 128 | } 129 | 130 | function getArgsFactory(lang){ 131 | return function (text, index, total) { 132 | var textlen = text.length; 133 | var encodedText = encodeURIComponent(text); 134 | var language = lang || 'en'; 135 | return `?ie=UTF-8&tl=${language}&q=${encodedText}&total=${total}&idx=${index}&client=tw-ob&textlen=${textlen}` 136 | } 137 | } 138 | 139 | function tokenize(text) { 140 | var text_parts = []; 141 | if (!text) 142 | throw new Error('No text to speak'); 143 | 144 | var punc = '¡!()[]¶;|°•—«»≤≥«»‹›\n '; 145 | var punc_list = punc.split('').map(function(char) { 146 | return escapeStringRegexp(char); 147 | }); 148 | 149 | var pattern = punc_list.join('|'); 150 | var parts = text.split(new RegExp(pattern)); 151 | parts = parts.filter(p => p.length > 0); 152 | 153 | var output = []; 154 | var i = 0; 155 | for (let p of parts) { 156 | if (!output[i]) { 157 | output[i] = ''; 158 | } 159 | if (output[i].length + p.length < MAX_CHARS) { 160 | output[i] += ' ' + p; 161 | } else { 162 | i++; 163 | output[i] = p; 164 | } 165 | } 166 | output[0] = output[0].substr(1); 167 | return output; 168 | } 169 | 170 | function createServer(getArgs, port) { 171 | var http = require("http"); 172 | var url = require('url'); 173 | 174 | var server = http.createServer(function(req, res) { 175 | var queryData = url.parse(req.url, true).query; 176 | var argsCallback = getArgs; 177 | if (queryData && queryData.lang && LANGUAGES[queryData.lang]) { 178 | argsCallback = getArgsFactory(queryData.lang); 179 | } 180 | if (queryData && queryData.text) { 181 | res.writeHead(200, {'Content-Type': 'audio/mpeg'}); 182 | stream(argsCallback, queryData.text).pipe(res); 183 | } else { 184 | console.log(req.headers); 185 | res.writeHead(200, {'Content-Type': 'application/json'}); 186 | res.end(JSON.stringify({ 187 | code: -1, 188 | message: `Missing text. Please try: ${req.headers.host}?text=your+text` 189 | })) 190 | } 191 | }); 192 | 193 | server.listen(port); 194 | console.log("Text-to-Speech Server running on " + port); 195 | } 196 | 197 | module.exports = Text2Speech; 198 | -------------------------------------------------------------------------------- /lib/help.js: -------------------------------------------------------------------------------- 1 | 2 | const help = (pushname, prefix, getLevelingLevel, getLevelingXp, sender, reqXp, _registered) => { 3 | return ` 4 | ┏━━❉ *Abour User* ❉━━━┓ 5 | ┣⊱ *nama* : ${pushname} 6 | ┣⊱ *nomer* : wa.me/${sender.split("@")[0]} 7 | ┣⊱ *XP* : ${getLevelingXp(sender)}/${reqXp} 8 | ┣⊱ *level* : ${getLevelingLevel(sender)} 9 | ┣⊱ *user register : ${_registered.length} 10 | ┗━━━━━━━━━━━━━━━━ 11 | 12 | ┏━━❉ *LEVEL 0* ❉━━┓ 13 | ┣⊱ *${prefix}sticker* 14 | ┣⊱ *${prefix}tts* 15 | ┣⊱ *${prefix}toimg* 16 | ┣━━❉ *LEVEL 2* ❉━━ 17 | ┣⊱ *${prefix}ocr* 18 | ┣⊱ *${prefix}quotemaker* 19 | ┣⊱ *${prefix}tiktokstalk* 20 | ┣⊱ *${prefix}fototiktok* 21 | ┣⊱ *${prefix}truth* 22 | ┣⊱ *${prefix}dare* 23 | ┣━━❉ *LEVEL 4* ❉━━ 24 | ┣⊱ *${prefix}text3d* 25 | ┣⊱ *${prefix}bucin* 26 | ┣⊱ *${prefix}hilih* 27 | ┣⊱ *${prefix}persengay* 28 | ┣⊱ *${prefix}ssweb* 29 | ┣━━❉ *LEVEL 6* ❉━━ 30 | ┣⊱ *${prefix}artinama* 31 | ┣⊱ *${prefix}spamcall* 32 | ┣⊱ *${prefix}quotes* 33 | ┣⊱ *${prefix}kbbi* 34 | ┣⊱ *${prefix}map* 35 | ┣⊱ *${prefix}cerpen* 36 | ┣━━❉ *LEVEL 8* ❉━━ 37 | ┣⊱ *${prefix}chord* 38 | ┣⊱ *${prefix}lirik* 39 | ┣⊱ *${prefix}phlogo* 40 | ┣━━❉ *LEVEL 9* ❉━━ 41 | ┣⊱ *${prefix}bisakah* 42 | ┣⊱ *${prefix}apakah* 43 | ┣⊱ *${prefix}kapankah* 44 | ┣⊱ *${prefix}rate* 45 | ┣⊱ *${prefix}owner* 46 | ┗━━━━━━━━━━━━━━ 47 | 48 | ┏━━❉ *Nsfw* ❉━━━━┓ 49 | ┣⊱ *${prefix}waifu* 50 | ┣⊱ *${prefix}anime* 51 | ┣⊱ *${prefix}neko* 52 | ┣⊱ *${prefix}dewabatch* 53 | ┣⊱ *${prefix}pokemon* 54 | ┣⊱ *${prefix}anjing* 55 | ┣⊱ *${prefix}indohot* 56 | ┗━━━━━━━━━━━━━━ 57 | 58 | ┏━━❉ *Group* ❉━━━━┓ 59 | ┣⊱ *${prefix}hidetag* 60 | ┣⊱ *${prefix}linkgc* 61 | ┣⊱ *${prefix}tagall* 62 | ┣⊱ *${prefix}setpp* 63 | ┣⊱ *${prefix}add* 64 | ┣⊱ *${prefix}kick* 65 | ┣⊱ *${prefix}setname* 66 | ┣⊱ *${prefix}setdesc* 67 | ┣⊱ *${prefix}demote* 68 | ┣⊱ *${prefix}promote* 69 | ┣⊱ *${prefix}listadmin* 70 | ┣⊱ *${prefix}group* [buka/tutup] 71 | ┣⊱ *${prefix}leveling* [enable/disable] 72 | ┣⊱ *${prefix}nsfw* [1/0] 73 | ┣⊱ *${prefix}simih* [1/0] 74 | ┣⊱ *${prefix}welcome* [1/0] 75 | ┣━━❉ *Owner* ❉━━ 76 | ┣⊱ *${prefix}bc* 77 | ┣⊱ *${prefix}setprefix* 78 | ┣⊱ *${prefix}getses* 79 | ┣⊱ *${prefix}clearall* 80 | ┣⊱ *${prefix}block* 81 | ┣⊱ *${prefix}unblock* 82 | ┣⊱ *${prefix}leave* 83 | ┣⊱ *${prefix}clone* 84 | ┗━━━━━━━━━━━━━━━━ 85 | ` 86 | } 87 | exports.help = help 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /lib/magernulis1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/affisjunianto/botwasapv5/95e98ff3ebd9368f564ea6e898b043473e07b58e/lib/magernulis1.jpg -------------------------------------------------------------------------------- /lib/ocr.js: -------------------------------------------------------------------------------- 1 | const exec = require("child_process").exec 2 | const log = console.debug 3 | 4 | function recognize(filename, config = {}) { 5 | const options = getOptions(config) 6 | const binary = config.binary || "tesseract" 7 | 8 | const command = [binary, `"${filename}"`, "stdout", ...options].join(" ") 9 | if (config.debug) log("command", command) 10 | 11 | return new Promise((resolve, reject) => { 12 | exec(command, (error, stdout, stderr) => { 13 | if (config.debug) log(stderr) 14 | if (error) reject(error) 15 | resolve(stdout) 16 | }) 17 | }) 18 | } 19 | 20 | function getOptions(config) { 21 | const ocrOptions = ["tessdata-dir", "user-words", "user-patterns", "psm", "oem", "dpi"] 22 | 23 | return Object.entries(config) 24 | .map(([key, value]) => { 25 | if (["debug", "presets", "binary"].includes(key)) return 26 | if (key === "lang") return `-l ${value}` 27 | if (ocrOptions.includes(key)) return `--${key} ${value}` 28 | 29 | return `-c ${key}=${value}` 30 | }) 31 | .concat(config.presets) 32 | .filter(Boolean) 33 | } 34 | 35 | module.exports = { 36 | recognize, 37 | } 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "XBOT", 3 | "version": "1.0.0", 4 | "description": "Xbot for whatsapp online with termux", 5 | "main": "index.js", 6 | "directories": { 7 | "lib": "lib" 8 | }, 9 | "devDependencies": {}, 10 | "scripts": { 11 | "start": "node index", 12 | "play": "nodemon index" 13 | }, 14 | "keywords": [ 15 | "k" 16 | ], 17 | "author": "affis junianto", 18 | "repository": { 19 | "type": "git", 20 | "url": "git+https://github.com/affisjunianto/botwasapv2.git" 21 | }, 22 | "bugs": { 23 | "url": "https://github.com/affisjunianto/botwasapv2/issues" 24 | }, 25 | "homepage": "https://github.com/affisjunianto/botwasapv2/readme", 26 | "license": "ISC", 27 | "dependencies": { 28 | "@adiwajshing/baileys": "^3.3.0", 29 | "async": "^2.4.1", 30 | "axios": "^0.21.0", 31 | "cfonts": "^2.9.0", 32 | "dotenv": "^8.2.0", 33 | "brainly-scraper": "^1.0.3", 34 | "fs-extra": "^9.0.1", 35 | "parse-ms": "^2.1.0", 36 | "escape-string-regexp": "^1.0.5", 37 | "fake-useragent": "^1.0.1", 38 | "fluent-ffmpeg": "^2.1.2", 39 | "got": "^11.8.1", 40 | "ms": "^2.1.3", 41 | "image-to-base64": "^2.1.1", 42 | "moment-timezone": "^0.5.32", 43 | "multistream": "^2.1.0", 44 | "needle": "^2.5.2", 45 | "node-fetch": "^2.6.1", 46 | "node-gtts": "^2.0.2", 47 | "node-tesseract-ocr": "^2.0.0", 48 | "performance-now": "^2.1.0", 49 | "qrcode-terminal": "^0.12.0", 50 | "remove.bg": "^1.3.0", 51 | "request": "^2.81.0", 52 | "spinnies": "^0.5.1", 53 | "tiktok-scraper": "^1.4.7" 54 | } 55 | } -------------------------------------------------------------------------------- /strg/audio.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /strg/audio/@affis_saputro123: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /strg/image.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /strg/image/@affis_saputro123: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /strg/sticker/@affis_saputro123: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /strg/stik.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /strg/video.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /strg/video/@affis_saputro123: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tmp/P: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tmp/file: -------------------------------------------------------------------------------- 1 | 2 | --------------------------------------------------------------------------------