├── 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 |
--------------------------------------------------------------------------------