├── .github └── FUNDING.yml ├── .gitignore ├── HandleMsg.js ├── LICENSE ├── README.md ├── config.json ├── configFile └── hmm.txt ├── database └── index.js ├── desahan ├── Pasti Bangka ngana ko ba jamping jamping anjing anjing banget Viral titktok versi Spongebob.mp3 ├── Prank desahan.mp3 ├── Suara kuntilanak ketawa.mp3 ├── Zelda.mp3 ├── d ├── megumin_last.mp3 ├── onii chan onii chan.mp3 └── onii chan.mp3 ├── halo.java ├── index.js ├── lib ├── 18+.json ├── Insta.js ├── Jsholat.js ├── Lirik.js ├── Toxic.js ├── Ytdl.js ├── brainly.js ├── cekResi.js ├── data │ ├── d │ └── group.json ├── font │ ├── Indie-Flower.ttf │ ├── ObelixProBIt-cyr.ttf │ └── d ├── images.js ├── index.js ├── kbbi.js ├── location.js ├── meme.js ├── menu.js ├── nekopoi.js ├── nsfw.js ├── point.js ├── poll.js ├── premium.js ├── rdt.js ├── resep.js ├── rugaapi.js ├── sewa.js ├── shortener.js └── translate.js ├── media ├── Piyolagu.mp3 ├── an1.ogg ├── an2.ogg ├── ana2.ogg ├── ana3.ogg ├── ana4.ogg ├── aswu.mp4 ├── audio │ └── PIYOGANS.txt ├── azure.png ├── edotensei.mp4 ├── images │ ├── buku │ │ ├── sebelumkanan.jpg │ │ ├── sebelumkiri.jpg │ │ ├── setelahkanan.jpg │ │ └── setelahkiri.jpg │ └── folio │ │ ├── sebelumkanan.jpg │ │ ├── sebelumkiri.jpg │ │ ├── setelahkanan.jpg │ │ └── setelahkiri.jpg ├── iya.mp3 ├── masukin.mp3 ├── mungkin.mp3 ├── ngga.mp3 ├── noBg.png ├── owner.ogg ├── pale.mp3 ├── play2.mp3 ├── pphana.jpg ├── register.png ├── resID.mp3 ├── sticker │ └── d ├── stickergf.gif ├── stickergif.mp4 ├── suit │ ├── batu.png │ ├── gunting.png │ └── kertas.png ├── telat.mp3 ├── tiktok1.mp4 ├── tts.mp3 ├── tutorial.png └── video │ └── d ├── message └── text │ └── lang │ ├── ind.js │ └── index.js ├── package.json ├── settings ├── admin.json ├── afk.json ├── antilink.json ├── antiporn.json ├── antisticker.json ├── api.json ├── autostiker.json ├── bacot.json ├── banned.json ├── biodata.json ├── code15.json ├── code30.json ├── code60.json ├── dare.json ├── easy.json ├── hard.json ├── kuis.json ├── kuismtk.json ├── kuismtkk.json ├── limit.json ├── medium.json ├── mtk.json ├── mtkeasy.json ├── mtkhard.json ├── mtkmedium.json ├── ngegas.json ├── nsfw.json ├── piyo.json ├── point.json ├── premium.json ├── premiumcode.json ├── registered.json ├── reminder.json ├── setting.json ├── sewa.json ├── simi.json ├── stickerspam.json ├── tebakgambar.json ├── truth.json ├── uang.json ├── update.json ├── usermp3.json └── welcome.json ├── temp └── d.txt └── utils ├── d ├── fetcher.js ├── index.js ├── options.js └── stat.json /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: ['https://trakteer.id/piyobot','https://nyawer.co/piyobot','https://www.instagram.com/alvio151/'] 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 IndDev 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | Piyobot 3 | 4 | # Piyobot 5 | 6 | > I am very very bored, give me a task to update or develop this bot? feature suggestions? 7 | 8 |

9 | Piyobot Adalah Bot Whatsapp Pintar Dengan Fitur Yang Berguna Untuk Grup Maupun Pribadi Message 10 |

11 | 12 | 13 | Nomor Whatsapp Bot 14 | 15 | 16 |

Made with ❤️ by

17 |

18 | 19 | 20 | 21 |

22 | 23 |

24 | 25 |

26 | 27 |

28 | 29 | 30 |
31 | 32 | 33 |
34 | 35 | CodeFactor 36 |

37 | 38 |

39 | Persyaratan • 40 | Cara Penginstalan • 41 | Fiturnya • 42 | Terimakasih Kepada • 43 | lisensi 44 |

45 | 46 |

47 | Group Whatsapp 48 |

49 | 50 |

51 | Cara Install 52 |

53 |
54 | 55 | # Requirements 56 | * [Node.js](https://nodejs.org/en/) 57 | * [Git](https://git-scm.com/downloads) 58 | * [FFmpeg](https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z) (for sticker GIF command) 59 | * Any text editor 60 | * [Magisk](https://download.imagemagick.org/ImageMagick/download/binaries/ImageMagick-7.0.11-13-Q16-HDRI-x64-dll.exe) (Buat nuliskanan kiri folio kanan kiri) 61 | * [Tesseract-ocr](https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v5.0.0-alpha.20201127.exe) (Buat Fitur image to text) 62 | * [Python](https://www.python.org/ftp/python/3.9.5/python-3.9.5-amd64.exe) (Buat canvas) 63 | 64 | # installation 65 | ## 📝 Cloning this repo 66 | ```bash 67 | > git clone https://github.com/IndonesianDev/whatsapp-bot 68 | > cd whatsapp-bot 69 | ``` 70 | 71 | ## ✍️ Edit filenya 72 | Edit value yang diperlukan di `settings/setting.json`. 73 | ```json 74 | { 75 | "limitCount": 10, 76 | "ownerNumber": "", 77 | "memberLimit": 10, 78 | "groupLimit": 50, 79 | "medialimitCount": "5", 80 | "prefix": "/", 81 | "vhtearkey": "Your Apikey In Here", 82 | "apikeyz": "Your Apikey In Here", 83 | "lolhuman": "Your Apikey In Here", 84 | "apizeks": "Your Apikey In Here" 85 | } 86 | 87 | ``` 88 | 89 | `ownerBot`: your WhatsApp number. 90 | 91 | `prefix`: bot's prefix. 92 | 93 | `vhtearkey`: VHTear API token. Anda bisa mendapatkannya https://api.vhtear.com/ dengan membeli kunci API Nya dan harga 25k Perbulan. 94 | 95 | `apikeyz`: Hujan Api token. Anda Bisa Mendapatkannya https://hujanapi.xyz silahkan daftar untuk mendapatkan apikey , limit 100/day. 96 | 97 | `lolhuman`: Lolhuman token. Anda bisa Mendapatkannya Di https://lolhuman.herokuapp.com/ silahkan daftar untuk mendapatkan apikey 98 | 99 | `apizeks` : Api vinz token. Anda bisa mendapatkanya di https://zeks.xyz/ silahkan daftar untuk mendapatkan apikey 100 | 101 | Untuk Mendapatkan Apikey nya , daftar akun terlebih dahulu di website tersebut 102 | 103 | ## 🔍 Menginstal dependensi 104 | ```bash 105 | > npm install 106 | ``` 107 | 108 | ## 🆗 Menjalankan bot 109 | Regular node: 110 | ```bash 111 | > npm start 112 | ``` 113 | 114 | PM2: 115 | ```bash 116 | > pm2 start index.js 117 | > pm2 monit 118 | ``` 119 | 120 | PM2 with cron job (restart after 5 hours): 121 | ```bash 122 | > pm2 start index.js --cron "* */5 * * *" 123 | > pm2 monit 124 | ``` 125 | 126 | Setelah itu pindai kode QR menggunakan WhatsApp Anda di ponsel Anda! 127 | 128 | # Features 129 | 130 | 131 | | Sticker Maker | Availability | 132 | | :-------------------: | :----------: | 133 | | Send/reply image | ✔️ | 134 | | Send/reply GIF | ✔️ | 135 | | Send/reply MP4 | ✔️ | 136 | | Text to sticker | ✔️ | 137 | | Text to sticker GIF | ✔️ | 138 | | Take Sticker | ✔️ | 139 | | Add Sticker | ✔️ | 140 | | Get Sticker | ✔️ | 141 | | Del Sticker | ✔️ | 142 | | List Sticker | ✔️ | 143 | | Sticker to image | ✔️ | 144 | 145 | | Money Feature | Availability | 146 | | :-------------------: | :----------: | 147 | | Money Check | ✔️ | 148 | | Buy Limit | ✔️ | 149 | | Transfer Money | Soon | 150 | 151 | | Downloader | Availability | 152 | | :-----------------: | :----------: | 153 | | Facebook video | ✔️ | 154 | | YouTube audio/video | ✔️ | 155 | | Joox | ✔️ | 156 | | TikTok | ✔️ | 157 | | TikTok NoWm | ✔️ | 158 | | Twitter | ✔️ | 159 | | Instagram post | ✔️ | 160 | | Instagram story | ✔️ | 161 | | Layarkaca21 film | ✔️ | 162 | 163 | | Other | Availability | 164 | | :-----------------: | :----------: | 165 | | Say | ✔️ | 166 | | Lyric finder | ✔️ | 167 | | Shortlink maker | ✔️ | 168 | | Wikipedia | ✔️ | 169 | | KBBI search | ✔️ | 170 | | IG stalk | ✔️ | 171 | | SpekHp | ✔️ | 172 | | Food receipt finder | ✔️ | 173 | | TTS | ✔️ | 174 | | AFK | ✔️ | 175 | | Distance | ✔️ | 176 | | Find sticker | ✔️ | 177 | | List surah | ✔️ | 178 | | Math | ✔️ | 179 | | Surah | ✔️ | 180 | | Random contact | ✔️ | 181 | | Play YouTube | ✔️ | 182 | | Tafsir Al-Qur'an | ✔️ | 183 | | LK21 | ✔️ | 184 | | Reminder | ✔️ | 185 | | Tebak Gambar | ✔️ | 186 | | Truth Of Dare | ✔️ | 187 | | Next Kuiz | ✔️ | 188 | | Stop Kuiz | ✔️ | 189 | | Kuis Mtk | ✔️ | 190 | | Stop Mtk | ✔️ | 191 | | Point | ✔️ | 192 | | Image to URL | ✔️ | 193 | | Jadwal sholat | ✔️ | 194 | | To Mp3 | ✔️ | 195 | | Bass | ✔️ | 196 | | Line sticker latest | ✔️ | 197 | | Quiziz Hack | ✔️ | 198 | | Image To Text | ✔️ | 199 | | Cek ongkir | ✔️ | 200 | 201 | | Fun | Availability | 202 | | :-------------------: | :----------: | 203 | | Send | ✔️ | 204 | | Mutualan | ✔️ | 205 | | Harta tahta maker | ✔️ | 206 | | Zodiac | ✔️ | 207 | | Write on paper | ✔️ | 208 | | Missing person maker | ✔️ | 209 | | Valentine frame maker | ✔️ | 210 | | Glitch text maker | ✔️ | 211 | | SimSimi | ✔️ | 212 | | Blackpink logo maker | ✔️ | 213 | | Pornhub logo maker | ✔️ | 214 | | Galaxy text maker | ✔️ | 215 | | TikTok asupan | ✔️ | 216 | | PH comment maker | ✔️ | 217 | | Triggered effect | ✔️ | 218 | | Deep fry effect | ✔️ | 219 | | Kiss someone | ✔️ | 220 | | 3D Text | ✔️ | 221 | | Freefire logo | ✔️ | 222 | | Freefire banner | ✔️ | 223 | 224 | | WIBU AREA | Availability | 225 | | :----------------: | :----------: | 226 | | Random neko girl | ✔️ | 227 | | Random wallpaper | ✔️ | 228 | | Kusonime scrapper | ✔️ | 229 | | Komiku scrapper | ✔️ | 230 | | Anime tracer | ✔️ | 231 | | Random waifu | ✔️ | 232 | | Loli Video | ✔️ | 233 | 234 | | Bot | Availability | 235 | | :--------------: | :----------: | 236 | | Bot usage status | ✔️ | 237 | | Blocked list | ✔️ | 238 | | Ping | ✔️ | 239 | | Delete message | ✔️ | 240 | | Report bug | ✔️ | 241 | 242 | | Owner | Availability | 243 | | :----------------: | :----------: | 244 | | Broadcast | ✔️ | 245 | | Clear all messages | ✔️ | 246 | | Leave all groups | ✔️ | 247 | | Ban | ✔️ | 248 | | Add premium user | ✔️ | 249 | | Add Sewa group | ✔️ | 250 | | Halal & Haram | ✔️ | 251 | | Setpictmenu | ✔️ | 252 | 253 | 254 | | Moderation | Availability | 255 | | :--------------: | :----------: | 256 | | Add | ✔️ | 257 | | Kick | ✔️ | 258 | | Promote | ✔️ | 259 | | Demote | ✔️ | 260 | | Leave bot | ✔️ | 261 | | Tag All | ✔️ | 262 | | Set Icon Grup | ✔️ | 263 | | Anti-group link | ✔️ | 264 | | Toogle welcome | ✔️ | 265 | | Auto-sticker | ✔️ | 266 | | Mute group | ✔️ | 267 | 268 | | 18+ | Availability | 269 | | :----------------: | :----------: | 270 | | Fetish | ✔️ | 271 | | Waifu NSFW | ✔️ | 272 | | Waifu 18+ | ✔️ | 273 | | Xvideos | ✔️ | 274 | | Xvidl | ✔️ | 275 | | Xnxx | ✔️ | 276 | | Xnxxdl | ✔️ | 277 | | nHentai downloader | ✔️ | 278 | 279 | ## Troubleshooting 280 | Fix Stuck on linux, install google chrome stable: 281 | ```bash 282 | > wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 283 | > sudo apt install ./google-chrome-stable_current_amd64.deb 284 | ``` 285 | 286 | # Thanks to 287 | * [`open-wa/wa-automate-nodejs`](https://github.com/open-wa/wa-automate-nodejs) 288 | * [`AlvioAdjiJanuar`](https://github.com/AlvioAdjiJanuar) 289 | * [`SlavyanDesu`](https://github.com/SlavyanDesu/BocchiBot) 290 | * [`VideFrelan`](https://github.com/VideFrelan) 291 | * [`dxxoo`](https://github.com/dxxoo) 292 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "your-token-here", 3 | "nao": "put-your-token-here", 4 | } 5 | -------------------------------------------------------------------------------- /configFile/hmm.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /database/index.js: -------------------------------------------------------------------------------- 1 | var Datastore = require('nedb'), 2 | db = new Datastore({ filename: process.cwd() + '/.database.db' }) 3 | 4 | db.loadDatabase(err => { if (err) throw err; console.log('[:] Database loaded.') }) 5 | 6 | const insert = (no, type, text, name, from, command) => new Promise((resolve, reject) => { 7 | let data = { 8 | no: no, 9 | date: new Date(), 10 | type: type, 11 | details: { 12 | text: text, 13 | name: name, 14 | from: from, 15 | command: command 16 | } 17 | } 18 | db.insert(data, async (err, resp) => { 19 | try { 20 | resolve('ok') 21 | } catch (err) { 22 | reject(err) 23 | } 24 | }) 25 | }) 26 | 27 | module.exports = { 28 | insert 29 | } -------------------------------------------------------------------------------- /desahan/Pasti Bangka ngana ko ba jamping jamping anjing anjing banget Viral titktok versi Spongebob.mp3: -------------------------------------------------------------------------------- 1 | 2 | https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/139/source/youtube/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/182694/lmt/1603845536673579/dur/29.814/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,gir,clen,lmt,dur/sig/AOq0QJ8wRgIhAIn9fxgAHz-13sLrVon4uvsllkr0zgr_7TThWBgK5436AiEA4f8-6EwS2N2NH38lkmAX7NFx_24b7oqAkynnBE3rgB4%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRQIgb1EwAT3Nca8DcceXI625NQfgOGYe_jUnQOCXg_yY9eMCIQCRAoEe-t7eAqHrBMwTncUSmgh6L6TpFD24vG0WSSt4-A%3D%3D/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/140/source/youtube/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/482133/lmt/1603845536673478/dur/29.744/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,gir,clen,lmt,dur/sig/AOq0QJ8wRAIgDBaY--InQ2GKy54SeHgXymU6gmPJncik_dIzS8XYMPQCICIol2jiyvb5F95HSWpCmxO4ipZP3wOY0XviOtcOQ8oe/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRgIhAK94KVQSdGJ-lJj5YmtEJXjmgClu7R7TrOo2VictScuWAiEAupExzgyQH-Z_AsM7xTbqS76bC0qSDm_VHeJ2ADLqXGc%3D/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/251/source/youtube/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/audio%2Fwebm/otfp/1/gir/yes/clen/532056/lmt/1603845536034568/dur/29.701/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,gir,clen,lmt,dur/sig/AOq0QJ8wRgIhAIgOXXa0ocu3-Zr1BI3kAP2ryt69O1f6nu936kocqCLjAiEA0peD1g7PynFYkEWIKpsxQpJ10FeRC4jkH5rCNrFh404%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRAIgZpB8hJkoGMAbVy0tkz3aWyCDPuedh7Gq7B0AtcFVYxUCIE5FGj7GvCz_TsQjOAgPTkhTZDkD-oXUQnjDXBUPHBk_/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/133/source/yt_otf/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/video%2Fmp4/otfp/1/otf/1/lmt/1603845541737742/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,otf,lmt/sig/AOq0QJ8wRAIgGPQ7hAuxFaNIyn833vqTEAkt-JN8qhr-74tAnugvUsICIGIub7jLIUUtNHafYJ4N9BjFt4zvp1VJagEg5jVSeVct/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRAIgLkJhdKOrAzh0hoD1KorTO20VZJwsvq_IfO5Y17vR-S0CIFQCZMiunLUuIv7sXc22BI8z2RIgBEcXVTjChF8ZKa_H/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/134/source/youtube/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/video%2Fmp4/otfp/1/gir/yes/clen/1671852/lmt/1603845541738140/dur/29.666/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,gir,clen,lmt,dur/sig/AOq0QJ8wRAIgAM17TqcyjmCMxH6pBSmdONwlMXIoHgzB2hbcDnZQpMQCIDhrKZL13xNQhKJruHFZP9VcDDtGuDCzdGxhVoRWA9g-/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRQIgYN5NQghzGmPxoInOPXH682V6lpDVJrky_HsqKmL7GyUCIQDv3Xhcy6r1Qjf_A6cG--MOFoLZMsuTEd2X6ElA335FyA%3D%3D/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/135/source/yt_otf/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/video%2Fmp4/otfp/1/otf/1/lmt/1603845541737742/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,otf,lmt/sig/AOq0QJ8wRAIgLnu4hP8sHTfglAIw8gqWeojcWg51Litm-3Z1wknvlTYCIDN9TYJqyTsJW57QS_iKWYP9dwqcY-8BxEHoELUaQgIE/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRQIhAL2Xd8Pgdro4NarNOjuWBlUHPa2Sez9OcjFIras3DQAVAiBU8tBcTJKBY8vrkGj_nktzx8tO9wG12DfqbMyMbIAo1w%3D%3D/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/160/source/yt_otf/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/video%2Fmp4/otfp/1/otf/1/lmt/1603845541737742/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,otf,lmt/sig/AOq0QJ8wRgIhAI786mWmz0-MZ44FuGyzzV7rBQUZrBqNCiCuZ8YvkejOAiEAmBfpF_qsEVmZHybxvLsbWOEg0d2NIbpLvlbhcG0IX60%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRQIgWxqrtjQ9HtXgvpaUYkaAczs4ZX7wLxLjCvBFRIARpboCIQCMrXtPk5PcwgbvFwl7dA325LjM121PjAdlLOlqQLGE0w%3D%3D/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/136/source/youtube/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/video%2Fmp4/otfp/1/gir/yes/clen/5317863/lmt/1603845541737742/dur/29.666/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,gir,clen,lmt,dur/sig/AOq0QJ8wRQIhAIj59cqh3BDMUdKPg8ZqjbYe9iN3TTvgLGBHSzDlIYWxAiB-wsP9JmwKp1AIS7pnIgpV0E45cKtFzlVsugCeqg7hkA%3D%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRAIgBhU15I_5AOu5FhSy1XgVtG0bbhLKjLjHDQEuzJWXAGACIGkKLJfkPRITlkzO1XQmb6sKlsGCSBO2K2_-gmNS8DNf/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/242/source/yt_otf/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/video%2Fwebm/otfp/1/otf/1/lmt/1603845541737742/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,otf,lmt/sig/AOq0QJ8wRQIgOZmGAyXjdeTzVv5Aet8ezTNqI21oubIncmPrmAv7pHQCIQCA4bwH7-93jnhQzZgUM9Y1C3dPb_s1ArBoUZln8sgGgQ%3D%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRgIhAMxVEn5tFu_L-gm7PD9jYHaQl2bTmE72N5MMScMcZtFuAiEAsKuuZgOS7zJ3-LvoZ_jsGK2nUQPE2aNV_eeR5DsWAxw%3D/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/243/source/yt_otf/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/video%2Fwebm/otfp/1/otf/1/lmt/1603845541737742/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,otf,lmt/sig/AOq0QJ8wRQIgdWUFioLzCic0eq6ENDM1czLhBk_GTNsa-r9De6Ljc4UCIQChIi3Ul6JuCu8kY5GkQAhz6wnBO7dZE1YfUxGo73JGog%3D%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRgIhAPO7ifXU7gloA4tjidKKrVdN3DRu1zJ3qHSUsJsdTCqaAiEAlTeWB-j0TGIuk0ROzGnS-Ym1joMamd87cKv33prc35g%3D/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/244/source/yt_otf/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/video%2Fwebm/otfp/1/otf/1/lmt/1603845541737742/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,otf,lmt/sig/AOq0QJ8wRQIgehAaQHtTIMF05PGmYsCbs_jssY6J2Y1ku6vpwXf9tyMCIQDALalvFvyMZRQOuHJwNe_ZGai6J_NyxFN5GT5fsshKfw%3D%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRQIhAPViU_wln8VQhC5AJT6rWkVUu3TjpoYPaRr64RtUC34KAiBD-64M2lgyFSDdOowINZImrELBtF05lh2s01Bi5s7RaA%3D%3D/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/278/source/yt_otf/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/video%2Fwebm/otfp/1/otf/1/lmt/1603845541737742/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,otf,lmt/sig/AOq0QJ8wRQIhALAqylEyYivC1FtlLjV82cRQeMPSSq-HUMm1JrX9BstBAiBRTOYowfW6WhU030ZbF_Kb2AnpqeVRh9W-MoH5LmOQTg%3D%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRAIgPP31aG05XIigz8Q_Hb7XV_QndK550FYgxn3ZuENwdXUCIAHuFGLE9Gpoegiu4j3uru_vZnt2wOk9t5vxobWGS8Ko/https://r3---sn-p5qlsndd.googlevideo.com/videoplayback/expire/1608407182/ei/LgTeX56GCIKVhgbCn67oBg/ip/34.239.104.183/id/aed14f393e96a180/itag/247/source/yt_otf/requiressl/yes/mh/Bo/mm/31,29/mn/sn-p5qlsndd,sn-p5qs7n7z/ms/au,rdu/mv/u/mvi/3/pl/21/vprv/1/ratebypass/yes/mime/video%2Fwebm/otfp/1/otf/1/lmt/1603845541737742/mt/1608384844/fvip/3/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,otf,lmt/sig/AOq0QJ8wRQIgabDus6IXs5xykOukYBfgZ_LphZI0IutljweGLShEyRQCIQC-D1NM4gr4-8kuJDIrw-P_SWUxOQyz8D0wreh1qWS2Mw%3D%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRgIhAPVGWLLseuEOqKRnOrMYbHcy0IAEFZH_SJa3MApPAlRqAiEA2uptfxTcd4IrnFipkOyN76yt-BCyXoCUWF_RTi_tzy0%3D/ 3 | -------------------------------------------------------------------------------- /desahan/Prank desahan.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/desahan/Prank desahan.mp3 -------------------------------------------------------------------------------- /desahan/Suara kuntilanak ketawa.mp3: -------------------------------------------------------------------------------- 1 | 2 | https://r4---sn-p5qlsnd6.googlevideo.com/videoplayback/expire/1608406402/ei/IQHeX7jSPKTB4wGijaC4DQ/ip/34.239.104.183/id/ed559377394e30ed/itag/139/source/youtube/requiressl/yes/mh/a5/mm/31,26/mn/sn-p5qlsnd6,sn-t0a7sn7d/ms/au,onr/mv/u/mvi/4/pl/21/vprv/1/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/70435/lmt/1534525898388898/dur/11.702/mt/1608384198/fvip/4/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,gir,clen,lmt,dur/sig/AOq0QJ8wRAIgG3wxTfoBJEbwxYT2n1yJ1EPXHw9izsS-l6oKIjLOIT4CIE0_4Qhg77cX5Q8Bz7q0Qh02wrvaW8qNWefhu1Cqbfn-/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRgIhAOCEj40g-vu_FadcntX9JukvlUZMaQqJycG2P0Fy7X-OAiEA2hvYyzGeEoIWOj0wYP_ExUZ56b27mzAXWd7yo6mM4JM%3D/https://r4---sn-p5qlsnd6.googlevideo.com/videoplayback/expire/1608406402/ei/IQHeX7jSPKTB4wGijaC4DQ/ip/34.239.104.183/id/ed559377394e30ed/itag/140/source/youtube/requiressl/yes/mh/a5/mm/31,26/mn/sn-p5qlsnd6,sn-t0a7sn7d/ms/au,onr/mv/u/mvi/4/pl/21/vprv/1/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/185231/lmt/1534525898035140/dur/11.609/mt/1608384198/fvip/4/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,gir,clen,lmt,dur/sig/AOq0QJ8wRQIgBPs7Pd5lipmNaUtbe8boSY3Llmo3VW4ru-fpRMvx61QCIQC7O_2GT3KD1gwyqyd5hjYgLL2GxmoK-0uQN7OJ7KCtUg%3D%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRQIgB-H2JxzIh3-qLtxuAXYmtsOQlNPRx_g55bfAm4-2LtwCIQC6sOkHkBYoiS-v9SstpJEcqx82wZBIeeZVa8Fw5C2Rbw%3D%3D/https://r4---sn-p5qlsnd6.googlevideo.com/videoplayback/expire/1608406402/ei/IQHeX7jSPKTB4wGijaC4DQ/ip/34.239.104.183/id/ed559377394e30ed/itag/251/source/youtube/requiressl/yes/mh/a5/mm/31,26/mn/sn-p5qlsnd6,sn-t0a7sn7d/ms/au,onr/mv/u/mvi/4/pl/21/vprv/1/ratebypass/yes/mime/audio%2Fwebm/otfp/1/gir/yes/clen/166099/lmt/1565889279851166/dur/11.621/mt/1608384198/fvip/4/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,gir,clen,lmt,dur/sig/AOq0QJ8wRQIhAOxjGaTr1MVwFOBFI5svp4PPgEgoDXn6GOg3tsZQ7RTqAiBZfZPKdsrp68E8CMratqvKFCC74RjtCIA9KcVdzYqzTw%3D%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRAIgIt1G4TiB1AmypEUJIkZ60ZwFBYx2vLVj_PJ_kkJeOK8CIAqRlpbJvRH_Vv4anjdfQ94aisouVw_8xaJd18_W9Msi/https://r4---sn-p5qlsnd6.googlevideo.com/videoplayback/expire/1608406402/ei/IQHeX7jSPKTB4wGijaC4DQ/ip/34.239.104.183/id/ed559377394e30ed/itag/133/source/youtube/requiressl/yes/mh/a5/mm/31,26/mn/sn-p5qlsnd6,sn-t0a7sn7d/ms/au,onr/mv/u/mvi/4/pl/21/vprv/1/ratebypass/yes/mime/video%2Fmp4/otfp/1/gir/yes/clen/36862/lmt/1534525899041218/dur/11.560/mt/1608384198/fvip/4/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,gir,clen,lmt,dur/sig/AOq0QJ8wRQIhALn8R0EaytPdlsfegUbzyoS4UO0SVZPplg_S69HSM6y-AiA6oaJQEHCI2nEkAB1rdrKUpqdJUp3_z88LPswC9DDGvg%3D%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRgIhAOVRbWjNRcTC7zIF_0nqFalQ7i9koeMq4wt08qbBJO6gAiEAv2-18mKvG3NAUmMCDdNtDebTVoROkD8Nk2uJXbsChII%3D/https://r4---sn-p5qlsnd6.googlevideo.com/videoplayback/expire/1608406402/ei/IQHeX7jSPKTB4wGijaC4DQ/ip/34.239.104.183/id/ed559377394e30ed/itag/160/source/yt_otf/requiressl/yes/mh/a5/mm/31,26/mn/sn-p5qlsnd6,sn-t0a7sn7d/ms/au,onr/mv/u/mvi/4/pl/21/vprv/1/ratebypass/yes/mime/video%2Fmp4/otfp/1/otf/1/lmt/1534525899041218/mt/1608384198/fvip/4/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,otf,lmt/sig/AOq0QJ8wRQIhAKRM57Pmxd7swzjbhcUv1IzCXHKY7tI0kvTkMJaq1VLkAiAYJPPtfH0Ex69cPLfUZXnw471-w2ZGNF9p2oDqSnSngg%3D%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRAIgA00QC4WM3qlxuVDSM6khdfVFFR_7Sw_UjNa5DQDmOOQCIFiwpwqT-TBJNBRHGj8N0nUXktzDOzF8edtqraRhqZIR/https://r4---sn-p5qlsnd6.googlevideo.com/videoplayback/expire/1608406402/ei/IQHeX7jSPKTB4wGijaC4DQ/ip/34.239.104.183/id/ed559377394e30ed/itag/242/source/yt_otf/requiressl/yes/mh/a5/mm/31,26/mn/sn-p5qlsnd6,sn-t0a7sn7d/ms/au,onr/mv/u/mvi/4/pl/21/vprv/1/ratebypass/yes/mime/video%2Fwebm/otfp/1/otf/1/lmt/1534525899041218/mt/1608384198/fvip/4/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,otf,lmt/sig/AOq0QJ8wRAIgcjTri8D_u2m6Y67BHk2f6s_q2qkNkyovvd3lZoklrCwCIAC7VmO9c7wzUHEmxYoTtKroxmRzHwfh5ikPgiGmwRVF/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRgIhAPngr0V5S1sFCeAcLbGu3rrPrvmyoCIuIHfyAgskbavSAiEAvjHandVXGq289aR7hefG9HmuhZDAAXs13yq0umm53qM%3D/https://r4---sn-p5qlsnd6.googlevideo.com/videoplayback/expire/1608406402/ei/IQHeX7jSPKTB4wGijaC4DQ/ip/34.239.104.183/id/ed559377394e30ed/itag/278/source/yt_otf/requiressl/yes/mh/a5/mm/31,26/mn/sn-p5qlsnd6,sn-t0a7sn7d/ms/au,onr/mv/u/mvi/4/pl/21/vprv/1/ratebypass/yes/mime/video%2Fwebm/otfp/1/otf/1/lmt/1534525899041218/mt/1608384198/fvip/4/keepalive/yes/sparams/expire,ei,ip,id,itag,source,requiressl,vprv,ratebypass,mime,otfp,otf,lmt/sig/AOq0QJ8wRgIhAIP9uNC6fMyFmY4cPG745lh9WUU1S7y2sPNutHl0LoWQAiEAtaonWhhqbDunf33DB-TOcNGmOza2X78cqj61XEmdhgU%3D/lsparams/mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRQIhAL8-dCzxw9MmceGYwa-PKeQEDSFQfHPi0ovsWe1SlQcrAiBGRxOA-vdMn3etnucFfXKYBN8xTPAFc3zSxPeCfI7rkw%3D%3D/ 3 | -------------------------------------------------------------------------------- /desahan/Zelda.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/desahan/Zelda.mp3 -------------------------------------------------------------------------------- /desahan/d: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /desahan/megumin_last.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/desahan/megumin_last.mp3 -------------------------------------------------------------------------------- /desahan/onii chan onii chan.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/desahan/onii chan onii chan.mp3 -------------------------------------------------------------------------------- /desahan/onii chan.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/desahan/onii chan.mp3 -------------------------------------------------------------------------------- /halo.java: -------------------------------------------------------------------------------- 1 | String fun; 2 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { create, Client } = require('@open-wa/wa-automate') 2 | const figlet = require('figlet') 3 | const options = require('./utils/options') 4 | const { color } = require('./utils') 5 | const { ind, eng } = require('./message/text/lang/') 6 | const HandleMsg = require('./HandleMsg') 7 | const fs = require('fs-extra') 8 | const fss = require('fs') 9 | const { Console } = require('console') 10 | /** 11 | * Uncache if there is file change 12 | * @param {string} module Module name or path 13 | * @param {function} cb 14 | */ 15 | const nocache = (module, call = () => { }) => { 16 | console.log(color('[WATCH]', 'orange'), color(`=> '${module}'`, 'yellow'), 'file is now being watched by me!') 17 | fs.watchFile(require.resolve(module), async () => { 18 | await uncache(require.resolve(module)) 19 | call(module) 20 | }) 21 | } 22 | 23 | /** 24 | * Uncache a module 25 | * @param {string} module Module name or path 26 | */ 27 | const uncache = (module = '.') => { 28 | return new Promise((resolve, reject) => { 29 | try { 30 | delete require.cache[require.resolve(module)] 31 | resolve() 32 | } catch (err) { 33 | reject(err) 34 | } 35 | }) 36 | } 37 | require('./HandleMsg') 38 | nocache('./HandleMsg', module => console.log(`'${module}' Updated!`)) 39 | require('./lib/menu.js') 40 | nocache('./lib/menu.js', module => console.log(`'${module}' Updated!`)) 41 | const start = (piyo = new Client()) => { 42 | console.log(color(figlet.textSync('----------------', { horizontalLayout: 'default' }))) 43 | console.log(color(figlet.textSync('Piyo Bot', { font: 'Ghost', horizontalLayout: 'default' }))) 44 | console.log(color(figlet.textSync('----------------', { horizontalLayout: 'default' }))) 45 | console.log(color('[DEV]'), color('Piyo', 'yellow')) 46 | console.log(color('[~>>]'), color('BOT Started!', 'darkblue')) 47 | 48 | // Mempertahankan sesi agar tetap nyala 49 | piyo.onStateChanged((state) => { 50 | console.log(color('[~>>]', 'red'), state) 51 | if (state === 'CONFLICT' || state === 'UNLAUNCHED') piyo.forceRefocus() 52 | }) 53 | 54 | // ketika bot diinvite ke dalam group 55 | piyo.onAddedToGroup(async (chat) => { 56 | const groups = await piyo.getAllGroups() 57 | // kondisi ketika batas group bot telah tercapai,ubah di file settings/setting.json 58 | if (groups.length > groupLimit) { 59 | await piyo.sendText(chat.id, `Maap, Bot Sudah melewati batas memasuki group: ${groupLimit}`).then(() => { 60 | piyo.leaveGroup(chat.id) 61 | piyo.deleteChat(chat.id) 62 | }) 63 | } else { 64 | // kondisi ketika batas member group belum tercapai, ubah di file settings/setting.json 65 | if (chat.groupMetadata.participants.length < memberLimit) { 66 | await piyo.sendText(chat.id, `Member lu kurang , minimal member ${memberLimit} people`).then(() => { 67 | piyo.leaveGroup(chat.id) 68 | piyo.deleteChat(chat.id) 69 | }) 70 | } else { 71 | await piyo.simulateTyping(chat.id, true).then(async () => { 72 | await piyo.sendText(chat.id, `Hai anjg~, Saya Whatsapp Bot Pintar. Untuk memulai bot silahkan ketik ${prefix}menu`) 73 | }) 74 | } 75 | } 76 | }) 77 | 78 | // Listen to group's event 79 | piyo.onGlobalParticipantsChanged(async (event) => { 80 | const welcome = JSON.parse(fs.readFileSync('./settings/welcome.json')) 81 | const gcChat = await piyo.getChatById(event.chat) 82 | const pcChat = await piyo.getContact(event.who) 83 | let { pushname, verifiedName, formattedName } = pcChat 84 | pushname = pushname || verifiedName || formattedName 85 | const isWelcome = welcome.includes(event.chat) 86 | const botNumbers = await piyo.getHostNumber() + '@c.us' 87 | const { name } = gcChat 88 | const sts = await piyo.getStatus(event.who) 89 | try { 90 | if (event.action === 'add' && event.who !== botNumbers && isWelcome) { 91 | const pic = await piyo.getProfilePicFromServer(event.who) 92 | if (pic === undefined) { 93 | var pp = 'http://piyobot.cf/pphana.jpg' 94 | } else { 95 | var pp = pic 96 | } 97 | await piyo.sendFileFromUrl(event.chat, pp, 'profile.jpg', `Selamat datang di grup *${name}*\n*Nama :* ${pushname}\n*Bio :* ${sts.status}\n\nSemoga betah terus di grup kami ya~`) 98 | } else if (event.action === 'remove' && event.who !== botNumbers && isWelcome) { 99 | await piyo.sendTextWithMentions(event.chat, `@${event.who.replace('@c.us', '')} Yah Dia Keluar`) 100 | } 101 | } catch (err) { 102 | console.error(err) 103 | } 104 | }) 105 | piyo.onIncomingCall(async (callData) => { 106 | // ketika seseorang menelpon nomor bot akan mengirim pesan 107 | await piyo.sendText(callData.peerJid, 'Maaf sedang tidak bisa menerima panggilan.\n nelfon=block \n\n-bot') 108 | .then(async () => { 109 | // bot akan memblock nomor itu 110 | await piyo.contactBlock(callData.peerJid) 111 | }) 112 | }) 113 | 114 | // ketika seseorang mengirim pesan 115 | piyo.onMessage(async (message) => { 116 | piyo.getAmountOfLoadedMessages() // menghapus pesan cache jika sudah 3000 pesan. 117 | .then((msg) => { 118 | if (msg >= 3000) { 119 | console.log('[PIYOBOT]', color(`Loaded Message Reach ${msg}, cuting message cache...`, 'yellow')) 120 | piyo.cutMsgCache() 121 | } 122 | }) 123 | //HandleMsg(piyo, message) 124 | require('./HandleMsg')(piyo, message) 125 | }) 126 | 127 | } 128 | //create session 129 | create(options(true, start)) 130 | .then((piyo) => start(piyo)) 131 | .catch((err) => console.log(err)) 132 | -------------------------------------------------------------------------------- /lib/18+.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "teks": "Nama : DilaPye Colmek\nFoto : -\nVideo : 1\nSize : 90 MB\nDurasi : 5 Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1We9TeG1whjz2bmNCrahctK1-Hiy3BtWN/view \n PASSWORD FILE : AA18+#29", 4 | "image": "https://i.ibb.co/8jRQ01J/IMG-20201205-223443-917.jpg" 5 | }, 6 | { 7 | "teks": "Nama : Missluttyv SMA\nFoto : -\nVideo : 3\nSize : 74 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1TodhXRAHt6MHMqS2-3DYmCQoIFe7yuI-/view \nPASSWORD FILE : AA18+#21", 8 | "image": "https://i.ibb.co/KKzmXzY/IMG-20201206-033352-192.jpg" 9 | }, 10 | { 11 | "teks": "Nama : Arce\nFoto : 114\nVideo : 16\bSize : 64 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1SwXbmd2sXnYSNYmn_tdCiaBsHHXjYvQM/view \nPASSWORD FILE : AA18+#6", 12 | "image": "https://i.ibb.co/8srYLFL/IMG-20201206-034512-690.jpg" 13 | }, 14 | { 15 | "teks": "Nama : Annisa\nFoto : 71\nVideo : 2\nSize : 48 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1St_Pb9xNZnrSX_fPfaarno6Bpjc3ArUx/view\nPASSWORD FILE : AA18+#5", 16 | "image": "https://i.ibb.co/B32Nq01/E0yui-GCvum-STqdm-G2-6-Os-FBJYMh2-Vd-Da4ayhip-Ub-B4-Xx-Cl-H7-Vt-Ju-j-J-s-Ri-A9kww-Q83-GFPnp-W9nl-Zva.jpg" 17 | }, 18 | { 19 | "teks": "Nama : 038493040494_0[Ws_Gloia]\nFoto : 19\nVideo : 1\nSize : 379 MB\nDurasi : 8 Menit\nKualitas : HD++\nRate : ⭐⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1Y0ALFotYLT2F8kKjgxMZ_BFJ6vWKalck/view\nPASSWORD FILE : AA18+#30", 20 | "image": "https://i.ibb.co/9psS49T/Lvu-JQ8-Ut-AELo-AGZ0o-F9-RDQNk-W28e-QHj-CZPo-Ak-Wm2u-Rey-RAay-Ku-Ub4-f2-P-m-F6-DLdc67l-Ko-IRy-NZZIth.jpg" 21 | }, 22 | { 23 | "teks": "Nama : ASD - Ria Bali\nFoto : -\nVideo : 1\nSize : 165 MB\nDurasi : 45 Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1T84UWWj1oJlDAMXd-snZr6gP4Yt61P6P/view\nPASSWORD FILE : AA18+#7", 24 | "image": "https://i.ibb.co/BVB8fbj/pv-NJ5-Ja4-VP1fl2-H0b4-Ad-YOzb-HOad-Tzq-JO9-Ms-Ecs-Qz-Sn7s-CMdem-SPv-QBj8qqrt5xk-GEW-o-HKAKs-NRp-GN6.jpg" 25 | }, 26 | { 27 | "teks": "Nama : Nanad Apr\nFoto : 18\nVideo : 23\nSize : 357 MB\nDurasi : - Menit\nKualitas : -\nRate : ⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1YO0rvEgbx6Qsrtfm6tTOlvHI7OE5V42p/view\nPASSWORD FILE : AA18+#32", 28 | "image": "https://i.ibb.co/BTFg7yT/IEsp-UDTc6-YFw-Hro-E3-Eq-VXGgo-PV8-4-Il4-HWy-Usc-Kw-JMVW4ql-WVBOSzmxjz6-W6r-Dw4-E2-GPo7cygc-HH6-XFy7.jpg" 29 | }, 30 | { 31 | "teks": "Nama : lily kawai onlyfans\nFoto : 50\nVideo : 7\nSize : 237 MB\nDurasi : - Menit\nKualitas : HD+\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1TcK_EH1d2vL4bfVhSBm0el_nhmqh2XCS/view\nPASSWORD FILE : AA18+#17", 32 | "image": "https://i.ibb.co/bsJfgz7/H3-GSk-Spdcw-Uc-E8t-Mk-A5-ZM6y-MO2-Kk-Fdp5qxr-E0ju-Y3-N-Dx-Ln-YWp-Epx2jug-DEFg-LAloq-1g5-NYr-A2tz-O4.jpg" 33 | }, 34 | { 35 | "teks": "Nama : Bocil x Tante\nFoto : -\nVideo : 1\nSize : 156 MB\nDurasi : 23 Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1amwgPTf_PLIUc43bxivztFrD0xzdg8Tm/view\nPASSWORD FILE : AA18+#33", 36 | "image": "https://i.ibb.co/KNsD0tT/pv-NJ5-Ja4-VP1fl2-H0b4-Ad-YOzb-HOad-Tzq-JO9-Ms-Ecs-Qz-Sn7s-CMdem-SPv-QBj8qqrt5xk-GEW-o-HKAKs-NRp-GN6.jpg" 37 | }, 38 | { 39 | "teks": "Nama : Badbitch_alter\nFoto : -\nVideo : 1\nSize : 170 MB\nDurasi : 26 Menit\nKualitas : HD+\nRate : ⭐⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1b2k9RvUeirTzfHBZJkQ9fgw0jJudGP2j/view\nPASSWORD FILE : AA18+#34", 40 | "image": "https://i.ibb.co/g6Fwp8S/pv-NJ5-Ja4-VP1fl2-H0b4-Ad-YOzb-HOad-Tzq-JO9-Ms-Ecs-Qz-Sn7s-CMdem-SPv-QBj8qqrt5xk-GEW-o-HKAKs-NRp-GN6.jpg" 41 | }, 42 | { 43 | "teks": "Nama : Princess nakal\nFoto : -\nVideo : 1\nSize : 128 MB\nDurasi : 15 Menit\nKualitas : HD\nRate : ⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1bj6nNKADyIzSXONZnmXs7c8E_Ln_3KlM/view\nPASSWORD FILE : AA18+#35", 44 | "image": "https://i.ibb.co/gPFMxr6/image.png" 45 | }, 46 | { 47 | "teks": "Nama : weweci\nFoto : -\nVideo : 1\nSize : 180 MB\nDurasi : 21 Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1cA-pPAB_WRGRRGxhBDk9ouDiynu17xPg/view\nPASSWORD FILE : AA18+#36", 48 | "image": "https://i.ibb.co/0YPwyVc/image.png" 49 | }, 50 | { 51 | "teks": "Nama : Viral Katanya\nFoto : -\nVideo : 1\nSize : 26 MB\nDurasi : 5 Menit\nKualitas : HD\nRate : ⭐⭐⭐\n\nDownload Link\nDownload : http://www.mediafire.com/file/9o80ka9z61cdtn1/%23Viral_katanya.zip/file", 52 | "image": "https://i.ibb.co/vCWZWQP/image.png" 53 | }, 54 | { 55 | "teks": "Nama : Hijab hitam\nFoto : -\nVideo : 4\nSize : 20 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1gM7UvH1jzxYek88mQnWBQmou78Gerb_w/view", 56 | "image": "https://i.ibb.co/c66fNtR/image.png" 57 | }, 58 | { 59 | "teks": "Nama : Syifa\nFoto : 45\nVideo : 25\nSize : 100 MB\nDurasi : - Menit\nKualitas : HD+\nRate : ⭐⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1gTjGotGSlpRCZiLKaZ14sOLjBjirntUb/view\nPassword file : AA18+#27", 60 | "image": "https://i.ibb.co/XDB3nxX/image.png" 61 | }, 62 | { 63 | "teks": "Nama : Danca\nFoto : 18\nVideo : 13\nSize : 100 MB\nDurasi : - Menit\nKualitas : HD+\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1hDxgMnQ4ps2DkVhFyc51ApdsavGfqs3B/view\nPassword file : AA18+#38", 64 | "image": "https://i.ibb.co/s9dJRr1/image.png" 65 | }, 66 | { 67 | "teks": "Nama : Mira cinggey\nFoto : 6\nVideo : 10\nSize : 83 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1hcr06URPB2ID6EjzXJAXZuOdmtoZkPs9/view\nPassword file : AA18+#39", 68 | "image": "https://i.ibb.co/tqXh4c7/image.png" 69 | }, 70 | { 71 | "teks": "Nama : Dewi\nFoto : 266\nVideo : 3\nSize : 150 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1iVfhweyoExOcSCq-LHvJSHRp7pmbNmzg/view\nPassword file : AA18+#40", 72 | "image": "https://i.ibb.co/ZBBxgqy/image.png" 73 | }, 74 | { 75 | "teks": "Nama : Jenn\nFoto : 50\nVideo : 7\nSize : 105 MB\nDurasi : - Menit\nKualitas : HD+\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1jqYvhwGLp8BgTItHRQpONu1MX3o4o12d/view\nPassword file : AA18+#41", 76 | "image": "https://i.ibb.co/jWx7DHR/image.png" 77 | }, 78 | { 79 | "teks": "Nama : Yanna Davud\nFoto : 61\nVideo : 5\nSize : 22 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1kIs0lNpZW-R5ub09GiQG6-wgdfagoZsV/view\nPassword file : AA18+#41", 80 | "image": "https://i.ibb.co/SRQ590w/image.png" 81 | }, 82 | { 83 | "teks": "Nama : Nina fika luna\nFoto : 30\nVideo : 28\nSize : 153 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1kirVFR8V7aYAvY_6s9v5QKyxy5hRQw-X/view\nPassword file : AA18+#42", 84 | "image": "https://i.ibb.co/CsL5XWy/image.png" 85 | }, 86 | { 87 | "teks": "Nama : Ain Penang\nFoto : 53\nVideo : 7\nSize : 42 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1kzGeQKuKaQKiz6u_JEcPh9wuJGKVB-sv/view\nPassword file : AA18+#43", 88 | "image": "https://i.ibb.co/zsSh5t8/image.png" 89 | }, 90 | { 91 | "teks": "Nama : Jilboobs\nFoto : -\nVideo : 8\nSize : 84 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1l6M6JXmNiHGaybQiHH39wucVhvLkTjkX/view\nPassword file : AA18+#44", 92 | "image": "https://i.ibb.co/L9M2pH4/image.png" 93 | }, 94 | { 95 | "teks": "Nama : Kiki hijab\nFoto : -\nVideo : 14\nSize : 190 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1lZDvGBclp35JxhWRpVSCrVOO5YhIQSSn/view\nPassword file : AA18+#45", 96 | "image": "https://i.ibb.co/q53mKTp/image.png" 97 | }, 98 | { 99 | "teks": "Nama : Tifanny\nFoto : 117\nVideo : 4\nSize : 30 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1lrO9YJ1-MJtHavMpN2kG3nmJSReJtzE6/view\nPassword file : AA18+#46", 100 | "image": "https://i.ibb.co/12myv6w/image.png" 101 | }, 102 | { 103 | "teks": "Nama : Vierannii\nFoto : 95\nVideo : -\nSize : 12 MB\nDurasi : - Menit\nKualitas : HD\nRate : ⭐⭐⭐⭐\n\nDownload Link\nDownload : https://drive.google.com/file/d/1lrOIZFT1n5XWqkX5uVq7xmmSpKjX70Mf/view\nPassword file : AA18+#47", 104 | "image": "https://i.ibb.co/yhbnjtR/image.png" 105 | } 106 | ] -------------------------------------------------------------------------------- /lib/Insta.js: -------------------------------------------------------------------------------- 1 | //CREATE BY MRHRTZ 2 | // LINK GITHUB : https://github.com/MRHRTZ 3 | 4 | 5 | const { default: Axios } = require('axios'); 6 | const sesid = '8008647406%3AZOMAWiE1WXFMS0%3A27' 7 | 8 | function getUser(username) { 9 | return new Promise((resolve, reject) => { 10 | try { 11 | Axios.get('https://www.instagram.com/' + username + '/?__a=1', { 12 | headers: { 13 | Cookie: `sessionid=${sesid}` 14 | } 15 | }).then(({ data }) => { 16 | const user = data.graphql.user 17 | // console.log(data) 18 | // console.log(user.biography) 19 | resolve({ 20 | // link: URL.replace('/?__a=1', ''), 21 | id: user.id, 22 | biography: user.biography, 23 | subscribersCount: user.edge_followed_by.count, 24 | subscribtions: user.edge_follow.count, 25 | fullName: user.full_name, 26 | highlightCount: user.highlight_reel_count, 27 | isBusinessAccount: user.is_business_account, 28 | isRecentUser: user.is_joined_recently, 29 | accountCategory: user.business_category_name, 30 | linkedFacebookPage: user.connected_fb_page, 31 | isPrivate: user.is_private, 32 | isVerified: user.is_verified, 33 | profilePic: user.profile_pic_url, 34 | profilePicHD: user.profile_pic_url_hd, 35 | username: user.username, 36 | postsCount: user.edge_owner_to_timeline_media.count, 37 | posts: user.edge_owner_to_timeline_media.edges.map(edge => { 38 | let hasCaption = edge.node.edge_media_to_caption.edges[0]; 39 | return { 40 | id: edge.node.id, 41 | shortCode: edge.node.shortcode, 42 | url: `https://www.instagram.com/p/${edge.node.shortcode}/`, 43 | dimensions: edge.node.dimensions, 44 | imageUrl: edge.node.display_url, 45 | isVideo: edge.node.is_video, 46 | caption: hasCaption ? hasCaption.node.text : '', 47 | commentsCount: edge.node.edge_media_to_comment.count, 48 | commentsDisabled: edge.node.comments_disabled, 49 | timestamp: edge.node.taken_at_timestamp, 50 | likesCount: edge.node.edge_liked_by.count, 51 | location: edge.node.location, 52 | children: edge.node.edge_sidecar_to_children ? edge.node.edge_sidecar_to_children.edges.map(edge => { 53 | return { 54 | id: edge.node.id, 55 | shortCode: edge.node.shortcode, 56 | dimensions: edge.node.dimensions, 57 | imageUrl: edge.node.display_url, 58 | isVideo: edge.node.is_video, 59 | } 60 | }) : [] 61 | } 62 | }) || [] 63 | }); 64 | }) 65 | } catch (e) { 66 | console.log(e) 67 | } 68 | }) 69 | } 70 | 71 | 72 | 73 | 74 | function getPost(code) { 75 | return new Promise(function (resolve, reject) { 76 | if (!code) return reject(new Error('Argument "code" must be specified')); 77 | 78 | Axios.get('https://www.instagram.com/p/' + code + '/?__a=1', { 79 | headers: { 80 | Cookie: `sessionid=${sesid}` 81 | } 82 | }).then(({ data }) => { 83 | const post = data.graphql.shortcode_media 84 | isVid = post.is_video ? post.video_url : post.display_url 85 | resolve({ 86 | media_id: post.id, 87 | shortcode: post.shortcode, 88 | text: post.accessibility_caption, 89 | capt: post.edge_media_to_caption.edges[0].node.text, 90 | url: isVid, 91 | owner_user: post.owner.username, 92 | date: post.taken_at_timestamp, 93 | }) 94 | }); 95 | }); 96 | } 97 | 98 | function searchUser(query) { 99 | return new Promise((resolve, reject) => { 100 | Axios.get('https://www.instagram.com/web/search/topsearch/?query=' + query , { 101 | headers: { 102 | Cookie: `sessionid=${sesid}` 103 | } 104 | }).then(({ data }) => { 105 | const all = data.users 106 | const result = [] 107 | for (let i = 0; i < all.length; i++) { 108 | result.push({ 109 | number: all[i].position + 1, 110 | pk_id: all[i].user.pk, 111 | username: all[i].user.username, 112 | name: all[i].user.full_name, 113 | latest_reel: all[i].user.latest_reel_media, 114 | is_private: all[i].user.is_private, 115 | is_verified: all[i].user.is_verified, 116 | pic: all[i].user.profile_pic_url 117 | }) 118 | } 119 | resolve(result) 120 | }).catch(reject) 121 | }) 122 | } 123 | 124 | module.exports.getUser = getUser 125 | module.exports.getPost = getPost 126 | module.exports.searchUser = searchUser 127 | -------------------------------------------------------------------------------- /lib/Jsholat.js: -------------------------------------------------------------------------------- 1 | var needle = require('needle') 2 | var moment = require('moment-timezone') 3 | 4 | const inArray = (needle, haystack) => { 5 | let length = haystack.length; 6 | for(let i = 0; i < length; i++) { 7 | if(haystack[i].id == needle) return i; 8 | } 9 | return false; 10 | } 11 | 12 | const Jsholat = (kota) => new Promise((resolve, reject) => { 13 | var url = 'https://api.banghasan.com/sholat/format/json' 14 | var kodekota = new Array() 15 | var tanggal = moment.tz('Asia/Jakarta').format('YYYY-MM-DD') 16 | needle(url + '/kota/nama/' + kota, (err, resp, body) => { 17 | if (err) throw err 18 | 19 | switch (body.kota.length) { 20 | case 0: 21 | reject('nama kota tidak ditemukan.\n\nmore information: https://api.banghasan.com/.') 22 | break; 23 | default: 24 | kodekota.push(body.kota[0]['id']) 25 | needle(url + '/jadwal/kota/' + kodekota[0] + '/tanggal/' + tanggal, (err, resp, body) => { 26 | if (err) throw err 27 | 28 | resolve([body.jadwal.data]) 29 | }) 30 | break; 31 | } 32 | }) 33 | }) 34 | 35 | module.exports = Jsholat -------------------------------------------------------------------------------- /lib/Lirik.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config() 2 | var needle = require('needle') 3 | const fs = require('fs-extra') 4 | const setting = JSON.parse(fs.readFileSync('./settings/setting.json')) 5 | let {apitech} = setting 6 | const Lirik = (query) => new Promise((resolve, reject) => { 7 | var url = 'https://api.i-tech.id' 8 | 9 | needle(url + '/tools/lirik?key=' + apitech + '&query=' + query.replace(/ +/g, '+'), async (err, resp, body) => { 10 | try { 11 | if (body.status !== 'error') { 12 | resolve(body.result) 13 | } else { 14 | reject(`Lirik *${query}* tidak ditemukan.`) 15 | } 16 | } catch (err) { 17 | reject(err) 18 | } 19 | }) 20 | }) 21 | 22 | module.exports = Lirik 23 | -------------------------------------------------------------------------------- /lib/Toxic.js: -------------------------------------------------------------------------------- 1 | const Toxic = () => new Promise((resolve, reject) => { 2 | let kata = [ 3 | 'babi', 4 | 'monyet', 5 | 'anjing', 6 | 'rizky', 7 | 'jembut', 8 | 'memek', 9 | 'kontol', 10 | 'tempik', 11 | 'tempik', 12 | 'gay', 13 | 'lesbi', 14 | 'yoga', 15 | 'setan', 16 | 'piyo', 17 | 'cangcut', 18 | 'bagong', 19 | 'bangsat', 20 | 'ngentot' 21 | ] 22 | let randKata = kata[Math.floor(Math.random() * kata.length)] 23 | let list = [ 24 | `muka lo kek ${randKata}`, `anda tau ${randKata} ?`,`${randKata} Lo ${randKata}`, 25 | `ngapa ${randKata} ga seneng?`,`ribut sini lo ${randKata}`,`jangan ngakak lo ${randKata}`, 26 | `wey ${randKata}!!`,`aku sih owh aja ya ${randKata}`,`ga seneng send lokasi lo ${randKata}`, 27 | `capek w ${randKata}`, `hari ini kau minat gelut ${kata[2]} ?`, `w tw lo itu ${randKata}`, 28 | `w ganteng dan lo kek ${randKata}`,`bucin lo ${randKata}`, 29 | `najis baperan kek ${randKata}`, 30 | `nge-teh ${randKata}`,`gaya lo sok iye, mukalo kek ${randKata}`,`${randKata} awokwowkok` 31 | ] 32 | resolve(list[Math.floor(Math.random() * list.length)]) 33 | }) 34 | 35 | //PLEASE JANGAN GANTI NAMA PEMBUAT BANGSAT 36 | //CREATED BY Alvio Adji Januar 37 | 38 | module.exports = Toxic -------------------------------------------------------------------------------- /lib/Ytdl.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config() 2 | var needle = require('needle') 3 | 4 | const Ytdl = (link) => new Promise((resolve, reject) => { 5 | var url = 'https://api.i-tech.id' 6 | var key = process.env.key 7 | 8 | needle(url + '/dl/yt?key=' + key + '&link=' + link, async (err, resp, body) => { 9 | try { 10 | if (body.status !== 'error') { 11 | resolve(body) 12 | } else { 13 | reject(`Error, periksa kembali link dan coba lagi.`) 14 | } 15 | } catch (err) { 16 | reject(err) 17 | } 18 | }) 19 | }) 20 | 21 | module.exports = Ytdl -------------------------------------------------------------------------------- /lib/brainly.js: -------------------------------------------------------------------------------- 1 | const brainly = require('brainly-scraper') 2 | 3 | module.exports = BrainlySearch = (pertanyaan, jumlah, cb) => { 4 | brainly(pertanyaan.toString(), Number(jumlah)).then((res) => { 5 | let brainlyResult = [] 6 | res.data.forEach((ask) => { 7 | let opt = { 8 | pertanyaan: ask.pertanyaan, 9 | fotoPertanyaan: ask.questionMedia 10 | } 11 | ask.jawaban.forEach(answer => { 12 | opt.jawaban = { 13 | judulJawaban: answer.text, 14 | fotoJawaban: answer.media 15 | } 16 | }) 17 | brainlyResult.push(opt) 18 | }) 19 | return brainlyResult 20 | }).then(x => { 21 | cb(x) 22 | }).catch(err => { 23 | console.log(err.error) 24 | }) 25 | } -------------------------------------------------------------------------------- /lib/cekResi.js: -------------------------------------------------------------------------------- 1 | const { fetchJson } = require('../utils/fetcher') 2 | 3 | /** 4 | * Get Resi Information 5 | * 6 | * @param {string} ekspedisi - nama ekpedisi 7 | * @param {string} resi - no / kode resi 8 | */ 9 | module.exports = cekResi = (ekspedisi, resi) => new Promise((resolve, reject) => { 10 | fetchJson(`https://api.terhambar.com/resi?resi=${resi}&kurir=${ekspedisi}`) 11 | .then((result) => { 12 | if (result.status.code != 200 && result.status.description != 'OK') return resolve(result.status.description) 13 | // eslint-disable-next-line camelcase 14 | const { result: { summary, details, delivery_status, manifest } } = result 15 | const manifestText = manifest.map(x => `⏰ ${x.manifest_date} ${x.manifest_time}\n └ ${x.manifest_description}`) 16 | const resultText = ` 17 | 📦 Data Ekspedisi 18 | ├ ${summary.courier_name} 19 | ├ Nomor: ${summary.waybill_number} 20 | ├ Service: ${summary.service_code} 21 | └ Dikirim Pada: ${details.waybill_date} ${details.waybill_time} 22 | 23 | 💁🏼‍♂️ Data Pengirim 24 | ├ Nama: ${details.shippper_name} 25 | └ Alamat: ${details.shipper_address1} ${details.shipper_city} 26 | 27 | 🎯 Data Penerima 28 | ├ Nama: ${details.receiver_name} 29 | └ Alamat: ${details.receiver_address1} ${details.receiver_city} 30 | 31 | 📮 Status Pengiriman 32 | └ ${delivery_status.status} 33 | 34 | 🚧 POD Detail\n 35 | ${manifestText.join('\n')}` 36 | resolve(resultText) 37 | }).catch((err) => { 38 | console.error(err) 39 | reject(err) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /lib/data/d: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/data/group.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /lib/font/Indie-Flower.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/lib/font/Indie-Flower.ttf -------------------------------------------------------------------------------- /lib/font/ObelixProBIt-cyr.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/lib/font/ObelixProBIt-cyr.ttf -------------------------------------------------------------------------------- /lib/font/d: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/images.js: -------------------------------------------------------------------------------- 1 | const { resolve, reject } = require('promise') 2 | const { fetchJson } = require('../utils/fetcher') 3 | 4 | /** 5 | * 6 | * @param {String} query 7 | * 8 | */ 9 | 10 | const fdci = async (wall) => new Promise((resolve, reject) => { 11 | fetchJson('http://api.fdci.se/rep.php?gambar=' + wall) 12 | .then((result) => { 13 | const andwall = Math.floor(Math.random() * 41) 14 | resolve(result[andwall]) 15 | }) 16 | .catch((err) => { 17 | reject(err) 18 | }) 19 | }) 20 | 21 | 22 | /** 23 | * 24 | * @param {String} 25 | * @param {String} 26 | * @param {String} 27 | * 28 | */ 29 | 30 | const quote = async (quotes, author , type) => new Promise((resolve, reject) => { 31 | const q = quotes.replace(/ /g, '%20').replace('\n','%5Cn') 32 | fetchJson('https://terhambar.com/aw/qts/?kata=' + q + '&author=' + author + '&tipe=' + type + '/') 33 | .then((res) => { 34 | resolve(res.result) 35 | }) 36 | .catch((err) => { 37 | reject(err) 38 | }) 39 | 40 | }) 41 | 42 | /** 43 | * 44 | * @param {String} query 45 | * 46 | */ 47 | 48 | const sreddit = async (reddit) => new Promise((resolve, reject) => { 49 | fetchJson('https://meme-api.herokuapp.com/gimme/' + reddit + '/') 50 | .then((rest) => { 51 | resolve(rest.url) 52 | }) 53 | .catch((errr) => { 54 | reject(errr) 55 | }) 56 | }) 57 | 58 | module.exports = { 59 | fdci, 60 | quote, 61 | sreddit 62 | } 63 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | exports.cekResi = require('./cekResi') 2 | exports.meme = require('./meme') 3 | exports.urlShortener = require('./shortener') 4 | exports.translate = require('./translate') 5 | exports.getLocationData = require('./location') 6 | exports.menuId = require('./menu') 7 | exports.images = require('./images') 8 | exports.resep = require('./resep') 9 | exports.rugapoi = require('./nekopoi') 10 | exports.rugaapi = require('./rugaapi') 11 | exports.Jsholat = require('./Jsholat') 12 | exports.Toxic = require('./Toxic') 13 | exports.Lirik = require('./Lirik') 14 | exports.premium = require('./premium') 15 | exports.sewa = require('./sewa') 16 | exports.point = require('./point') 17 | exports.Insta = require('./Insta') 18 | -------------------------------------------------------------------------------- /lib/kbbi.js: -------------------------------------------------------------------------------- 1 | const { fetchJson } = require('../tools/fetcher') 2 | 3 | /** 4 | * Get Indonesian word definition from KBBI (Kamus Besar Bahasa Indonesia). 5 | * @param {String} kata 6 | */ 7 | module.exports = kbbi = (kata) => new Promise((resolve, reject) => { 8 | console.log(`Searching definition for ${kata} in KBBI...`) 9 | fetchJson('https://api.i-tech.id/tools/kbbi?key=' + 'pab6wC-VGepxy-pWNxDH-4vJPi3-NxI0tg' + '&query=' + kata) 10 | .then((result) => resolve(result)) 11 | .catch((err) => reject(err)) 12 | }) 13 | -------------------------------------------------------------------------------- /lib/location.js: -------------------------------------------------------------------------------- 1 | const { fetchJson } = require('../utils/fetcher') 2 | 3 | async function getZoneStatus (latitude, longitude, userId = '2d8ecc70-8310-11ea-84f8-13de98afc5a4') { 4 | return new Promise((resolve, reject) => { 5 | const options = { 6 | method: 'POST', 7 | headers: { 8 | Authorization: 'Basic dGVsa29tOmRhMWMyNWQ4LTM3YzgtNDFiMS1hZmUyLTQyZGQ0ODI1YmZlYQ== ', 9 | Accept: 'application/json' 10 | }, 11 | body: JSON.stringify({ 12 | latitude: latitude.toString(), 13 | longitude: longitude.toString(), 14 | userId 15 | }) 16 | } 17 | fetchJson('https://api.pedulilindungi.id/zone/v1', options) 18 | .then(json => { 19 | const result = { 20 | kode: json.data.zone, 21 | status: '', 22 | optional: '' 23 | } 24 | 25 | switch (json.data.zone) { 26 | case 'red': 27 | result.status = 'Anda berada di Zona Merah penyebaran COVID-19.' 28 | result.optional = 'Zona Merah adalah area yang sudah terdapat kasus Positif COVID-19.' 29 | break 30 | case 'yellow': 31 | result.status = 'Anda berada di Zona Kuning penyebaran COVID-19.' 32 | result.optional = 'Zona Kuning adalah area yang sudah terdapat kasus ODP atau PDP COVID-19.' 33 | break 34 | case 'green': 35 | result.status = 'Anda berada di Zona Hijau penyebaran COVID-19.' 36 | result.optional = 'Zona Hijau adalah area yang belum terdapat kasus PDP atau Positif COVID-19.' 37 | break 38 | } 39 | 40 | if (!json.success && json.message == 'Anda berada di zona aman.') { 41 | result.kode = 'green' 42 | result.status = 'Anda berada di Zona Hijau penyebaran COVID-19.' 43 | result.optional = 'Zona Hijau adalah area yang belum terdapat kasus PDP atau Positif COVID-19.' 44 | } 45 | resolve(result) 46 | }) 47 | .catch((err) => reject(err)) 48 | }) 49 | } 50 | 51 | async function getArea (latitude, longitude, size = 10) { 52 | return new Promise((resolve, reject) => { 53 | const options = { 54 | method: 'GET', 55 | headers: { 56 | Authorization: ' Basic dGVsa29tOmRhMWMyNWQ4LTM3YzgtNDFiMS1hZmUyLTQyZGQ0ODI1YmZlYQ== ', 57 | 'Content-Type': ' application/json ' 58 | } 59 | } 60 | fetchJson(`https://api.pedulilindungi.id/zone/v1/location/area?latitude=${latitude}&longitude=${longitude}&page=1&size=${size}`, options) 61 | .then(json => { 62 | if (json.success && json.code == 200) resolve(json) 63 | }) 64 | .catch((err) => reject(err)) 65 | }) 66 | }; 67 | 68 | module.exports = getLocationData = async (latitude, longitude) => { 69 | try { 70 | const responses = await Promise.all([getZoneStatus(latitude, longitude), getArea(latitude, longitude)]) 71 | const result = { 72 | kode: 200, 73 | status: responses[0].status, 74 | optional: responses[0].optional, 75 | data: [] 76 | } 77 | responses[1].data.map((x) => result.data.push(x)) 78 | return result 79 | } catch (err) { 80 | console.log(err) 81 | return { kode: 0 } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /lib/meme.js: -------------------------------------------------------------------------------- 1 | const { fetchJson, fetchBase64 } = require('../utils/fetcher') 2 | const fs = require('fs-extra') 3 | const { reject } = require('promise') 4 | const { 5 | apiSS 6 | } = JSON.parse(fs.readFileSync('./settings/api.json')) 7 | 8 | /** 9 | * Get meme from random subreddit 10 | * 11 | * @param {String} _subreddit 12 | * @return {Promise} Return meme from dankmemes, wholesomeanimemes, wholesomememes, AdviceAnimals, MemeEconomy, memes, terriblefacebookmemes, teenagers, historymemes 13 | */ 14 | const random = async (_subreddit) => new Promise((resolve, reject) => { 15 | console.log('looking for memes on ' + 'indonesia') 16 | fetchJson('https://meme-api.herokuapp.com/gimme/' + 'indonesia') 17 | .then((result) => resolve(result.url)) 18 | .catch((err) => { 19 | console.error(err) 20 | reject(err) 21 | }) 22 | }) 23 | 24 | const gambarbokep = async (_subreddit) => new Promise((resolve, reject) => { 25 | console.log('looking for gambar on ' + 'pussy') 26 | fetchJson('https://meme-api.herokuapp.com/gimme/' + 'pussy') 27 | .then((result) => resolve(result.url)) 28 | .catch((err) => { 29 | console.error(err) 30 | reject(err) 31 | }) 32 | }) 33 | 34 | /** 35 | * create custom meme 36 | * @param {String} imageUrl 37 | * @param {String} topText 38 | * @param {String} bottomText 39 | */ 40 | const custom = async (imageUrl, top, bottom) => new Promise((resolve, reject) => { 41 | topText = top.trim().replace(/\s/g, '_').replace(/\?/g, '~q').replace(/\%/g, '~p').replace(/\#/g, '~h').replace(/\//g, '~s') 42 | bottomText = bottom.trim().replace(/\s/g, '_').replace(/\?/g, '~q').replace(/\%/g, '~p').replace(/\#/g, '~h').replace(/\//g, '~s') 43 | fetchBase64(`https://api.memegen.link/images/custom/${topText}/${bottomText}.png?background=${imageUrl}`, 'image/png') 44 | .then((result) => resolve(result)) 45 | .catch((err) => { 46 | console.error(err) 47 | reject(err) 48 | }) 49 | }) 50 | 51 | const ss = async (url) => new Promise((resolve, reject) => { 52 | fetchBase64(`https://api.apiflash.com/v1/urltoimage?access_key=${apiSS}&url=${url}`) 53 | .then((res) => { 54 | resolve(res) 55 | }) 56 | .catch((err) => { 57 | reject(err) 58 | }) 59 | }) 60 | 61 | module.exports = { 62 | random, 63 | custom, 64 | gambarbokep, 65 | ss 66 | } 67 | -------------------------------------------------------------------------------- /lib/nekopoi.js: -------------------------------------------------------------------------------- 1 | 2 | const axios = require('axios') 3 | const cheerio = require('cheerio') 4 | 5 | /** 6 | * Get latest videos from Nekopoi. 7 | * @returns {Promise} Return latest videos from Nekopoi. 8 | */ 9 | const getLatest = () => new Promise((resolve, reject) => { 10 | const url = 'http://nekopoi.care' 11 | axios.get(url) 12 | .then((req) => { 13 | const title = [] 14 | const link = [] 15 | const image = [] 16 | const data = {} 17 | const soup = cheerio.load(req.data) 18 | soup('div.eropost').each((i, e) => { 19 | soup(e).find('h2').each((j, s) => { 20 | title.push(soup(s).find('a').text().trim()) 21 | link.push(soup(s).find('a').attr('href')) 22 | }) 23 | image.push(soup(e).find('img').attr('src')) 24 | }) 25 | if (data == undefined) { 26 | reject('No result :(') 27 | } else { 28 | let i = Math.floor(Math.random() * title.length) 29 | let hehe = { 30 | "title": title[i], 31 | "image": image[i], 32 | "link": link[i] 33 | } 34 | resolve(hehe) 35 | } 36 | }) 37 | .catch((err) => reject(err)) 38 | }) 39 | 40 | /** 41 | * Get Nekopoi video metadata. 42 | * @param {String} url 43 | * @returns {Promise} Return metadata. 44 | */ 45 | const getVideo = (url) => new Promise((resolve, reject) => { 46 | axios.get(url) 47 | .then((req) => { 48 | try { 49 | const links = [] 50 | let soup = cheerio.load(req.data) 51 | let title = soup("title").text() 52 | soup('div.liner').each((i, e) => { 53 | soup(e).find('div.listlink').each((j, s) => { 54 | soup(s).find('a').each((p, q) => { 55 | links.push(soup(q).attr('href')) 56 | }) 57 | }) 58 | }) 59 | const data = { 60 | "title": title, 61 | "links": links 62 | } 63 | resolve(data) 64 | } catch (err) { 65 | reject(err) 66 | } 67 | }) 68 | .catch((err) => reject(err)) 69 | }) 70 | 71 | module.exports = { 72 | getLatest, 73 | getVideo 74 | } -------------------------------------------------------------------------------- /lib/nsfw.js: -------------------------------------------------------------------------------- 1 | const { fetchJson } = require('../utils/fetcher') 2 | 3 | /** 4 | * Get random lewd images from defined subreddits. 5 | * @returns {Promise} Return lewd. 6 | */ 7 | const randomLewd = () => new Promise((resolve, reject) => { 8 | const tag = ['ecchi', 'lewdanimegirls', 'hentai', 'hentaifemdom', 'hentaiparadise', 'hentai4everyone', 'animearmpits', 'animefeets', 'animethighss', 'animebooty', 'biganimetiddies', 'animebellybutton', 'sideoppai', 'ahegao'] 9 | const randTag = tag[Math.random() * tag.length | 0] 10 | console.log(`Searching lewd from ${randTag}...`) 11 | fetchJson('https://meme-api.herokuapp.com/gimme/' + randTag) 12 | .then((result) => resolve(result)) 13 | .catch((err) => reject(err)) 14 | }) 15 | const armpits = () => new Promise((resolve, reject) => { 16 | console.log('Searching for armpits...') 17 | fetchJson('https://meme-api.herokuapp.com/gimme/animearmpits') 18 | .then((result) => resolve(result)) 19 | .catch((err) => { 20 | reject(err) 21 | }) 22 | }) 23 | 24 | const feets = () => new Promise((resolve, reject) => { 25 | console.log('Searching for feets...') 26 | fetchJson('https://meme-api.herokuapp.com/gimme/animefeets') 27 | .then((result) => resolve(result)) 28 | .catch((err) => { 29 | reject(err) 30 | }) 31 | }) 32 | 33 | const thighs = () => new Promise((resolve, reject) => { 34 | console.log('Searching for thighs...') 35 | fetchJson('https://meme-api.herokuapp.com/gimme/animethighss') 36 | .then((result) => resolve(result)) 37 | .catch((err) => { 38 | reject(err) 39 | }) 40 | }) 41 | 42 | const ass = () => new Promise((resolve, reject) => { 43 | console.log('Searching for ass...') 44 | fetchJson('https://meme-api.herokuapp.com/gimme/animebooty') 45 | .then((result) => resolve(result)) 46 | .catch((err) => { 47 | reject(err) 48 | }) 49 | }) 50 | 51 | const boobs = () => new Promise((resolve, reject) => { 52 | console.log('Searching for boobs...') 53 | fetchJson('https://meme-api.herokuapp.com/gimme/biganimetiddies') 54 | .then((result) => resolve(result)) 55 | .catch((err) => { 56 | reject(err) 57 | }) 58 | }) 59 | 60 | const belly = () => new Promise((resolve, reject) => { 61 | console.log('Searching for belly...') 62 | fetchJson('https://meme-api.herokuapp.com/gimme/animebellybutton') 63 | .then((result) => resolve(result)) 64 | .catch((err) => { 65 | reject(err) 66 | }) 67 | }) 68 | 69 | const sideboobs = () => new Promise((resolve, reject) => { 70 | console.log('Searching for sideboobs...') 71 | fetchJson('https://meme-api.herokuapp.com/gimme/sideoppai') 72 | .then((result) => resolve(result)) 73 | .catch((err) => { 74 | reject(err) 75 | }) 76 | }) 77 | 78 | const ahegao = () => new Promise((resolve, reject) => { 79 | console.log('Searching for ahegao...') 80 | fetchJson('https://meme-api.herokuapp.com/gimme/ahegao') 81 | .then((result) => resolve(result)) 82 | .catch((err) => { 83 | reject(err) 84 | }) 85 | }) 86 | 87 | module.exports = { 88 | randomLewd, 89 | armpits, 90 | feets, 91 | thighs, 92 | ass, 93 | boobs, 94 | belly, 95 | sideboobs, 96 | ahegao 97 | } -------------------------------------------------------------------------------- /lib/point.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs-extra') 2 | 3 | /** 4 | * Get user ID from db. 5 | * @param {string} userId 6 | * @param {object} _dir 7 | * @returns {string} 8 | */ 9 | const getPointId = (userId, _dir) => { 10 | let pos = null 11 | let found = false 12 | Object.keys(_dir).forEach((i) => { 13 | if (_dir[i].id === userId) { 14 | pos = i 15 | found = true 16 | } 17 | }) 18 | if (found === false && pos === null) { 19 | const obj = { id: userId, point: 0, level: 1 } 20 | _dir.push(obj) 21 | fs.writeFileSync('./settings/point.json', JSON.stringify(_dir)) 22 | return userId 23 | } else { 24 | return _dir[pos].id 25 | } 26 | } 27 | 28 | /** 29 | * Get user level from db. 30 | * @param {string} userId 31 | * @param {object} _dir 32 | * @returns {number} 33 | */ 34 | const getLevelingLevel = (userId, _dir) => { 35 | let pos = null 36 | let found = false 37 | Object.keys(_dir).forEach((i) => { 38 | if (_dir[i].id === userId) { 39 | pos = i 40 | found = true 41 | } 42 | }) 43 | if (found === false && pos === null) { 44 | const obj = { id: userId, point: 0, level: 1 } 45 | _dir.push(obj) 46 | fs.writeFileSync('./settings/point.json', JSON.stringify(_dir)) 47 | return 1 48 | } else { 49 | return _dir[pos].level 50 | } 51 | } 52 | 53 | /** 54 | * Get user XP from db. 55 | * @param {string} userId 56 | * @param {object} _dir 57 | * @returns {number} 58 | */ 59 | const getLevelingPoint = (userId, _dir) => { 60 | let pos = null 61 | let found = false 62 | Object.keys(_dir).forEach((i) => { 63 | if (_dir[i].id === userId) { 64 | pos = i 65 | found = true 66 | } 67 | }) 68 | if (found === false && pos === null) { 69 | const obj = { id: userId, point: 0, level: 1 } 70 | _dir.push(obj) 71 | fs.writeFileSync('./settings/point.json', JSON.stringify(_dir)) 72 | return 0 73 | } else { 74 | return _dir[pos].point 75 | } 76 | } 77 | 78 | /** 79 | * Add user level to db. 80 | * @param {string} userId 81 | * @param {number} amount 82 | * @param {object} _dir 83 | */ 84 | const addLevelingLevel = (userId, amount, _dir) => { 85 | let position = null 86 | Object.keys(_dir).forEach((i) => { 87 | if (_dir[i].id === userId) { 88 | position = i 89 | } 90 | }) 91 | if (position !== null) { 92 | _dir[position].level += amount 93 | fs.writeFileSync('./settings/point.json', JSON.stringify(_dir)) 94 | } 95 | } 96 | 97 | /** 98 | * Add user XP to db. 99 | * @param {string} userId 100 | * @param {number} amount 101 | * @param {object} _dir 102 | */ 103 | const addLevelingPoint = (userId, amount, _dir) => { 104 | let position = null 105 | Object.keys(_dir).forEach((i) => { 106 | if (_dir[i].id === userId) { 107 | position = i 108 | } 109 | }) 110 | if (position !== null) { 111 | _dir[position].point += amount 112 | fs.writeFileSync('./settings/point.json', JSON.stringify(_dir)) 113 | } 114 | } 115 | 116 | /** 117 | * Get user rank. 118 | * @param {string} userId 119 | * @param {object} _dir 120 | * @returns {number} 121 | */ 122 | const getUserRank = (userId, _dir) => { 123 | let position = null 124 | let found = false 125 | _dir.sort((a, b) => (a.point < b.point) ? 1 : -1) 126 | Object.keys(_dir).forEach((i) => { 127 | if (_dir[i].id === userId) { 128 | position = i 129 | found = true 130 | } 131 | }) 132 | if (found === false && position === null) { 133 | const obj = { id: userId, point: 0, level: 1 } 134 | _dir.push(obj) 135 | fs.writeFileSync('./settings/point.json', JSON.stringify(_dir)) 136 | return 99 137 | } else { 138 | return position + 1 139 | } 140 | } 141 | 142 | // Cooldown XP gains to prevent spam 143 | const xpGain = new Set() 144 | 145 | /** 146 | * Check is user exist in set. 147 | * @param {string} userId 148 | * @returns {boolean} 149 | */ 150 | const isGained = (userId) => { 151 | return !!xpGain.has(userId) 152 | } 153 | 154 | /** 155 | * Add user in set and delete it when it's 1 minute. 156 | * @param {string} userId 157 | */ 158 | const addCooldown = (userId) => { 159 | xpGain.add(userId) 160 | setTimeout(() => { 161 | return xpGain.delete(userId) 162 | }, 60000) // Each minute 163 | } 164 | 165 | module.exports = { 166 | getPointId, 167 | getLevelingLevel, 168 | getLevelingPoint, 169 | addLevelingLevel, 170 | addLevelingPoint, 171 | getUserRank, 172 | isGained, 173 | addCooldown 174 | } -------------------------------------------------------------------------------- /lib/poll.js: -------------------------------------------------------------------------------- 1 | const request = require('request'); 2 | const fs = require('fs'); 3 | const dm = require('@open-wa/wa-decrypt'); 4 | const multer = require('multer'); 5 | const upload = multer(); 6 | 7 | function voteadapter(piyo, message, pollfile, voterslistfile) { 8 | console.log('flag1') 9 | //voteadapter 10 | console.log(voterslistfile, 'Piyobot') 11 | if (isvoted(message, voterslistfile)) { 12 | piyo.reply(message.chatId, 'Kamu sudah memvote dalam polling ini!', message.id, true); 13 | return; 14 | } 15 | //console.log('flag2') 16 | let data = readJsonFile(pollfile) 17 | if (data['candis'] === 'null') { 18 | piyo.reply(message.chatId, 'Tidak ada kandidat dalam poll ini!', message.id, true); 19 | return; 20 | } 21 | let arr = data['candis'] 22 | // console.log(arr) 23 | for (let i = 0; i < arr.length; i++) { 24 | if (message.body.includes((i + 1) 25 | .toString())) { 26 | //console.log(i) 27 | addvote(piyo, message, i, pollfile); 28 | return; 29 | } 30 | } 31 | console.log('here') 32 | piyo.reply(message.chatId, 'Salah!!!', message.id, true); 33 | } 34 | async function addcandidate(piyo, message, candi, pollfile, voterslistfile) { 35 | if (await isGroupAdmin(piyo, message, message, message.author)) { 36 | // console.log('admin logging') 37 | } else { 38 | piyo.reply(message.chatId, `Hubungi admin grup untuk menambahkan ${candi}`, message.id, true); 39 | return; 40 | } 41 | let data = readJsonFile(pollfile) 42 | if (data['candis'] === 'null') { 43 | // let arra=[]; 44 | let cd = { 45 | name: candi, 46 | votes: 0 47 | }; 48 | // cd.put('name',candi); 49 | // cd.put('votes',0); 50 | // arra.push(cd); 51 | delete data['candis']; 52 | // data.put('candis',arra); 53 | data['candis'] = [cd,] 54 | } else { 55 | if (data['candis'].length >= 9) { 56 | piyo.reply(message.chatId, 'Kamu tidak bisa menambahkan lebih dari 9 kandidat!', message.id, true); 57 | return; 58 | } 59 | let cd = { 60 | name: candi, 61 | votes: 0 62 | }; 63 | data['candis'].push(cd); 64 | } 65 | //l(base.toString()); 66 | saveJsonFile(pollfile, data) 67 | piyo.reply(message.chatId, `Berhasil menambahkan ${candi} sebagai kandidat`, message.id, true); 68 | } 69 | 70 | function addvote(piyo, message, num, pollfile, voterslistfile) { 71 | console.log(num) 72 | let data = readJsonFile(pollfile) 73 | let vts = data['candis'][num]['votes']; 74 | vts = vts + 1; 75 | delete data['candis'][num]['votes']; 76 | data['candis'][num]['votes'] = vts 77 | console.log(data) 78 | saveJsonFile(pollfile, data) 79 | let op; 80 | op = '*Kamu memilih ' + data['candis'][num]['name'] + '*\n 🎯️ Poll : *' + data['title'] + '*\n'; 81 | let ls = ''; 82 | let arr = data['candis']; 83 | for (let i = 0; i < arr.length; i++) { 84 | let cd = arr[i]; 85 | ls = ls + ((i + 1) 86 | .toString()) + ')' + cd['name'] + ' : [' + cd['votes'] + ' Votes] \n'; 87 | } 88 | op = op + ls; 89 | op = op + '\n Untuk memvote silakan ketik /vote \n [Contoh */vote 2*]'; 90 | piyo.reply(message.chatId, op, message.id, true); 91 | addvotedlog(message); 92 | } 93 | 94 | function isvoted(message, voterslistfile) { 95 | let data = readJsonFile(voterslistfile) 96 | // console.log(data['list']) 97 | return data['list'].includes(message.author); 98 | } 99 | 100 | function addvotedlog(message) { 101 | let data = readJsonFile(voterslistfile) 102 | data['list'].push(message.author) 103 | saveJsonFile(voterslistfile, data); 104 | } 105 | 106 | function getpoll(piyo, message, pollfile, voterslistfile) { 107 | let data = readJsonFile(pollfile) 108 | //console.log(data) 109 | let op = ''; 110 | if (data['candis'] == 'null') { 111 | op = '🎯️ *Poll : ' + data['title'] + '*\n Tidak ada kandidat! \n gunakan /addv untuk menambahkan kandidat'; 112 | } else { 113 | op = '🎯️ *Poll : ' + data['title'] + '*\n'; 114 | let ls = ''; 115 | let arr = data['candis']; 116 | for (let i = 0; i < arr.length; i++) { 117 | let cd = arr[i]; 118 | ls = ls + (i + 1) 119 | .toString() + ')' + cd['name'] + ' : [' + cd['votes'] + ' Votes] \n'; 120 | } 121 | op = op + ls; 122 | op = op + '\n Untuk memvote silakan ketik /vote \n [Contoh */vote 2*]'; 123 | } 124 | piyo.reply(message.chatId, op, message.id, true) 125 | } 126 | async function adminpollreset(piyo, message, polltitle, pollfile, voterslistfile) { 127 | if (await isGroupAdmin(piyo, message, message.author)) { 128 | var datetime = new Date(); 129 | // savefile(todaysdate+'.json',getFile(pollfile)); 130 | try { 131 | saveJsonFile('poll_logs.json', readJsonFile(pollfile)) 132 | } catch (e) { 133 | console.log('poll file not eist for backup') 134 | } 135 | let base = { 136 | title: polltitle, 137 | polldate: datetime.toISOString() 138 | .slice(0, 10), 139 | candis: 'null' 140 | } 141 | //l(base.toString()); 142 | saveJsonFile(pollfile, base) 143 | piyo.reply(message.chatId, `*🎉️ *Berhasil membuat poll\n\n 🎯️ *Title : ${polltitle}*\n \n⭐️ gunakan /addv untuk menambahkan kandidat`, message.id); 144 | //voterresetter 145 | let data = { 146 | list: ['testentry'] 147 | } 148 | saveJsonFile(voterslistfile, data); 149 | } else { 150 | piyo.reply(message.chatId, '*Mohon maaf fitur ini hanya bisa digunakan oleh admin grup!*', message.id) 151 | } 152 | } 153 | var configFiles = './configFiles' 154 | 155 | function readJsonFile(filename) { 156 | filename = configFiles + filename; 157 | let rawdata = fs.readFileSync(filename); 158 | return JSON.parse(rawdata); 159 | } 160 | 161 | function saveJsonFile(filename, object) { 162 | filename = configFiles + filename; 163 | // console.log('pokelog '+filename) 164 | var jsonContent = JSON.stringify(object); 165 | fs.writeFile(filename, jsonContent, 'utf8', function (err) { 166 | if (err) { 167 | console.log('An error occured while writing JSON Object to File.' + filename); 168 | return console.log(err); 169 | } 170 | }); 171 | } 172 | async function isGroupAdmin(piyo, message, author) { 173 | let value = await piyo.getGroupAdmins(message.chatId) 174 | return value.toString() 175 | .includes(message.author) 176 | } 177 | module.exports = { 178 | addcandidate, 179 | voteadapter, 180 | getpoll, 181 | adminpollreset, 182 | readJsonFile, 183 | saveJsonFile 184 | } 185 | -------------------------------------------------------------------------------- /lib/premium.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs-extra') 2 | const toMs = require('ms') 3 | 4 | /** 5 | * Add premium user. 6 | * @param {String} userId 7 | * @param {String} expired 8 | * @param {Object} _dir 9 | */ 10 | const addPremiumUser = (userId, expired, _dir) => { 11 | const obj = { id: userId, expired: Date.now() + toMs(expired) } 12 | _dir.push(obj) 13 | fs.writeFileSync('./settings/premium.json', JSON.stringify(_dir)) 14 | } 15 | 16 | /** 17 | * Get premium user position. 18 | * @param {String} userId 19 | * @param {Object} _dir 20 | * @returns {Number} 21 | */ 22 | const getPremiumPosition = (userId, _dir) => { 23 | let position = null 24 | Object.keys(_dir).forEach((i) => { 25 | if (_dir[i].id === userId) { 26 | position = i 27 | } 28 | }) 29 | if (position !== null) { 30 | return position 31 | } 32 | } 33 | 34 | /** 35 | * Get premium user expire. 36 | * @param {String} userId 37 | * @param {Object} _dir 38 | * @returns {Number} 39 | */ 40 | const getPremiumExpired = (userId, _dir) => { 41 | let position = null 42 | Object.keys(_dir).forEach((i) => { 43 | if (_dir[i].id === userId) { 44 | position = i 45 | } 46 | }) 47 | if (position !== null) { 48 | return _dir[position].expired 49 | } 50 | } 51 | 52 | /** 53 | * Check user is premium. 54 | * @param {String} userId 55 | * @param {Object} _dir 56 | * @returns {Boolean} 57 | */ 58 | const checkPremiumUser = (userId, _dir) => { 59 | let status = false 60 | Object.keys(_dir).forEach((i) => { 61 | if (_dir[i].id === userId) { 62 | status = true 63 | } 64 | }) 65 | return status 66 | } 67 | 68 | /** 69 | * Constantly checking premium. 70 | * @param {Object} _dir 71 | */ 72 | const expiredCheck = (_dir) => { 73 | setInterval(() => { 74 | let position = null 75 | Object.keys(_dir).forEach((i) => { 76 | if (Date.now() >= _dir[i].expired) { 77 | position = i 78 | } 79 | }) 80 | if (position !== null) { 81 | console.log(`Premium expired: ${_dir[position].id}`) 82 | _dir.splice(position, 1) 83 | fs.writeFileSync('./settings/premium.json', JSON.stringify(_dir)) 84 | } 85 | }, 1000) 86 | } 87 | 88 | /** 89 | * Get all premium user ID. 90 | * @param {Object} _dir 91 | * @returns {String[]} 92 | */ 93 | const getAllPremiumUser = (_dir) => { 94 | const array = [] 95 | Object.keys(_dir).forEach((i) => { 96 | array.push(_dir[i].id) 97 | }) 98 | return array 99 | } 100 | 101 | module.exports = { 102 | addPremiumUser, 103 | getPremiumExpired, 104 | getPremiumPosition, 105 | expiredCheck, 106 | checkPremiumUser, 107 | getAllPremiumUser 108 | } 109 | -------------------------------------------------------------------------------- /lib/rdt.js: -------------------------------------------------------------------------------- 1 | const tesseract = require("node-tesseract-ocr") 2 | 3 | const imagetotext = (buffer) => { 4 | return new Promise((resolve, reject) => { 5 | const config = { 6 | lang: "eng", 7 | oem: 1, 8 | psm: 3, 9 | } 10 | tesseract.recognize(buffer, config) 11 | .then(result => { 12 | resolve(result) 13 | }) 14 | .catch(err => { 15 | reject(err) 16 | }) 17 | }) 18 | } 19 | 20 | module.exports = imagetotext 21 | //INSTALL TESSERACT-OCR DULU YAAA ADA DI README MD 22 | -------------------------------------------------------------------------------- /lib/resep.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const { resolve, reject } = require('promise') 3 | 4 | const resep = async (menu) => new Promise((resolve, reject) => { 5 | axios.get('https://mnazria.herokuapp.com/api/resep?key=resep-' + menu) 6 | .then(async (res) => { 7 | const { results } = await res.data 8 | const random = Math.floor(Math.random() * 16) 9 | axios.get('https://mnazria.herokuapp.com/api/resep?key=resep-' + menu) 10 | .then(async (result) => { 11 | const { results } = await result.data 12 | const bahannya = await `${results.ingredient}` 13 | const bahan = bahannya.replace(/,/g,'\n') 14 | const tutornya = await `${results.step}` 15 | const tutornih = tutornya.replace(/,/g,'\n') 16 | const tutor = tutornih.replace(/.,/g,'\n') 17 | const hasil = `*Judul:* ${results.title}\n*Penulis:* ${results.author.user}\n*Rilis:* ${results.author.datePublished}\n*Level:* ${results.dificulty}\n*Waktu:* ${results.times}\n*Porsi:* ${results.servings}\n\n*Bahan-bahan:*\n${bahan}\n\n*Step-by-step:*\n${tutor}` 18 | resolve(hasil) 19 | }) 20 | }) 21 | .catch((err) => { 22 | console.log(err) 23 | reject(err) 24 | }) 25 | }) 26 | 27 | module.exports = { 28 | resep 29 | } 30 | -------------------------------------------------------------------------------- /lib/rugaapi.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | require('dotenv').config() 3 | var needle = require('needle') 4 | const { fetchJson } = require('../utils/fetcher') 5 | const fs = require('fs-extra') 6 | const setting = JSON.parse(fs.readFileSync('./settings/setting.json')) 7 | const link = 'https://arugaz.herokuapp.com' 8 | const { vhtearkey } = setting 9 | const lolhuman = setting 10 | const apizeks = setting 11 | const caliph = setting 12 | /** 13 | * 14 | * Create shorturl 15 | * 16 | * @param {String} url 17 | */ 18 | const shortener = (url) => new Promise((resolve, reject) => { 19 | console.log('Creating short url...') 20 | fetchText(`https://tinyurl.com/api-create.php?url=${url}`) 21 | .then((text) => resolve(text)) 22 | .catch((err) => reject(err)) 23 | }) 24 | 25 | const stickerText = (kata) => new Promise((resolve, reject) => { 26 | console.log(`Creating sticker from ${kata} text...`) 27 | fetchJson('https://st4rz.herokuapp.com/api/ttp?kata=' + kata) 28 | .then((result) => resolve(result)) 29 | .catch((err) => reject(err)) 30 | }) 31 | 32 | const spotify = async (url) => new Promise((resolve, reject) => { 33 | axios.get(`https://caliph71.xyz/spotifydl?apikey=${caliph}&url=${url}`) 34 | .then(res => { 35 | resolve(res.data) 36 | }) 37 | .catch(err => { 38 | reject(err) 39 | }) 40 | }) 41 | 42 | const qrcode = async (url, size) => new Promise((resolve, reject) => { 43 | axios.get(`http://api.qrserver.com/v1/create-qr-code/?data=${url}&size=${size}x${size}`) 44 | .then((res) => { 45 | resolve(`http://api.qrserver.com/v1/create-qr-code/?data=${url}&size=${size}x${size}`) 46 | }) 47 | .catch((err) => { 48 | reject(err) 49 | }) 50 | }) 51 | 52 | const darkjokes = async () => new Promise((resolve, reject) => { 53 | axios.get(`http://api-zeks.harispoppy.com/api/darkjokes?apikey=benbenz`) 54 | .then((res) => { 55 | resolve(res.data.result) 56 | }) 57 | .catch((err) => { 58 | reject(err) 59 | }) 60 | }) 61 | 62 | const qrread = async (url) => new Promise((resolve, reject) => { 63 | axios.get(`http://api.qrserver.com/v1/read-qr-code/?fileurl=${url}`) 64 | .then((res) => { 65 | if (res.data[0].symbol[0].data == null) return resolve(`Link yang anda masukan salah`) 66 | const textqr = `Hasil : ${res.data[0].symbol[0].data}` 67 | resolve(textqr) 68 | }) 69 | .catch((err) => { 70 | reject(err) 71 | }) 72 | }) 73 | 74 | /** 75 | * Creater sticker lightning. 76 | * @param {String} url 77 | */ 78 | const stickerLight = (url) => new Promise((resolve, reject) => { 79 | console.log('Creating GIF...') 80 | fetchJson('https://api.vhtear.com/lightning?link=' + url + '&apikey=' + vhtearkey) 81 | .then((result) => resolve(result)) 82 | .catch((err) => reject(err)) 83 | }) 84 | 85 | const stickerFire = (url) => new Promise((resolve, reject) => { 86 | console.log('Creating GIF...') 87 | fetchJson('https://api.vhtear.com/burning_fire?link=' + url + '&apikey=' + vhtearkey) 88 | .then((result) => resolve(result)) 89 | .catch((err) => reject(err)) 90 | }) 91 | 92 | /** 93 | * Get PlayStore search results. 94 | * @param {String} query 95 | */ 96 | const playstore = (query) => new Promise((resolve, reject) => { 97 | console.log(`Fetching PlayStore data for ${query}...`) 98 | fetchJson('https://api.vhtear.com/playstore?query=' + query + '&apikey=' + vhtearkey) 99 | .then((result) => resolve(result)) 100 | .catch((err) => reject(err)) 101 | }) 102 | 103 | /** 104 | * Get Shopee search results. 105 | * @param {String} query 106 | * @param {String} count 107 | */ 108 | const shopee = (query, count) => new Promise((resolve, reject) => { 109 | console.log(`Fetching Shopee data for ${query}...`) 110 | fetchJson('https://api.vhtear.com/shopee?query=' + query + '&count=' + count + '&apikey=' + vhtearkey) 111 | .then((result) => resolve(result)) 112 | .catch((err) => reject(err)) 113 | }) 114 | 115 | const gsmarena = (hp) => new Promise((resolve, reject) => { 116 | console.log(`Getting phone info for ${hp}...`) 117 | fetchJson('https://api.vhtear.com/gsmarena?query=' + hp + '&apikey=' + vhtearkey) 118 | .then((result) => resolve(result)) 119 | .catch((err) => reject(err)) 120 | }) 121 | 122 | const distance = (kotaasal, kotatujuan) => new Promise((resolve, reject) => { 123 | console.log(`Mencari informasi...`) 124 | fetchJson('https://api.vhtear.com/distance?from=' + kotaasal + '&to=' + kotatujuan + '&apikey=' + vhtearkey) 125 | .then((result) => resolve(result)) 126 | .catch((err) => reject(err)) 127 | }) 128 | 129 | const movie = (query) => new Promise((resolve, reject) => { 130 | console.log(`Searching for Movie ${query}...`) 131 | fetchJson(`https://api.vhtear.com/downloadfilm?judul=${query}&apikey=${vhtearkey}`) 132 | .then((result) => resolve(result)) 133 | .catch((err) => reject(err)) 134 | }) 135 | 136 | const film = async (judul) => new Promise((resolve, reject) => { 137 | console.log(`mencari film....`) 138 | fetchJson('https://api.vhtear.com/downloadfilm?judul=' + judul + '&apikey=' + vhtearkey) 139 | .then((result) => resolve(result)) 140 | .catch((err) => reject(err)) 141 | }) 142 | 143 | const twit = async (url) => new Promise((resolve, reject) => { 144 | axios.get(`http://api.kocakz.xyz/api/media/twvid?url=${url}`) 145 | .then(res => { 146 | resolve(res.data) 147 | }) 148 | .catch(err => { 149 | reject(err) 150 | }) 151 | }) 152 | 153 | const twitter = async (url) => new Promise(async (resolve, reject) => { 154 | const api = `https://api.vhtear.com/twitter?link=${url}&apikey=${vhtearkey}` 155 | axios.get(api).then(async (res) => { 156 | const st = res.data.result 157 | if (st.status === false) { 158 | resolve(`Media Tidak Di Temukan`) 159 | } else { 160 | resolve(st) 161 | } 162 | }).catch(err => { 163 | console.log(err) 164 | resolve(`Maaf, Server Sedang Error`) 165 | }) 166 | }) 167 | const linesticker = () => new Promise((resolve, reject) => { 168 | console.log('Searching for sticker line...') 169 | fetchJson(`https://api.vhtear.com/newsticker?apikey=${vhtearkey}`) 170 | .then((result) => resolve(result)) 171 | .catch((err) => reject(err)) 172 | }) 173 | 174 | const ongkir = (kurir, askot, tukot) => new Promise((resolve, reject) => { 175 | console.log(`Checking Ongkir...`) 176 | fetchJson(`https://api.vhtear.com/cekongkir?kurir=${kurir}&fromcity=${askot}&tocity=${tukot}&apikey=${vhtearkey}`) 177 | .then((result) => resolve(result)) 178 | .catch((err) => reject(err)) 179 | }) 180 | const sleep = async (ms) => { 181 | return new Promise(resolve => setTimeout(resolve, ms)); 182 | } 183 | 184 | const getStickerMaker = (link) => new Promise((resolve, reject) => { 185 | fetch('https://api.areltiyan.site/sticker_maker?text=' + encodeURIComponent(link), { 186 | method: 'GET', 187 | }) 188 | .then(async res => { 189 | const text = await res.json() 190 | 191 | resolve(text) 192 | 193 | }) 194 | .catch(err => reject(err)) 195 | }); 196 | 197 | const tosticker = (arguments) => { 198 | const phrase = arguments.map((result, index) => `${result}${index !== 0 && (index + 1) % 3 === 0 ? "%0A" : "%20"}`).join(""); 199 | const APIURL = `https://raterian.sirv.com/New%20Project.png?text.0.text=${phrase}&text.0.position.y=-50%25&text.0.color=000000&text.0.font.family=Poppins&text.0.font.weight=600&text.0.outline.color=ffffff&text.0.outline.width=5`; 200 | return APIURL; 201 | }; 202 | 203 | /** 204 | * @author Aruga 205 | * @license MIT 206 | */ 207 | 208 | "use strict" 209 | const cheerio = require('cheerio') 210 | 211 | /** 212 | * Get latest videos from Nekopoi. 213 | * @returns {Promise} Return latest videos from Nekopoi. 214 | */ 215 | const getLatest = () => new Promise((resolve, reject) => { 216 | const url = 'http://nekopoi.care' 217 | axios.get(url) 218 | .then((req) => { 219 | const title = [] 220 | const link = [] 221 | const image = [] 222 | const data = {} 223 | const soup = cheerio.load(req.data) 224 | soup('div.eropost').each((i, e) => { 225 | soup(e).find('h2').each((j, s) => { 226 | title.push(soup(s).find('a').text().trim()) 227 | link.push(soup(s).find('a').attr('href')) 228 | }) 229 | image.push(soup(e).find('img').attr('src')) 230 | }) 231 | if (data == undefined) { 232 | reject('No result :(') 233 | } else { 234 | let i = Math.floor(Math.random() * title.length) 235 | let hehe = { 236 | "title": title[i], 237 | "image": image[i], 238 | "link": link[i] 239 | } 240 | resolve(hehe) 241 | } 242 | }) 243 | .catch((err) => reject(err)) 244 | }) 245 | 246 | /** 247 | * Get Nekopoi video metadata. 248 | * @param {String} url 249 | * @returns {Promise} Return metadata. 250 | */ 251 | const getVideo = (url) => new Promise((resolve, reject) => { 252 | axios.get(url) 253 | .then((req) => { 254 | try { 255 | const links = [] 256 | let soup = cheerio.load(req.data) 257 | let title = soup("title").text() 258 | soup('div.liner').each((i, e) => { 259 | soup(e).find('div.listlink').each((j, s) => { 260 | soup(s).find('a').each((p, q) => { 261 | links.push(soup(q).attr('href')) 262 | }) 263 | }) 264 | }) 265 | const data = { 266 | "title": title, 267 | "links": links 268 | } 269 | resolve(data) 270 | } catch (err) { 271 | reject(err) 272 | } 273 | }) 274 | .catch((err) => reject(err)) 275 | }) 276 | 277 | const missing = (atas, tengah, bawah, url) => new Promise((resolve, reject) => { 278 | console.log('Creating image...') 279 | fetchJson('https://api.vhtear.com/missingperson?text1=' + atas + '&text2=' + tengah + '&text3=' + bawah + '&link=' + url + '&apikey=' + vhtearkey) 280 | .then((result) => resolve(result)) 281 | .catch((err) => reject(err)) 282 | }) 283 | 284 | const harta = (teks) => new Promise((resolve, reject) => { 285 | console.log('Creating image...') 286 | fetchJson('https://api.vhtear.com/hartatahta?text=' + teks + ' &apikey=' + vhtearkey) 287 | .then((result) => resolve(result)) 288 | .catch((err) => reject(err)) 289 | }) 290 | 291 | const brainlyy = (teks) => new Promise((resolve, reject) => { 292 | console.log('Getting Answer In Brainly...') 293 | fetchJson('https://api.vhtear.com/branly?query=' + teks + ' &apikey=' + vhtearkey) 294 | .then((result) => resolve(result)) 295 | .catch((err) => reject(err)) 296 | }) 297 | 298 | const joox = (judul) => new Promise((resolve, reject) => { 299 | console.log(`Getting Joox music for ${judul}...`) 300 | fetchJson('https://lolhuman.herokuapp.com/api/jooxplay?apikey=' + lolhuman + '&query=' + judul) 301 | .then((result) => resolve(result)) 302 | .catch((err) => reject(err)) 303 | }) 304 | 305 | /** 306 | * Search anime source. 307 | * @param {Buffer} imageBase64 308 | */ 309 | const whatanime = (imageBase64) => new Promise((resolve, reject) => { 310 | console.log('Searching for anime source...') 311 | fetchJson('https://trace.moe/api/search', { 312 | method: 'POST', 313 | body: JSON.stringify({ image: imageBase64 }), 314 | headers: { "Content-Type": "application/json" } 315 | }) 316 | .then((result) => resolve(result)) 317 | .catch((err) => reject(err)) 318 | }) 319 | 320 | /** 321 | * Get media from Facebook. 322 | * @param {String} query 323 | */ 324 | const facebook = (query) => new Promise((resolve, reject) => { 325 | console.log(`Downloading FB Video from ${query}`) 326 | fetchJson(`https://videfikri.com/api/fbdl/?urlfb=${query}`) 327 | .then((result) => resolve(result)) 328 | .catch((err) => reject(err)) 329 | }) 330 | 331 | const cersex = async () => new Promise((resolve, reject) => { 332 | console.log(`WAIT YE`) 333 | fetchJson(`https://api.vhtear.com/cerita_sex&apikey=${vhtearkey}`) 334 | .then((result) => resolve(result)) 335 | .catch((err) => reject(err)) 336 | }) 337 | 338 | const nick = async () => new Promise((resolve, reject) => { 339 | console.log(`Sedang mengirim`) 340 | fetchJson(`https://api.zeks.xyz/api/nickepep?apikey=${apizeks}`) 341 | .then((result) => resolve(result)) 342 | .catch((err) => reject(err)) 343 | } 344 | ) 345 | 346 | const nhpdf = (query) => new Promise((resolve, reject) => { 347 | console.log(`Downloading PDF from ${query}`) 348 | fetchJson(`https://api.vhtear.com/nhentaipdfdownload?query=${query}&apikey=${vhtearkey}`) 349 | .then((result) => resolve(result)) 350 | .catch((err) => reject(err)) 351 | }) 352 | 353 | 354 | const epep = async () => new Promise((resolve, reject) => { 355 | console.log(`WAIT YE`) 356 | fetchJson(`https://api.vhtear.com/list_heroff&apikey=${vhtearkey}`) 357 | .then((result) => resolve(result)) 358 | .catch((err) => reject(err)) 359 | }) 360 | 361 | const nowm = async (url) => new Promise((resolve, reject) => { 362 | axios.get(`https://arugaz.my.id/api/media/tiktok?url=${url}`) 363 | .then(res => { 364 | resolve(res.data) 365 | }) 366 | .catch(err => { 367 | reject(err) 368 | }) 369 | }) 370 | 371 | const tik = (url) => new Promise((resolve, reject) => { 372 | console.log(`Get TikTok media from ${url}`) 373 | fetchJson(`https://api.vhtear.com/tiktokdl?link=${url}&apikey=${vhtearkey}`) 374 | .then((result) => resolve(result)) 375 | .catch((err) => reject(err)) 376 | }) 377 | 378 | 379 | const tiktok = (url) => new Promise((resolve, reject) => { 380 | console.log('Get metadata from =>', url) 381 | getVideoMeta(url, { noWaterMark: true, hdVideo: true }) 382 | .then(async (result) => { 383 | if (result.videoUrlNoWaterMark) { 384 | result.url = result.videoUrlNoWaterMark 385 | result.NoWaterMark = true 386 | } else { 387 | result.url = result.videoUrl 388 | result.NoWaterMark = false 389 | } 390 | resolve(result) 391 | }).catch((err) => { 392 | console.error(err) 393 | reject(err) 394 | }) 395 | }) 396 | 397 | const brainly = (query) => new Promise((resolve, reject) => { 398 | var url = 'https://api.i-tech.id' 399 | var key = process.env.key 400 | 401 | if (query.length === 0) { reject('❌ Harap masukan query yang ingin dicari!') } 402 | needle(url + '/tools/brainly?key=' + key + '&query=' + query, async (err, resp, body) => { 403 | try { 404 | if (body.status !== 'error') { 405 | resolve(body.result) 406 | } else { 407 | reject(`Query *${query}* tidak ditemukan.`) 408 | } 409 | } catch (err) { 410 | reject(err) 411 | } 412 | }) 413 | }) 414 | 415 | 416 | const dewabatch = async (judul) => new Promise((resolve, reject) => { 417 | axios.get(`${link}/api/dewabatch?q=${judul}`) 418 | .then((res) => { 419 | const textdew = `${res.data.result}\n\nSinopsis: ${res.data.sinopsis}` 420 | resolve({ link: res.data.thumb, text: textdew }) 421 | }) 422 | .catch((err) => { 423 | reject(err) 424 | }) 425 | }) 426 | 427 | const cekzodiak = async (nama, tgl, bln, thn) => new Promise((resolve, reject) => { 428 | axios.get(`${link}/api/getzodiak?nama=${nama}&tgl-bln-thn=${tgl}-${bln}-${thn}`) 429 | .then((res) => { 430 | const text = `Nama: ${res.data.nama}\nUltah: ${res.data.ultah}\nZodiak: ${res.data.zodiak}` 431 | resolve(text) 432 | }) 433 | .catch((err) => { 434 | reject(err) 435 | }) 436 | }) 437 | 438 | const cooltext = async (teks) => new Promise((resolve, reject) => { 439 | axios.get(`https://api.haipbis.xyz/randomcooltext?text=${teks}`) 440 | .then((res) => { 441 | const textc = `Teks: ${res.data.text}\nGambar: ${res.data.image}` 442 | resolve({ link: res.data.image, text: textc }) 443 | }) 444 | .catch((err) => { 445 | reject(err) 446 | }) 447 | }) 448 | 449 | const cerpen = async () => new Promise((resolve, reject) => { 450 | axios.get(`${link}/api/cerpen`) 451 | .then((res) => { 452 | resolve(res.data) 453 | }) 454 | .catch((err) => { 455 | reject(err) 456 | }) 457 | }) 458 | 459 | const gay = async () => new Promise((resolve, reject) => { 460 | axios.get(`${link}/api/howgay`) 461 | .then((res) => { 462 | resolve(res.data) 463 | }) 464 | .catch((err) => { 465 | reject(err) 466 | }) 467 | }) 468 | const armpits = () => new Promise((resolve, reject) => { 469 | console.log('Searching for armpits...') 470 | fetchJson('https://meme-api.herokuapp.com/gimme/animearmpits') 471 | .then((result) => resolve(result)) 472 | .catch((err) => { 473 | reject(err) 474 | }) 475 | }) 476 | 477 | const feets = () => new Promise((resolve, reject) => { 478 | console.log('Searching for feets...') 479 | fetchJson('https://meme-api.herokuapp.com/gimme/animefeets') 480 | .then((result) => resolve(result)) 481 | .catch((err) => { 482 | reject(err) 483 | }) 484 | }) 485 | 486 | const thighs = () => new Promise((resolve, reject) => { 487 | console.log('Searching for thighs...') 488 | fetchJson('https://meme-api.herokuapp.com/gimme/animethighss') 489 | .then((result) => resolve(result)) 490 | .catch((err) => { 491 | reject(err) 492 | }) 493 | }) 494 | 495 | const ass = () => new Promise((resolve, reject) => { 496 | console.log('Searching for ass...') 497 | fetchJson('https://meme-api.herokuapp.com/gimme/animebooty') 498 | .then((result) => resolve(result)) 499 | .catch((err) => { 500 | reject(err) 501 | }) 502 | }) 503 | 504 | const boobs = () => new Promise((resolve, reject) => { 505 | console.log('Searching for boobs...') 506 | fetchJson('https://meme-api.herokuapp.com/gimme/biganimetiddies') 507 | .then((result) => resolve(result)) 508 | .catch((err) => { 509 | reject(err) 510 | }) 511 | }) 512 | 513 | const belly = () => new Promise((resolve, reject) => { 514 | console.log('Searching for belly...') 515 | fetchJson('https://meme-api.herokuapp.com/gimme/animebellybutton') 516 | .then((result) => resolve(result)) 517 | .catch((err) => { 518 | reject(err) 519 | }) 520 | }) 521 | 522 | const blowjob = () => new Promise((resolve, reject) => { 523 | console.log('Searching for blowjob...') 524 | fetchJson('https://nekos.life/api/v2/img/blowjob') 525 | .then((result) => resolve(result)) 526 | .catch((err) => { 527 | reject(err) 528 | }) 529 | }) 530 | 531 | const peluk = () => new Promise((resolve, reject) => { 532 | console.log('Searching for pelukan...') 533 | fetchJson('https://nekos.life/api/v2/img/hug') 534 | .then((result) => resolve(result)) 535 | .catch((err) => { 536 | reject(err) 537 | }) 538 | }) 539 | 540 | const sideboobs = () => new Promise((resolve, reject) => { 541 | console.log('Searching for sideboobs...') 542 | fetchJson('https://meme-api.herokuapp.com/gimme/sideoppai') 543 | .then((result) => resolve(result)) 544 | .catch((err) => { 545 | reject(err) 546 | }) 547 | }) 548 | 549 | const ahegao = () => new Promise((resolve, reject) => { 550 | console.log('Searching for ahegao...') 551 | fetchJson('https://meme-api.herokuapp.com/gimme/ahegao') 552 | .then((result) => resolve(result)) 553 | .catch((err) => { 554 | reject(err) 555 | }) 556 | }) 557 | 558 | const bucin = async () => new Promise((resolve, reject) => { 559 | axios.get(`${link}/api/howbucins`) 560 | .then((res) => { 561 | resolve(res.data) 562 | }) 563 | .catch((err) => { 564 | reject(err) 565 | }) 566 | }) 567 | 568 | 569 | const spamcall = async (url) => new Promise((resolve, reject) => { 570 | axios.get(`https://docs-jojo.herokuapp.com/api/spamcall?no=${url}`) 571 | .then((res) => { 572 | resolve(res.data) 573 | }) 574 | .catch((err) => { 575 | reject(err) 576 | }) 577 | }) 578 | 579 | const puisi = async () => new Promise((resolve, reject) => { 580 | const puiti = ['1', '3'] 581 | const ranisi = puiti[Math.floor(Math.random() * puiti.length)] 582 | axios.get(`${link}/api/puisi${ranisi}`) 583 | .then((res) => { 584 | resolve(res.data) 585 | }) 586 | .catch((err) => { 587 | reject(err) 588 | }) 589 | }) 590 | 591 | 592 | const ytmp3 = async (url) => new Promise((resolve, reject) => { 593 | axios.get(`https://st4rz.herokuapp.com/api/yta2?url=${url}`) 594 | .then((res) => { 595 | resolve(res.data) 596 | }) 597 | .catch((err) => { 598 | reject(err) 599 | }) 600 | }) 601 | 602 | const ytmp44 = async (url) => new Promise((resolve, reject) => { 603 | axios.get(`https://st4rz.herokuapp.com/api/yta2?url=${url}`) 604 | .then((res) => { 605 | const texty = `JUDUL: ${res.data.title}\nEkstensi: ${res.data.ext}\n\nSedang dikirim...\n\n` 606 | resolve({ link: res.data.thumb, linkfile: res.data.result, text: texty }) 607 | }) 608 | .catch((err) => { 609 | reject(err) 610 | }) 611 | }) 612 | 613 | const ytmp4 = async (url) => new Promise((resolve, reject) => { 614 | axios.get(`https://st4rz.herokuapp.com/api/ytv2?url=${url}`) 615 | .then((res) => { 616 | resolve(res.data) 617 | }) 618 | .catch((err) => { 619 | reject(err) 620 | }) 621 | }) 622 | 623 | const matematika = async (soal) => new Promise((resolve, reject) => { 624 | axios.get(`https://www.symbolab.com/solver/simplify-calculator/${soal}`) 625 | .then((res) => { 626 | resolve(res.data.solution_step_result) 627 | }) 628 | .catch((err) => { 629 | reject(err) 630 | }) 631 | }) 632 | 633 | const stalkig = async (url) => new Promise((resolve, reject) => { 634 | axios.get(`https://alfians-api.herokuapp.com/api/stalk?username=${url}`) 635 | .then((res) => { 636 | if (res.data.error) resolve(res.data.error) 637 | const text = `User: ${res.data.Username}\nName: ${res.data.Name}\nBio: ${res.data.Biodata}\nFollower: ${res.data.Jumlah_Followers}\nFollowing: ${res.data.Jumlah_Following}\nPost: ${res.data.Jumlah_Post}` 638 | resolve(text) 639 | }) 640 | .catch((err) => { 641 | reject(err) 642 | }) 643 | }) 644 | 645 | const stalkigpict = async (url) => new Promise((resolve, reject) => { 646 | axios.get(`https://alfians-api.herokuapp.com/api/stalk?username=${url}`) 647 | .then((res) => { 648 | if (res.data.error) resolve('https://c4.wallpaperflare.com/wallpaper/976/117/318/anime-girls-404-not-found-glowing-eyes-girls-frontline-wallpaper-preview.jpg') 649 | resolve(`${res.data.Profile_pic}`) 650 | }) 651 | .catch((err) => { 652 | reject(err) 653 | }) 654 | }) 655 | 656 | const quote = async () => new Promise((resolve, reject) => { 657 | axios.get(`${link}/api/randomquotes`) 658 | .then((res) => { 659 | const text = `Author: ${res.data.author}\n\nQuote: ${res.data.quotes}` 660 | resolve(text) 661 | }) 662 | .catch((err) => { 663 | reject(err) 664 | }) 665 | }) 666 | 667 | const wiki = async (url) => new Promise((resolve, reject) => { 668 | axios.get(`${link}/api/wiki?q=${url}`) 669 | .then((res) => { 670 | resolve(res.data.result) 671 | }) 672 | .catch((err) => { 673 | reject(err) 674 | }) 675 | }) 676 | 677 | const daerah = async () => new Promise((resolve, reject) => { 678 | axios.get(`${link}/daerah`) 679 | .then((res) => { 680 | resolve(res.data.result) 681 | }) 682 | .catch((err) => { 683 | reject(err) 684 | }) 685 | }) 686 | 687 | const jadwaldaerah = async (url) => new Promise((resolve, reject) => { 688 | axios.get(`https://tobz-api.herokuapp.com/api/jadwalshalat?q=${url}`) 689 | .then((res) => { 690 | if (res.data.error) resolve(res.data.error) 691 | const text = `Jadwal Sholat ${url}\n\nImsyak: ${res.data.Imsyak}\nSubuh: ${res.data.Subuh}\nDzuhur: ${res.data.Dzuhur}\nAshar: ${res.data.Ashar}\nMaghrib: ${res.data.Maghrib}\nIsya: ${res.data.Isya}` 692 | resolve(text) 693 | }) 694 | .catch((err) => { 695 | reject(err) 696 | }) 697 | }) 698 | 699 | const its = (query) => new Promise((resolve, reject) => { 700 | console.log('Searching for IG Story...') 701 | fetchJson(`https://api.vhtear.com/igstory?query=${query}&apikey=${vhtearkey}`) 702 | .then((result) => resolve(result)) 703 | .catch((err) => reject(err)) 704 | }) 705 | 706 | const cuaca = async (url) => new Promise((resolve, reject) => { 707 | axios.get(`https://rest.farzain.com/api/cuaca.php?id=${url}&apikey=O8mUD3YrHIy9KM1fMRjamw8eg`) 708 | .then((res) => { 709 | if (res.data.respon.cuaca == null) resolve('Maaf daerah kamu tidak tersedia') 710 | const text = `Cuaca di: ${res.data.respon.tempat}\n\nCuaca: ${res.data.respon.cuaca}\nAngin: ${res.data.respon.angin}\nDesk: ${res.data.respon.deskripsi}\nKelembapan: ${res.data.respon.kelembapan}\nSuhu: ${res.data.respon.suhu}\nUdara: ${res.data.respon.udara}` 711 | resolve(text) 712 | }) 713 | .catch((err) => { 714 | reject(err) 715 | }) 716 | }) 717 | 718 | const indohot = async () => new Promise((resolve, reject) => { 719 | axios.get(`https://arugaz.herokuapp.com/api/indohot`) 720 | .then((res) => { 721 | const text = ` *Tobat Bosq* \n\n *Judul* _${res.data.result.judul}_ \n\n *Status* _${res.data.result.genre}_ \n\n *Durasi* _${res.data.result.durasi}_ \n\n *Link Bosq* _${res.data.result.url}_ ` 722 | resolve(text) 723 | }) 724 | .catch((err) => { 725 | reject(err) 726 | }) 727 | }) 728 | 729 | const chord = async (url) => new Promise((resolve, reject) => { 730 | axios.get(`${link}/api/chord?q=${url}`) 731 | .then((res) => { 732 | if (res.data.error) resolve(res.data.error) 733 | resolve(res.data.result) 734 | }) 735 | .catch((err) => { 736 | reject(err) 737 | }) 738 | }) 739 | 740 | const tulis = async (teks) => new Promise((resolve, reject) => { 741 | axios.get(`${link}/api/nulis?text=${encodeURIComponent(teks)}`) 742 | .then((res) => { 743 | resolve(`${res.data.result}`) 744 | }) 745 | .catch((err) => { 746 | reject(err) 747 | }) 748 | }) 749 | 750 | const tulis2 = async (teks) => new Promise((resolve, reject) => { 751 | axios.get(`https://mhankbarbar.herokuapp.com/nulis?text=${encodeURIComponent(teks)}&apiKey=W18QRotVcBMdK7PXwdEH`) 752 | .then((res) => { 753 | resolve(`${res.data.result}`) 754 | }) 755 | .catch((err) => { 756 | reject(err) 757 | }) 758 | }) 759 | 760 | const artinama = async (nama) => new Promise((resolve, reject) => { 761 | axios.get(`${link}/api/artinama?nama=${nama}`) 762 | .then((res) => { 763 | resolve(res.data.result) 764 | }) 765 | .catch((err) => { 766 | reject(err) 767 | }) 768 | }) 769 | 770 | const cekjodoh = async (nama, pasangan) => new Promise((resolve, reject) => { 771 | axios.get(`${link}/api/jodohku?nama=${nama}&pasangan=${pasangan}`) 772 | .then((res) => { 773 | const textc = `Nama : ${res.data.nama}\nPasangan : ${res.data.pasangan}\nPositif: ${res.data.positif}\nNegatif : ${res.data.negatif}` 774 | resolve({ link: res.data.gambar, text: textc }) 775 | }) 776 | .catch((err) => { 777 | reject(err) 778 | }) 779 | }) 780 | 781 | const covidindo = async () => new Promise((resolve, reject) => { 782 | axios.get(`${link}/api/coronaindo`) 783 | .then((res) => { 784 | const textv = `Info Covid-19 ${res.data.negara}\n\nKasus Baru: ${res.data.kasus_baru}\nTotal Kasus: ${res.data.kasus_total}\nSembuh: ${res.data.sembuh}\nPenanganan: ${res.data.penanganan}\nMeninggoy: ${res.data.meninggal}\n\nUpdate: ${res.data.terakhir}` 785 | resolve(textv) 786 | }) 787 | .catch((err) => { 788 | reject(err) 789 | }) 790 | }) 791 | 792 | const bapakfont = async (kalimat) => new Promise((resolve, reject) => { 793 | axios.get(`${link}/api/bapakfont?kata=${kalimat}`) 794 | .then((res) => { 795 | resolve(res.data.result) 796 | }) 797 | .catch((err) => { 798 | reject(err) 799 | }) 800 | }) 801 | 802 | const hilih = async (kalimat) => new Promise((resolve, reject) => { 803 | axios.get(`https://videfikri.com/api/hilih/?query=${kalimat}`) 804 | .then((res) => { 805 | resolve(res.data.result) 806 | }) 807 | .catch((err) => { 808 | reject(err) 809 | }) 810 | }) 811 | 812 | const lirik = async (judul) => new Promise((resolve, reject) => { 813 | axios.get(`${link}/api/lirik?judul=${judul}`) 814 | .then((res) => { 815 | resolve(res.data.result) 816 | }) 817 | .catch((err) => { 818 | reject(err) 819 | }) 820 | }) 821 | 822 | /** 823 | * Create valentine image. 824 | * @param {String} nama 825 | * @param {String} pasangan 826 | * @param {String} fotoMu 827 | * @param {String} fotoPasangan 828 | */ 829 | const valentine = (nama, pasangan, fotoMu, fotoPasangan) => new Promise((resolve, reject) => { 830 | console.log('Creating image...') 831 | fetchJson('https://api.vhtear.com/valentine?t1=' + nama + '&t2=' + pasangan + '&l1=' + fotoMu + '&l2=' + fotoPasangan + '&apikey=' + vhtearkey) 832 | .then((result) => resolve(result)) 833 | .catch((err) => reject(err)) 834 | }) 835 | 836 | module.exports = { 837 | ytmp3, 838 | ytmp4, 839 | stalkig, 840 | stalkigpict, 841 | quote, 842 | wiki, 843 | daerah, 844 | jadwaldaerah, 845 | spotify, 846 | cuaca, 847 | whatanime, 848 | chord, 849 | tulis, 850 | tulis2, 851 | artinama, 852 | cekjodoh, 853 | valentine, 854 | covidindo, 855 | bapakfont, 856 | qrcode, 857 | qrread, 858 | hilih, 859 | lirik, 860 | cerpen, 861 | cersex, 862 | gay, 863 | shopee, 864 | playstore, 865 | peluk, 866 | stickerLight, 867 | stickerFire, 868 | bucin, 869 | tiktok, 870 | cooltext, 871 | cekzodiak, 872 | tik, 873 | dewabatch, 874 | spamcall, 875 | brainly, 876 | facebook, 877 | linesticker, 878 | its, 879 | armpits, 880 | joox, 881 | feets, 882 | gsmarena, 883 | thighs, 884 | ass, 885 | brainlyy, 886 | matematika, 887 | harta, 888 | missing, 889 | boobs, 890 | twitter, 891 | film, 892 | indohot, 893 | blowjob, 894 | getLatest, 895 | getVideo, 896 | belly, 897 | epep, 898 | nick, 899 | darkjokes, 900 | tosticker, 901 | twit, 902 | distance, 903 | nhpdf, 904 | sleep, 905 | sideboobs, 906 | nowm, 907 | ytmp44, 908 | stickerText, 909 | ongkir, 910 | movie, 911 | shortener, 912 | ahegao, 913 | puisi 914 | } 915 | -------------------------------------------------------------------------------- /lib/sewa.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs-extra') 2 | const toMs = require('ms') 3 | 4 | /** 5 | * Add sewa grup. 6 | * @param {String} groupId 7 | * @param {String} expired 8 | * @param {Object} _dir 9 | */ 10 | 11 | const addSewaGroup = (groupId, expired, _dir) => { 12 | const obj = { id: groupId, expired: Date.now() + toMs(expired) } 13 | _dir.push(obj) 14 | fs.writeFileSync('./settings/sewa.json', JSON.stringify(_dir)) 15 | } 16 | 17 | /** 18 | * Get sewa grup position. 19 | * @param {String} groupId 20 | * @param {Object} _dir 21 | * @returns {Number} 22 | */ 23 | const getSewaPosition = (groupId, _dir) => { 24 | let position = null 25 | Object.keys(_dir).forEach((i) => { 26 | if (_dir[i].id === groupId) { 27 | position = i 28 | } 29 | }) 30 | if (position !== null) { 31 | return position 32 | } 33 | } 34 | 35 | /** 36 | * Get sewa group expired. 37 | * @param {String} groupId 38 | * @param {Object} _dir 39 | * @returns {Number} 40 | */ 41 | const getSewaExpired = (groupId, _dir) => { 42 | let position = null 43 | Object.keys(_dir).forEach((i) => { 44 | if (_dir[i].id === groupId) { 45 | position = i 46 | } 47 | }) 48 | if (position !== null) { 49 | return _dir[position].expired 50 | } 51 | } 52 | 53 | /** 54 | * Check Group Is Sewa. 55 | * @param {String} groupId 56 | * @param {Object} _dir 57 | * @returns {Boolean} 58 | */ 59 | const checkSewa = (groupId, _dir) => { 60 | let status = false 61 | Object.keys(_dir).forEach((i) => { 62 | if (_dir[i].id === groupId) { 63 | status = true 64 | } 65 | }) 66 | return status 67 | } 68 | 69 | /** 70 | * Constantly checking sewa. 71 | * @param {Object} _dir 72 | */ 73 | const expiredCheck = (_dir , piyo , message , groupId) => { 74 | setInterval(() => { 75 | let position = null 76 | Object.keys(_dir).forEach((i) => { 77 | if (Date.now() >= _dir[i].expired) { 78 | position = i 79 | } 80 | }) 81 | if (position !== null) { 82 | console.log(`Sewa Expired: ${_dir[position].id}`) 83 | _dir.splice(position, 1) 84 | fs.writeFileSync('./settings/sewa.json', JSON.stringify(_dir)) 85 | piyo.leaveGroup(groupId) 86 | } 87 | }, 1000) 88 | } 89 | 90 | /** 91 | * Get all sewa id. 92 | * @param {Object} _dir 93 | * @returns {String[]} 94 | */ 95 | const getAllSewa = (_dir) => { 96 | const array = [] 97 | Object.keys(_dir).forEach((i) => { 98 | array.push(_dir[i].id) 99 | }) 100 | return array 101 | } 102 | 103 | /** 104 | * BY PIYOBOT 105 | */ 106 | 107 | module.exports = { 108 | addSewaGroup, 109 | getSewaExpired, 110 | getSewaPosition, 111 | expiredCheck, 112 | checkSewa, 113 | getAllSewa 114 | } 115 | -------------------------------------------------------------------------------- /lib/shortener.js: -------------------------------------------------------------------------------- 1 | const { fetchText } = require('../utils/fetcher') 2 | 3 | /** 4 | * Create shorturl 5 | * 6 | * @param {String} url 7 | */ 8 | module.exports = shortener = (url) => new Promise((resolve, reject) => { 9 | console.log('Creating short url...') 10 | fetchText(`https://tinyurl.com/api-create.php?url=${url}`) 11 | .then((text) => resolve(text)) 12 | .catch((err) => reject(err)) 13 | }) 14 | -------------------------------------------------------------------------------- /lib/translate.js: -------------------------------------------------------------------------------- 1 | const translate = require('@vitalets/google-translate-api') 2 | 3 | /** 4 | * Translate Text 5 | * @param {String} text 6 | * @param {String} lang 7 | */ 8 | 9 | module.exports = doing = (text, lang) => new Promise((resolve, reject) => { 10 | console.log(`Translate text to ${lang}...`) 11 | translate(text, { tld: 'cn', to: lang }) 12 | .then((text) => resolve(text.data[0])) 13 | translate(text, { client: 'gtx', to: lang }) 14 | .then((res) => resolve(res.text)) 15 | .catch((err) => reject(err)) 16 | }) 17 | -------------------------------------------------------------------------------- /media/Piyolagu.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/Piyolagu.mp3 -------------------------------------------------------------------------------- /media/an1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/an1.ogg -------------------------------------------------------------------------------- /media/an2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/an2.ogg -------------------------------------------------------------------------------- /media/ana2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/ana2.ogg -------------------------------------------------------------------------------- /media/ana3.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/ana3.ogg -------------------------------------------------------------------------------- /media/ana4.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/ana4.ogg -------------------------------------------------------------------------------- /media/aswu.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/aswu.mp4 -------------------------------------------------------------------------------- /media/audio/PIYOGANS.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /media/azure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/azure.png -------------------------------------------------------------------------------- /media/edotensei.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/edotensei.mp4 -------------------------------------------------------------------------------- /media/images/buku/sebelumkanan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/images/buku/sebelumkanan.jpg -------------------------------------------------------------------------------- /media/images/buku/sebelumkiri.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/images/buku/sebelumkiri.jpg -------------------------------------------------------------------------------- /media/images/buku/setelahkanan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/images/buku/setelahkanan.jpg -------------------------------------------------------------------------------- /media/images/buku/setelahkiri.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/images/buku/setelahkiri.jpg -------------------------------------------------------------------------------- /media/images/folio/sebelumkanan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/images/folio/sebelumkanan.jpg -------------------------------------------------------------------------------- /media/images/folio/sebelumkiri.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/images/folio/sebelumkiri.jpg -------------------------------------------------------------------------------- /media/images/folio/setelahkanan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/images/folio/setelahkanan.jpg -------------------------------------------------------------------------------- /media/images/folio/setelahkiri.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/images/folio/setelahkiri.jpg -------------------------------------------------------------------------------- /media/iya.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/iya.mp3 -------------------------------------------------------------------------------- /media/masukin.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/masukin.mp3 -------------------------------------------------------------------------------- /media/mungkin.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/mungkin.mp3 -------------------------------------------------------------------------------- /media/ngga.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/ngga.mp3 -------------------------------------------------------------------------------- /media/noBg.png: -------------------------------------------------------------------------------- 1 | iVBORw0KGgoAAAANSUhEUgAAAmQAAAGYCAYAAADsqf5DAAAACXBIWXMAAA7EAAAOxAGVKw4bAABGi0lEQVR4Xu3dB3gU1drA8fQChIQqHWkiKiggKBaQpiBFEBWvYrnei4jtAnoVFbEBFhR7wQqfeFVAmhRFQRHs9CZVeocUQnqy+71ndifZbHZnZkv6fx7zRLJnTvnNJvPumVNCQjgQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQTKt0Bo+a4+tUcAAQSCJzCuf8L4kBB7tDNH9ffR7vL/+t9L9++uFdDTu353/5nVChv9fdbz1PPyVIZ7GqNyA7kX+FKOqoORnxUb/Xxv5Vqtj9V0VurkSxpX6zDhsE9YlDxe3mmlVR9f6k7aYhQI5JewGKtF1ggggEDJCWS824SbYclxU5Ie5Yc6bsE2my1k0uLTT0xYmDIJnMorINE5BwIIIFB5BZaOOWt+qPPGmK/AR9XK+4YowZbb7dItJl/q/TeuX/zEcf3jny7B4imqjAnwZ6eMXRCqgwACJSfg6BnTn0y6PqEsuTpQUuUWCJN3oE3eeioos9vzQiYuSn1UespeqtwqlbP19JBVzutOqxGo9ALdzok5v/AnUkdPBQcCJSPg+ABgD3Ud/hcW0vWcmD4lUz6llDUBArKydkWoDwIIlIjAledEX2sPsWk3Rf1Qj484ECgRAS32l14x5xwHu93xYeDKVtHdS6R8CilzAgRkZe6SUCEEECghATXDrYSKohgE3ASKxP75P1CfEjgqoQABWSW86DQZAQQ0ATVyBwoESknAa28s3bSldEVKu1gCstK+ApSPAAKlJUA0VlrylIsAAkUECMh4UyCAQGUV4O9fZb3yZbvdfFAo29en2GrHH6RioyVjBBBAAAEEfBbgkaXPZBXjBAKyinEdaQUCCPguQE+E72acgQACxSRAQFZMsGSLAAKVSUCWLzAI70Jtjk4PT+uc5S9D5cLFemiV6b1TpK30kFXSy09AVkkvPM1GAIFgCshqUga3UXtYqHMl9qKLz7oHctpyoayHFsyLQ14IlAsBArJycZmopBWB7t27d5Qbmc3Kl6TtYCVP0iBgJqACKtceLW+BmR5kGQdbaqFQjkouwFugkr4BCMgq6YWviM3u16/fYPVUyMpX//79r6+IBrSp5AVUAKY6tBxBmfyP6g3TquH6DNPoeaa+XnvBXpo8siz560iJCJS2QERpV4DyEQiWwLXXXjvQQl7q02fowIEDhzz00EPjLKQnCQIWBGRPQq1fQ4IqGS+mes1SM/NCftud/d3vezJ//O3v7J8OJeXtTUzPTUzOCM3IzrHZE2LDoutWD6vZrHZkq7aNIjte3jK6b+820b3Dw8N4ZGlBnCQIVDQBArKKdkUraXt69+596bnnnnu+heZrXRUtW7ZsPWjQoO7z5s37wcI5JEHAIaB6wVzHdxV0aoUkpttO/7kna+PSLZmz5fuKLYdzN6dn23KL0jmeSCVn2LLk68iOY7lHvt2S8dMrS0NfC5PutoYJEXU6NYvqdkWr6F792la5rnHN8LNc83ApkqtSMQWY/Vsxr6tpq7jwpkQkKA8C27Zt29K6devzfKir/dChQ/sbNWp0tg/nkLQCCYzrHz/uiX7xzwWjSVOWpk56Ym7SE8HIyz2Pcf0SHv9vn2oToyIYYVIcvmUwz5zYkfujymC9qFIxC/AbXszAZF/8ApdccskFEoy18bGk0IYNGzbp0aPHJT6eR3IE8oeHzVqdPrvThKMXFFcwpqgnLEqe1PWl4xfNX5/+tcxYcehrH6X5PM1bEYGKJEBAVpGuZiVti4wdG+Rv02Vw/3X+nst5lVDAGQPl5tlD7p5+atjtH528cfOh7C3FLbHhQPaGm6eeHPj696mvamVpcZkjOAsnMCtu/pLOn1mWJS1eRsojICsjF4Jq+C8gQZUazO9Pd0GonOt3MOd/jTmz3ArIrVLGiqXePPVU309/S/uspNvx3Ncpjz+/KOW5nDxHyWo+Zx4LZZT0ZaA8BIpFgICsWFjJtKQE2rVr16hDhw4X+1teq1atzpXB/b38PZ/zKpdAUnpe6sXPHmm6aGP6N6XR8owce+azC1PGf/rr6U9V+Xaj1WhLo4KUGQwBesiCoVgO8yAgK4cXjSoXCLzxxhvTtI4C/4/QF1988Q3/T+fMCi3gfGepdcHU+K17Pk0ceiQlLymQNleLDouIidQWLfP7mLT4zBN7T+Uedqx4FlBWfteBExFAILgCBGTB9SS3EhRo27Zt427duvUItMhzzjnnXAb3B6pYLs83j2ScfRVqdf2Hvkj694L1GUt8bWmHJpHtXhla45VNzzT4K/29RvaTrzfOSXqjoe3U643tXz9Q59thl1b9h695HkrKPTDk7RM9HKv+06Hiqx/pESiLAgRkZfGqUCdLAvKosotZwq+++mpWVlZWplm6jh07djJLw+uVV+DvE7l/v/fTmY+sCkiPWmijmuH1Zt5Te+7KsfU23HtV3JiWdSPODbXLoq9aABUWUiUqNKTXebFXf3BHrf9teqbhjs7NotpbzV+l23okZ/u6/dnbZSVaX04jbdkXMP+gUPbbQA39EGBhWD/QOKVsCMhWSWqGpNc/XtnZ2Vljx469q0qVKp/37du3v0GtQwcMGDBo8uTJb5VWy2TZjoayfMdlDRo0aKgejyUlJSXu3Llz+7p16/5MTEz0+Y4rY+uatWjR4hzJr1GNGjVqikGVCDmkR8WuXNLlOCPHiRMnju/fv3/v9u3bt5w6dcrDIqalJVIi5Vq+8U3+JsXyrg4Na0TUHtM77tFbLqn274QqoQl6D5a+oGuoLOPvCMocb171fy3rhrdaMuqs1bNXp3/83orUtyTQ2mBFYNaa9A/bN0mYbCUtaRBAoGwLEJCV7etD7QwE+vTp088IaM2aNet37dp15ttvv50nAZlK6/UGfMUVV3Q/++yzo/bu3ZsdKPqyZcuWSDCk1kVzzoVTi7vbtb0O5cv26quvvvDaa6/l97a89957bw4fPnxkmByqbBU0qR4W9f+pqamnVfrnn3/+pczMTNPAbNKkSePvueeeByQIq+VLO/LkWLp06cLHH3989Pr16/eanfvWW2+9dN999z1slO7w4cP7ZK23ZmZ5Gb1us9lyhcJrT/6KFSsWXXXVVQMCKcPTua6r4R9Ozj4947e0L62WMefeOkvbNYpsr11v2UbJpr/rnKv868GYdq21TB2lSY9Z2G2XV/337ZdV/XfvKcc6rtqZtdaszMUbMxZNGkxAZuZUzl63/EGhnLWL6poI8MiSt0i5FBg/fvwjcXFx1Y0qrwIM9boEZF+ZNVIFQG+//fYXZumsvC5ByNlNHUdz/UuCPe3/mzRp0jIhIaGens+SJUsWjRgx4n6JxcKdd2ZVFfV7qY3WljbGS1snycSDF72VLbsNVJsyZcrz0tt17LHHHntagrHa+vlWv4eHh0dI0Drot99++2v27NkzOnXq1MqorVLv783ylt65ptKLeYUVM09pJOh7WSzyXTyVJ9d4hb/5G52nj8rKlZD61g+SuuXazJ8L9mgT02Xt+Pq/qWBMBVgqCHcEY477q+fxXipQd9REfQ9zpn1taK334mWvS7O27TyWs13WKNtllq7gdSnPMLHj9exce0hmji0kI9seki1rrjlrWORMx5SCgtcdnyOMS9AmIuizQ12T5v+/9sGlUFlmm60Xfr3wmDqtRmrzd8tI+ubwlk8IdkLuy8EWLSf50UNWTi4U1SwsMG7cOLXljeHfWLlZL1ZnybZKydKTslwmAPQ0clQLzMp+mPUk/dEAvc1GWWu9cBs3blwvExMuNCgrPx/p7fPaWzJnzpylEkBd6sVD20zdanuio6NjhgwZcov0Pg6UXsPzpbfsgKdzFy1atDQjIyMtNja2qrzutb3PPPPMZElrOtbPUxkjR44c5fy5exv0f9vlGs+z2jZ/0v2+J+vn3/7OWm92bsuzIposerDuLwXpvJG7/1zCmfy9MQv+//yGkZ1eHVrjo7umnRpmVLbqgPtkZer7r91S6yWzOjpeLwif9PSylEfIkk1pC5b9lTNr9d6sVQcSbYcycmw57vk1rxNR//wGER0ubRHTbWC72FtbnhXZQEWRqvr6Q1jXjQS8vSm0HkK1+3r+d1WSTYImNb5O3y7UsfJtmMSHKqgtMHLUSvYLXTVnTfq0X3Znfn8oxXYgPctma1wjvJaMw+s5qEPV269tF9OvSqQjvBUiyVRiHNduT49YegLXPkxrqv6mkvYV9KAWZEJA5i9oOT+PgKycX8DKWP0bb7yxT6QcRm2XR5W7f/nll/wg5tFHH31g5cqV6+U0b3vEaX+NBw4ceIMEZMU5lky700ig8pgEY+1Mrp9WJ/U48YcffljknlZ63GIWL178x3nnndfW+Zq34Mt7F0fRCmhpq1atWu3nn3/eKj1c3X/88cfVnuqpeimd4+70O5kebeTfi2WyxCUyPq6OjFE74ct7VQLCK/RHuOoe7Xau9u9NmzatW716tQ+9Q9ZroHpcVBDw7eaMuVbOGt27+iNSzdxQuz1CizVMb/4e4F03LZcgQsag3Trl+9Mvbj6Ys0mljo0KjWhRJ7Jl8zrhrVvWjWzTrHZECwmKmrapF2m4/ZfrxdEujPwgMc2W9ukvaR8s2JD++bp9OaslADN9HC4TG47I16KvN2QuemJO8iMt6kQ06tsutv+dl1UbdX6DyNauLTL7RLJ2f/aafq8duyo5w34mPjY0KiXDXmSoQMZ7TaRSoRIY2iNVG9bsz948bVXqm/PWZ/7fidS8IhN1DiTlnTqQlDHzq7UZM2tVC6vaq01s3zsvrzb6qtbRl1m5Hj9sy1j5r2mnBkmQmSbXXvVOZqshBs5gUAVJqlnKSb/CrldavaZ/6RSu71v1mspD7/2Ovqp1TJ9P/ln7f+5jDD283628BUlTAQQIyCrARaxsTZAgYbBZm1XA45rm999//2vmzJmf3Xrrrf80OFdbuf+ll14KNCAzvB/Vq1ev8e233/4vq394FyxYMOfAgQOn3estbXxLD8bkpmHzMNbKp94xZ/75oYTMA6j6xBNPPCsB2bWezF5++eV37r///ofUo1i3thQKR2SM1zUSkM0wu2aur3ft2tVssV77k08+KUFQ8Rx6j8yP27MsLXNxS+fYe+TGGq4FY+owi0g8Vrvgcqmn1qoOD3SPe+Rwsm1X7/Njb+jYNPICv1qbP3bNcVlW/52zqceUIx1zckOK9IL5kv/uE7kH31qW+p76eu3mhPdHdKs+3PV8fdykpzzlEXCoCsbUa56CscgI2RFKG3Zpi5QRlSEvL015a9zclAes1u/UGVval3+mzVZf9/eMe+DF6xPeCJchmkZ9Xxm5tjxZYy7RWUaW1bL8TJeemJaX7PpG8est42fhnFY2BegaLZvXhVoZCFx99dUqQPD6GO7IkSOHZsyYMcs9i6eeeuoRsyUwZKbjFRdccEGDYrwAoTKA/z551FfFShmqd0zq/V/3tJ07d25500036etXqUkAnn6XXcMD10/wZn/7820lMOqhxqh5q+uYMWPu9RJ+5OfRvXv33lba6prGub6c12ssky/+nj9//jJf8/UlvTzKy9p0KHub2TnPD6nxTExkuBrrpr0rvVbaLCOXM/WA8M7L4oaNvbb60xc3jdKCsaJdhapAgxLlpYLAyB7y1ZqMeUPfP94n0GDMvSn/nZ1y39jZyaMyswvG2oWGGUp466nWsw5XvZSbD+XuuOuTU7c8veD0aNcy9XGW2mgzkwFmEjC+eeGzR87ddix7h2GN7KEl3UGRE+ay04L/7xvTNxYJyokAAVk5uVBU0yFw77333lm/fv2GBh7277///ltPr+/evfvkn3/+6TLOp2iqqKioaOn5ea84vV0exZkWI+PM1sqjuf3uCefNm/ejM6hzD67y/62Cz6lTp74uQeZFMjkgUtKHi10teSzbV9Zn+0LGgGUYVUDN9hSPqJtvvvkOb+lk/Nq3+/bt22OUj/SQmfV2FTld6mw07kxd46WmeAEm+HpT+peZOXbTR3n3d686Pr+nQw2P0iMzn8svGifbnLk5enb0fxVk7BiPlT+Zt2iJzmeUKij7eVfm78M+PDH4cHLeYZ+rZnJCTq495/Vlp1+f/uuZd/OTGof9Zh8KQjYdzD7eacKRNp//kfa5bOZeaEkW1SOsylHtV+9Ts/bsOpa7fcKC02PVbgtl6Miz5Xep+tmpWoYaQ1UCFyAgC9yQHEpQQB5TTZDiDD9M6rMrPVVLZlyaPoKSHrh+bdq0qV9SzVIBjczwnCK9TSMffvjh+2QZjFdlDbK/1P1GltAoEnjIo8onJLBy78UrNH5FHhHuuPzyyy+SJTBG/fHHHxtlybE8WTbDfvTo0aSvv/762xtuuOEfam0yeYz7uZd26rM9Q3r27NnHyEJmXH6t3RuLHtp1Ouuss+oPHjzYclAmS3c8LbM+HT1OXg65xqbXMdDrt2R9lums2w5Nos6NCNeHBbmW6PnG71j6RKVzbnpUqHfLrI/E259rl/K1/Jxlq7K0p6COcO7xuSmjLJqoXMwq4zGr91ackcf9gQc90oOXPXLGKdmJwMvs1lBtLJZx76BbDRduyliydl/OZu8GgW1nZdHWNZnLe9wvbj+K5JSyLEBAVpavDnUrJCBjx7rK+CvTx4nfffedNrvS0yEBmdoU2vSOIWPJri8JfqnPYrUkhhqLJeuNvffKK6+8I7MLx8h2TufJEhYPy6D9IoGHTFDQx8fp7Sg0yDgtLS1VZou2lpmZsoq78TFx4kSVl0cPvReiffv2hrsYqDaYlSNBpMVZgCEho0aNUo9oDe9Qs2bNUkFgsR4rdmQuNytABtUXGsxull6tS6bGRDn6dorOHjQ73/vrehAmo8b1XhfpRNInM37405lpf/yd9ZvF/FU/kunviKe8th3J3vbnHsckhECP1Xuzt3jNwxGoOdYWsXjIMh6Z//ki8R/e31n2gMbUWayGazLtEanjiavlZvhRDKeUF4GSfmZeXlyoZxkUsDCY3/7pp59+eOzYMa8DcuWR5Wa13ISsZN/eWxPV+BR5rHe9zCB8uxgZ7LIy/kl5BHuLtzJeeOGFKZ5ek0Vn60uvU2P53lJ9NW/eXL61aCXfm8kA+2afffbZ+1brLRb7pB6natWqpdYuK3Q4x+nY69atW8coP3l8ulTtLGCwGG2ozCi9SCYgNNi6davh4zIZb9ZJHq3GGpRnl0V1i31l+tMZNntSus10YHeD+IhGVq1VOrWEg3OMvboVq59ofWVBux1LfGJXY7e0tSjk87Z8P3HalvL43KS7zOo5sH3sdXd0qTayfeOoK2pVC60aKT1/WfKg8FRa7okdR3O3fLc1Y8HHP6d9lJJuKzLBxDXvr9ae+bhTs5qvBjPMiAgPjbiyZVTPmzpVu63T2ZHd6ieIuxSw90TuX0u3ZHz9/k9n3pQB+QfN2rhmX/bmQ0l5ZxomhBcZFynvd/UIP5jVNqxOl+YxV6oEJbfIhpkOr5e2AAFZaV8ByrcsIOuEDXT+wfR4jhpLIlslPWiWocwcfFge2+kLm3pM7ly5P1IGjxfbp+ZHHnnkgb///jvFrL7urx86dChVvrauXbt2q6dzZeFZo4CmyCmyRMhOTwGZnlA9u6xWrVqYPPb0Op5KFqZ98bnnnlOL1xYdd+7MSMaSXS0B2TSj9prNrsyVY/To0Y/6auZr+sQ0u+nNXeVZo2roWb7mrQVL2qE9T/T5dMMTtK4tZ/7Ocn7cmbH8TKZxT1K/trE9v7y7zjzHulgF9YqJtIc0TIio0ygh4qru58ZcVTcuosFjc5KKTDJxrdOqndk/6q0LVuPG9ot79om+CQUzp51hU82mUW3aN4ls06VldJc+rx7vaqW87UdztktA1tE9bd8LYvpmvNvE5T1u/fqoFc/GL0ic+OKSVEtbbPU6L/qaR/tWfzz/baB1+KknmEELza1QkKaMCRCQlbELQnU8C8iMwn6q98fI59dff10l2/WYbiS+cOHC5Xv27NnVrFkzw9Xo1cr90is3pDiuiYzlOvzxxx9b3o7HlzokJycbDtZ3zUvGokWpsWRm+cv6bepvhddtpSZMmDBZxsA9arRlk/R+9XrnnXemGZUlQVsPoyhFLfBrVtdgvH4my5ZmJR/Z7ijeSrr8NBJIpGXZM15bmjpBHifKTEO7mm2oRuXrj51d78iukZunO7UacqLu5Dk3dKxye+v6ka0K388dUUtMRFjVa9vF3rT3ZO6WrYdzijwGPK9BVLPPhtdWH1AKBWOOtdgcuwfoQd5NnaoMMwvIJOBxzEw17muyFHlIJ13Yo33ixz16Tfxjrtnl7weqDXYLDel2TsyV4wckPPns18lqwWjD42hK3l5JUCQgcz/JsOfSURn1YS1c4tewl75LmWI1GLu2bWzfz++utbjwiDV9mTOz2vN6RRYgIKvIV7cCtU0eU001ulGrP4++DPRWg/tlwLthQCY9coNlcH+dv/76y6dFTa2wy6NTq+N5rGTnc5q77777DmnfAPVlsFhufr5WZoYuX778O1nl/2YPldFuvlZmW3bp0sVoqyX7N998U2SBXJ8bb+EE2S7I0p6mEeEhptsbFSpOJNKybCnPLUqeZKEalpNc0DCyc+t6EpC5Fyb/HnBh7NXqS39JHtutX/ZX5pLvtmYuXLUz85chHarcEC1LrzpiDP17wfg2NbdTvaZ6zxokhNeTBWnP2nMy95i3yp3Jsmdmy0JjURGBD1Ee1St+zJMD4p9RZRWOVPVewIJaPHZt9WffWJb6enJ6nuEjVXkUbWknjkLlSWTq3GrWMWzN8aK6f4bOWZcx68m5yQ9ZuVjVokOrvXtbzc+DYWOlPNKULwECsvJ1vSplbZ999tnHPcwqLGIhg/kXWAWSgGy+2oRb/UE1OmfAgAFDJSALdKHYIkXIEhw7rdY1kHQyIL+lrJTfrlWrVq1lDNf5clwgEwZayxZJKpCw/LxMbkIGays4aqiCJQnIhnrIV7vX165du+7QoUP7f/nll9oeo+6HbGz+sLNeXpss19jjuYEYeTo3PEzbQ9P0yLP5tbiqpbxNCy+cwLSXU0/esWnURerr0b7xj8lyEiGyX6cWfHrssspfVFYSyNg09TSzXnx4M6OATOWVlSvdf8Z3F9MesoQqYQmP9I1zjBfU3kFqpVjHgrneDglK2/3+d94qI7v0bLthwFbkXDVbVf1QJmQoA5cjdPbq9Fm3fXTyJivXasBFVQa+cH3CS/LYV3pVTZtvJUvSVDABArIKdkErYnPkRv2080+y1+bJmKoDslWSxzFVnk6SgejLc+Qw6x2SgOz6IKzc714FtfzEkeK6VrfddtsN//znP0fIshdXqnXEnOVYDr481ctmsxVaB8pTGln+Yq5ZmyS4ftFbQCazR58wus6bN2/eIMceszKC8XpsZIjao9P0kE24LT8edr2Rm2bsewLfr68ENmrFDvmK0reK0mdl6sXLVlASjKid1R2B0Pr9Wfvl0edes+pJoKdmFfheJ5eMz6sfcW71GEfPnJr64Fjg1jiQqRsX1sSsbnLNTIc1FMrDGQAqG+WhHweT8pLv/V+i6WQJlf7yVtFdZ46oOd+xcxLBmNk1qqyvE5BV1itfTtp95ZVXXihLUpm+T9PlkPW73lAD0NXgftWj41zB29NNQRute/r06WQZzF7XC4V23kUXXWQ61sQfylQ5/DnP6ByZ0PAf+XoqPj4+QbXPNa3LNjaudwPLN0wZl2Z6F5GgOE32Ad0qS26c781UeufayAzRCJkJWyjAk5/XrV69ujYey8uWO/bp06d/GGwzb/lFRVhbtT0jJyTo19HPNpouYFuQr+PhpPsjOfW6e7yj0sjDupDl2zJWv/tD6jMLN2Za6qG0q0FeAR514iJldm+YY2aqemyqbX2kbyXpOXMZ01fdrFiva5t5PbFg9Jr2h0PizKxsW8h1bx7vkpph07Z/Mjvu6x43qmAbS9NfJbPseL2CCpje6Cpou2lWORGQQfU3WqmqPJI7V31ZSetLGpldGCdrdY1Xezr6cp5ZWgkGfXts4iXDTp06nXPfffeNlkeFt6i6qvuFp6TO3WX8CsbM2uL6uqwhNkIeXa70UI/8esng/r5ffPFFoXXEZHZl/vZKnnbCSUxMPCU7KBTnMiSFmhkXE5Zgpd3JabbjVtK5pQk4WPFQpg95OsIsbbi+81Gg+ldatj1k17GsIzuO523bcTRn49EU236ZBLBmy+Gc31IyzJcAca2TmggQ6FEnLqxefh7OR6fae8O58bt7/uq1KtEh6nfA8MgfAWaWMP911dnnINN7EsfMTBqx9Yhz8oJBPhIgxr4wJOGVQe2rDNaCOed4PHUKYZnlC1BpEhKQVZpLXT4bKgFZfw839xJtjHpkGuyATJaQCLhnRTYov056jfTHhPod0NPfef01b72FyjPwO6hkImPzfpZdBrYbBccyuL+ne0Ame1d2N6qDbHBerPtWur+halUN9bp/p2vaQ8m5lpbHcMs/KNaB5Cmbn2qP37Jz8kJmr81cOP3nM5NX7Mj6KVi/WNKZZXaYGsTHhtTSe0vzx42paEq68Ty+kaU9UeFhkRYKNi27SB7O3yq1Y9PTC1Ke/GjVGUtr/T3QI2708K5xI/X83B8Je6krsZrZRaygrxOQVdALWxGaJTfpi2QQetuy0BYZlzVEFp39Klh1kW2MfBvH4lbwsGHDBr755pvTPAQxBc9XCgdZdjVmTtY927Vly5ZNsiDsRln642+Z7bns3Xff/cK5mXdQmqe2UlKTCLwEWKHSQ1Zks3G1iblB4WoGrdphocQONXi8T9vYq77ZlPGjUaF7TublT87Qe0+M1ntwRgLFccP1EGSoH+mP+FT3jmOh2N0nck/MW39m5rKtWfN+2JalLXcR7MP3iKdoDWKjwqp66i01GkYWEWY3Dcgs4bv+FulVk599sCL9kxeXnFbbtxkearjEzZ1jb33omvhCy3CYDIEzy5bXK7gAAVkFv8DluXmvv/76R87V4ku9GbKV0nXBDMhk42/TVeC9NXr48OE3v//++/9zBjyOJyGFj0K9ZT///POPsubZh/Pnz58ti/JbWs4hEHB5ZPn1gw8++LCXPOxqHFmHDh1aysK2u1SaHj16tG/SpMnZRmVKQGZ5Bm0gddfPVT0yV7SM7mEWkG05lLXLlicbK8q8SXWONvDbuXiEp9mA6mKpQOOurtUelJtzpqSXBSdkHTLPy7WHJafbTn61Jn2Wf22SofDarETVq6TGh9lC3l+R/sF/vjh1t3/5WT/LwnB+05hNxvHJkH7fjjBPEVzRLAzL1tYf8zCTc/OB7L0Pz0q8x0qNep8Xc/XHd9b+1Epa0iCgCxCQ8V4okwIXX3xxiwsvvLB9Gaic9se7d+/e1wazLnl5eaazFj2VJ/teVpc12T5wCcI83lwOHDiwR7ZeembBggWzDx48aLjIqSw14fONz8hCeshWyqD9o2pTcQ/ptL4H2dtyssxgHaxeHzdu3Asu7XE/xb5o0aL50puXGEx/Z16GN+Z/dK4yYtzc5PFG5Wbnhdg++SV16r+7xo3Q5hXmDzfy3g8ja1HFvP2PGq9beUq8/UjucYsBmYcCVWAhPWQSHeXl2kNGfpY0bMavZz7z17FZrYhmHZtFdf5zT/Yv+07lHjDKRwIjf4vJP0+WMTPt7Qq4ENcMnL1ihQZaSjtyZbmL175LmfzikjNPyQxN0w80aj24KUNrlth4x6AakFmpCpg/6S/V6lF4ZRXo27fvDWWp7bICfc1JkyY5tjoJwiE7APm1JZMs5DpEFtY3XJJBArD90uPUXFbFn24WjKmmVJUjCE0qlIVYPa0CLy/5hqoeR/WaPKps6ekRput5Dz300Ihg189Kfg0SIuqe1yCyuVnaZxcmjcmzFUxy1IbMG6yV5QhVzAMW1asleSWblW/8uqOcWz442c+fYOyixlEXPTeoxqRtExoe2Tqhwd+f/qv2F01qhTczq1Ph5bo8pjYHMCvE/9c9l53/bi1426rr+MUfabPGzU15JDUzz3SJE9lmqv5vj9fd0bJ2eAu1XEdpNtJ/Hs4sLQECstKSp1xDAecN2+zvmT5dzOy7ulu6fpml91g3eQw39oILLmgQjEsnf+h9WKagoMSOHTt2Mrmb22VM2Ku+1LFx48amazf5kp9K+8Ybb7x/4sQJwxmIt95666Ann3zyDaP2rF+/fs327dv9mcnoa5ULpdeffHVuHm26P+Lx0/b0bzZlOiYdON+xpk/OzN7ZKistLrD71ZPq2pjZf6bN/3pDxmIzkEY1Ihr884q4u94dVvOT3x6v/9fhVxrm/Pp4/XUPXxP3WNNa4fVU27RxcrZQ0/GPQQrILCiZtcqH112unX79fpJ9OaWX9D4ruVSJDIl67/aa02Iiw7VHxGq5jsAX/7BSMmkqigABWUW5khWoHbKOVa3OnTtfatIkuwxqn6zGmFn4Cpc0rl9FzpElFfTBt15vAtKRVE020X4vGNRqoTR/8pH9N017bGS8/nqrecvq+aGyGXmC1fS+pPv++++NgoBQmSgxvFevXn0N8iyxrZLc66Bfnt5tYtQsX9Pj/ZVn1MbqjqUR3DsG1WaHLlfbEWcVztJRnv5DbSCafvj1PnGcrE61hUz79cybZg24pEVM57Xj6x1659b4j+68vNqdFzaOPLdWbIQMaZElYfVRimosmtQzKzfPtHfXQkBmViX1eskGZE5pbSygfG06lL35milHu8vel6Zbp8ms0rD5D9Rd0atNTP4WVfmXwEpLSYOACBCQ8TYocwLSu6IGw5r+MZaB3qaf+q02TsY9WZlBGSpjyfrLFkTB6CXz60ZrZSNwXx5B9uzZc4BVI1/TqdmWRUOPglysjMuTrZJKZO9Kj22Td2DPNjEDalcLM92WaNnWzOWvfJvyimxD5LLSlDNX6SZRvSVGh+qRcW7Q4yDLf3eExlp091BCaEhKuj1EZlMaLhkibey6fEzd36vHqNtBwS3BpnXROevu8m5NSrefNKtTmHlEZvr7bVaGl9cDzlcNfzt5xpY48tNEy8MmXhpSY2LXljFmHyL9bBKnVRYBArLKcqXLSTsl2KknN+o+ZtXNzs7OWrhw4QqzdFZfl42xN8pA9MNGAYSelzxOHWw132Cnk8kApntKymKxl1gt1zkbMuCbmKfyZLblPKN66Js1e0uTlJR0Sq7Ln1bb4kc643ZLEBIfGxY1rl91R++XwSEDv/PGzUt5+KapR69VWx46npD7cjj61fSeOb1imw5lbvMlF/e0y7dlLzE7/6bOVe5X64a59M+5nCIzSN3GQu06bjygX51cijeWgN/LqZn2vEufP3KubMK+3cxOvf7UgJrj7usRN9Ys6LaSF2kqt0Ap/t5Ubnha71lABq2rjXrN/qjaZdD4k8E2lMHj+Qs4eshb1Um7Zw0cOPD6IJRt1kaPRcgemCpoNDzUo8AuXboYrt8mC+52Xbx48fzLLrvsSrP81Ot16tTxeSamjCGzy/Icr+tuVspxSWOX8WXels7wMSt/khdcnru7Vb+/49lR7azksmRT9pLh0xP/kZzu2LDb8U529H0ZTzx0hEPyAF4bp7XhYPbGez5NvO2eT5OsBv8e308bD+b8YVbv2lXDG+ppHGOn9C+1AKtsVqSPrZIq7jiWqy1VYnbInuXBOPz6HQmkYPXk+IHPTw09lGj+mFKV859e1R8Ye20153CHoFU3aBkFYsG5JS9AQFby5pRoICCBwkATILusqZohyya8HGzIzz777GuZlbjPLF/ZtLt78+bNa5ilK47Xt27dukXyNbrdhdatW/cs2Wh9w4033uhxfNaMGTM+kt7FH2Umq5l1fhNkf8ya/rRnxIgRo2VGqc8D02XvzKS33357uj9lBuecAmIVo4zsFjfGar7/+/3MF/UfOhj9y9+Za2QEvNZbZNPGJZnnsOt4zt77Pjt12yUTj144/ZczM9KzzZdZcObq8W950pkcwyVP1Lmnzthko3tHDOBYS03V1bGgrPbQUg3kV69JkiWbMiytB2chICuuoMPvfNWJ9//v1F1f/J5uZfhCSN+2Mdc8f328mpTiPCxcYPO3ACkqsQDrkFXii1/Wmt6iRYt46dm53Kxey5YtK7ZV21Wv0d133/0fL3XI7yWTYGGaBDTXmdXV4HW/bhzS9u9k3S6zlcK1vD///PMF0su0cffu3TvUo86GDRs2ls3SO8XExFgdl6Sy0dosa4rV27Vrl2nvnKf2yrZH38rgfUuD4/U7m4wPLL2xY4Ua4bjkgztUuXXhhoyZ89anWx632HPy8Yv7nB97da/zYwZ3ahp1aauzIpvXqBpWXV/RX9a0CjmcknvwryO529buzV61fFvmwl92Z63x8z1V5Bmpqnn9GlGyFpxxTLZwY/pHt3WpOsRRrhq/5uil08IwbWFZ6SmTf/+xJ2vDW8tPv2KlfpmyJVN0uMw2tJLYexp/Trd0Tv4vsnqDO/fGfPW70y9/vCrtEytVbt80OuHRvtU/Wrc/Z4dMhz2t7cAeGhIl56ovPTh2/R3X/1/VTw070L5Hhodlt20YeZGVMklT8QUIyCr+NS43LXz++eff8bZIqX5TUI2R/RIXFlejZCD6YgnIHnQGIt6KCe3Tp88AGe/WVHqsTHvU3DKxdMPwVrAEN3/+8ccfK2UWqnrUaBjUhYeHR7Rt27aD+grUSxakPVtW/F/rTz4ylmyhBGT9zOrrmrdcY8uBjz91sn6O43LJJtERn4+ovejKF49esHpvtuqltHR8syVjqfpyTVwvPiI6W2YqJqb5t/SJp4IlZCoSdakHjhc3CzcdT7hgfcaSV79PfXVMr7jR6hw9WNF2jHR2681bl7bw5qknLU8ASc8KyaweE+LzY25LqIEnKrSDkfrbIuPFNo+blzzWatbr9mUlX/XS8UZW03tL1yAhqsru5+uZ9mIGWg7nlw8BHlmWj+tU4WspyznUHDx48I1eIyCXATjFOfNu3rx5SxMTE01nkal6ykrzlh/5eWiX34HZJZdc0k3qqbZO8jsPvT5qcoSs/P+SbGNkNNYotL0c/r4JJcid78u5qjdPlsxQMzRL8SiIdfW7t+pJmTK0xtSGNcJrBVKxoym5WcEMxm7oGHvjpc2jOmkjv9wGql3ZKvayWtXCE8zq+/hXSWNu//jkkPnr07/deDB759ZDubt/35O5+YOfzswY8u7x6+/4KHGQWR6uryel2075kr7U0gqaMlu7P3Nznk3ruSrhw6561DgQ0AQIyHgjlAkB9fgvQg6zyqxcufL7bdu2FetCoZMnT1aDdL0FO/lPOyQgK/TIUm0o7Ky/t3MDDqB0Hwleh/3www8BP7r973//++Do0aMflZ635V7steFDsqJ+N7Nr4+116UU8KtfNcOkF13Ml2Jy5f//+kug1MLgeBS+5Lu7Z6eyoyzc9Vf9kizoRwVj6xF/S/PMe7Rv3xIzhdWfWqx5RV7tQhQaq2UOiwu0hsq+ipZ6tmX+mz5FesD6dJx49p+OEwy2lB6jtg58n3rZ4Y+bcrFybT8HKkZS8gwE3zr8MLA0FyL+m6gmtmPk6J9a/qnk6y55jeTHh4BVKTmVUgICsjF6YylYt2WxareFj9sfULgPSPy5um2nTpn1gsnCr1hkh47Eudq2LyzlWfq/M2mraTAmm7pXx8qZ767nVUfunmhgh48seUSvqq39LkLvVIAgNkR0KAnrsKaYfesvfbY1c+//93/+ptGXkcI/ZQkNio8NCnrkufkppV/Chq+P+O75/jQna43wJKYrsDqC9w8JCuraK6VnSdT2ekme416XF+vjzO2LlnFBtz1E1Tk59hpL/5BdWtocvlSN/W3k/N+8olUpTaPEImPZIFE+x5IpAYQE10HyFHPJTtQq49mHf5UtLnJ6enibLKHxR3HaytETmhx9++O4555yjlo7IlhtenvNm53p3Vv+fdf3113ebM2eOqrfrobfBW1X1bZwCasqaNWv2NmrUKG7UqFGPDB069HZ57NtSMvR2Q7Ln5ORkr1u37s9Zs2Z9KTsTvOVauNAvlZmNp9SuB86fF+k9ks3KHxw7dqzLrDLr1f/444+/fO655yY3aNCgsftZroGE9IztlQ3Rf7Cec0Apvd+88/tBC5I4xjE6hlXd0LHq0Ca1Ihs/vzhlksw8LLEJCNViwsIGXhj7j39dGXfvZS2iLtNbr4/3KjRYXfX+SIKhnWLvWLw5doFMSpgTkJbz5Ae6xz28anfWinX7s72uEbfhYM6qmy8Jsbywqpd6WQmu/GmSlq/jg4CjCJfebX/yC+ScSH3QnnMaRSB5cW45FyAgK+cXsKJUf9iwYbeXpbbIwP77/a2PbP10ob/n+nqeLGab/dhjj01QX1dcccVF4niXzFS9UmastoiS4/Tp0ylb5JAFVr+ZPn361L1796Z4KmPHjh3HZAP1Or6W70t6Weg10VNA5pKHXcaOmS5k6kuZfqf18jBTfyKoXpbHl5fNubfOQhln9dHYr5LulyUqTPd49Ls+cmKP82K6vj605pct60bU85aP+ycGla6KrMA/6546X/V97XiPH7dnBhTsvnxjwpT7elQfPfar5MeNArJVuzJ/NWmr2eN7FSlZ6Wl2L8YsXy3+0k/SA2wJzoor+DO75FH64AgrFTfLjNfLtwABWfm+ftQegXyBVatWrZcvNUO0zB2yKXoLCVTPN6tYMLfDMivL9cZsIa3XJMO7VvvX1efHXDNnbfrcP/dm/7pie+bCxDRbaiB56ude1Tqma/fWMb37tosdJMsjXOBXns47/Sf/rD37hSXJ4/73e/oHqZk2n9aG69+uSt9RveIeurxVtPb4U/XOvf6999psOJCzbt3+zC3tm8R4u+YZFgI20z0zi+RRZCPRoqVI5KWNh9OXu3Cm8GmMnF/XwfNJpTd8LYiNIKvgCBCQBceRXBBAwEBg6tSpn6llOMyQvvzyyxJ7/GdWF19eb1o7otHo3tUfkJ6WBzIk1Jn1R8b0j1adnqoCNF/yUWk7N4vqMKxLlTtuuyTuwZiowDpu1GM5tUWV+l4vPqzmazfXfOdeeeT4n8+Tbpfesp/N6ibjzy5/+9aa01ueFd7C9Wl4t3NiejStFd5Y8k2UPKo589F7tHIl2gmbsCh1/FcjYzwssqpFiMU1acN0LJjzSa77NlX+9MaZ8Vl5XQKygkenVk4gTcUVCOy3veK60DIEEAiSwKBBg7rPnTvX2yxOvRS7jNt7c/jw4f8JUrGm2YzrH//ME/3ix5sm9CmBy7gkeTKWnJGXvvtE3tZDibnHT6blnkpJtyVl5oam58nel7FRoVWjI0JjasSGJdRPCKvfqEbkWc3qhJ8b4bYxtxqAbtcm8Pr+UEtfZb/INgGS3YHE3AObDuZsOZSUe0Q2DE+UOuVGRYRF1Y0Lk3pENG1aM/zsxjXVtkqFbxNaTZw/0sY9qee47tXTxso7X/Pi56lF2nhCtVuAT+YFiR3VUucbDA90LgTrZxElclrsyP3cm0tEumwVwkUvW9eD2iBQ4QQ2bNiwtl27du2NGmaz2fKs9KAFE0cCsmclIAvCnqjegqWiPR9uj8m0jbtdN6XOf92ZpTYTUHYrD3zjak919NYzU2iwu8tSGirKUh06Fm4bBvGjWWhp9rq/74Hiytff+hidR0BWHKplP8/S6qYt+zLUEAEEAhLo3bt3R9lV4BezYEwVUpyL/QbUCB9OLghT9Ft/4Z9ofTfaEhUFhwq0PIY3zi4ibY2s/ARG/T7eK+qYxaqf61onlxClUCUcq/Xr9VXf9Z6nwsFY4X4sx3ZLzjOtBG1equxv75jH7Fza5Tlfx0+LLBniw3X3N2lplOlvXTmvZARMx3SUTDUoBQEEyqOAzJoM37hx4z4JvH7ft2/fnhQ5mjRp0kwt9JuQkGB1Q3L7zJkz1c4DJX1Y6OqxUiXHTb3ghl+058nT7Ec950KvGe5AbmHEuofq6uu8eaplfjjoFq24By+eg5nCfO6L0nqTC2rAZXZ5TAtzhppWdn43K8vH193W3/PxbJJXRAECsop4VWkTAiUkcPjw4byqVavWkADsen+LPHjw4L758+fP9Pd8zkMAAQQqggCPLCvCVaQNCJSiwPHjx4/5W7xsW5kj20B1P3XqlGlfhr9lcB4CCCBQHgQIyMrDVaKOCJRhgRMnTvi1t6hs4n6iT58+nVevXr23lJoXpEeWpVR7ikUAgQolQEBWoS4njUGg5AWkh+yIH6Xax48fP0ZW5l/vx7nBOoVeuWBJkg8CCAQsQEAWMCEZIFC5BSQg86WHzC77af5200039Xn77bdnVG45Wo8AAggUCDCon3cDAggEJCDx2GHJQO9t8vQYUHtt165df02cOHHctGnT5gZUICcjULEF6Lmt2NfXa+sIyCrphafZCARL4IUXXpgiK/HPbSpH7dq168isy6rR0dExGRkZ6WlyyCzKAzt37vxLDhW4cSCAgLEAAVklfYcQkFXSC0+zEQiWgAzOT/311183qq9g5VlC+XDjKyFoikEAAXMBxpCZG5ECAQQqpgABWcW8ruW9Vbwvy/sV9LP+BGR+wnEaAgiUewEZ78a9r9xfxXLbAK+rrnBfLrfXNLCKc+ED8+NsBBAovwISjRGQld/LV85rXiQey/8B6+OV80vrb/UJyPyV4zwEECjXAit3ZM0NDVF/Al023NY24uZAoAQEtM8CatN3fYNzx/eVO7N+KoHSKaIMChCQlcGLQpUQQKD4BVbsyFxfuH9Mbo2lsMl08beUEsqmgGMT+lC7/iFAfbeF/LQjc1nZrC+1Km4BArLiFiZ/BBAoswKxI/eHrtyZuTBU6xlzCc/oKCuz16yiVcymv9fkw8DERanPT1iY8mxFayPtsSbAnx1rTqRCAIEKLJDxbhMGk1Xg61tWm+b4ICD9YjZbyKTFpydKMDaurNaVehW/AAFZ8RtTAgIIlBOBcf0TnpKespjC3WX5lXf/e+n6rMn1/41aaxT4WQkK3dO4/tvsfNf6e91RwVl5PS/370Zt83Y/Maqzt3PM7k3e2uqpjUZ5+VM3s3ezUd3y+8Ocmci/Q20TFiU/KR20NrOMeR0BBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBMqywP8DieiD6CqpO1wAAAAASUVORK5CYII= -------------------------------------------------------------------------------- /media/owner.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/owner.ogg -------------------------------------------------------------------------------- /media/pale.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/pale.mp3 -------------------------------------------------------------------------------- /media/play2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/play2.mp3 -------------------------------------------------------------------------------- /media/pphana.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/pphana.jpg -------------------------------------------------------------------------------- /media/register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/register.png -------------------------------------------------------------------------------- /media/resID.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/resID.mp3 -------------------------------------------------------------------------------- /media/sticker/d: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /media/stickergf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/stickergf.gif -------------------------------------------------------------------------------- /media/stickergif.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/stickergif.mp4 -------------------------------------------------------------------------------- /media/suit/batu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/suit/batu.png -------------------------------------------------------------------------------- /media/suit/gunting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/suit/gunting.png -------------------------------------------------------------------------------- /media/suit/kertas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/suit/kertas.png -------------------------------------------------------------------------------- /media/telat.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/telat.mp3 -------------------------------------------------------------------------------- /media/tiktok1.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/tiktok1.mp4 -------------------------------------------------------------------------------- /media/tts.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/tts.mp3 -------------------------------------------------------------------------------- /media/tutorial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IndonesianDev/whatsapp-bot/2962ffb36e6d2aae6c4366eefe36f2d9c5b6e8b8/media/tutorial.png -------------------------------------------------------------------------------- /media/video/d: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /message/text/lang/ind.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs-extra') 2 | 3 | 4 | exports.wait = () => { 5 | return `Mohon tunggu sebentar~` 6 | } 7 | 8 | exports.gsm = (result) => { 9 | return `➸ *Model HP*: ${result.title}\n➸ *Spesifikasi*: ${result.spec}` 10 | } 11 | 12 | exports.waitmutualan = () => { 13 | return `Looking for a partner...` 14 | } 15 | 16 | exports.joox = (result) => { 17 | return `*Lagu ditemukan!*\n\n➸ *Penyanyi*: ${result[0].penyanyi}\n➸ *Judul*: ${result[0].judul}\n➸ *Album*: ${result[0].album}\n➸ *Ext*: ${result[0].ext}\n➸ *Size*: ${result[0].filesize}\n➸ *Durasi*: ${result[0].duration}\n\nMedia sedang dikirim, mohon tunggu...` 18 | } 19 | 20 | exports.videoLimit = () => { 21 | return `Ukuran video terlalu besar!` 22 | } 23 | 24 | exports.ok = () => { 25 | return `Ok jing~` 26 | } 27 | 28 | exports.detectorOn = (name, formattedTitle) => { 29 | return `*「 ANTI GROUP LINK 」*\n\nPerhatian untuk penghuni grup ${(name || formattedTitle)}\nGrup ini memiliki anti group link detector, apabila ada salah satu member mengirim group link di sini maka dia akan ter-kick secara otomatis.\n\nSekian terima kasih.\n- Admin ${(name || formattedTitle)}` 30 | } 31 | 32 | exports.levelingOn = () => { 33 | return `Fitur leveling berhasil *diaktifkan*!` 34 | } 35 | 36 | exports.levelingOff = () => { 37 | return `Fitur leveling berhasil *dinonaktifkan*!` 38 | } 39 | 40 | exports.levelingOnAlready = () => { 41 | return `Fitur leveling telah diaktifkan sebelumnya.` 42 | } 43 | 44 | exports.levelingNotOn = () => { 45 | return `Fitur leveling belum diaktifkan!` 46 | } 47 | exports.detectorOff = () => { 48 | return `Fitur anti-link berhasil *dinonaktifkan*!` 49 | } 50 | 51 | exports.detectorOnAlready = () => { 52 | return `Fitur anti-link telah diaktifkan sebelumnya.` 53 | } 54 | 55 | exports.linkDetected = () => { 56 | return `*「 ANTI GROUP LINK 」*\n\nKamu mengirim link group chat!\nMaaf tapi kami harus mengkick kamu...\nSelamat tinggal~` 57 | } 58 | 59 | exports.playt = (result) => { 60 | return `*Lagu ditemukan!*\n\n➸ *Judul*: ${result[0].title}\n➸ *Ext*: ${result[0].ext}\n➸ *Size*: ${result[0].size}\n➸ *Durasi*: ${result[0].duration}\n\nMedia sedang dikirim, mohon tunggu...` 61 | } 62 | 63 | exports.wrongFormat = () => { 64 | return `Format salah!` 65 | } 66 | 67 | exports.wrongFormatt = () => { 68 | return `Format salah!` 69 | aruga.sendFile(from, './media/register.png', id) 70 | } 71 | 72 | exports.emptyMess = () => { 73 | return `Silakan masukkan pesan yang ingin disampaikan!` 74 | } 75 | 76 | exports.Yt3 = () => { 77 | return `[❗] Terjadi kesalahan, tidak dapat meng konversi ke mp3!` 78 | } 79 | 80 | exports.Yt4 = () => { 81 | return `[❗] Terjadi kesalahan, mungkin error di sebabkan oleh sistem.` 82 | } 83 | 84 | exports.cmdNotFound = () => { 85 | return `Command tidak ditemukan!` 86 | } 87 | 88 | exports.blocked = () => { 89 | return `Bot tidak menerima panggilan. Karena kamu telah melanggar rules, maka kamu telah diblok!\n\nHarap hubungi owner: wa.me/6281294958473` 90 | } 91 | 92 | exports.ownerOnly = () => { 93 | return `Command ini khusus Owner-sama!` 94 | } 95 | 96 | exports.doneOwner = () => { 97 | return `Sudah selesai, Owner-sama~` 98 | } 99 | 100 | exports.groupOnly = () => { 101 | return `Command ini hanya bisa digunakan di dalam grup!` 102 | } 103 | 104 | exports.adminOnly = () => { 105 | return `Hanya admin grup yang bisa menggunakan command ini!` 106 | } 107 | 108 | exports.notNsfw = () => { 109 | return `Command NSFW belum diaktifkan!` 110 | } 111 | 112 | exports.nsfwOn = () => { 113 | return `Command NSFW berhasil *diaktifkan*!\nKetik *$nsfwmenu* untuk melihat list command.` 114 | } 115 | 116 | exports.nsfwOff = () => { 117 | return `Command NSFW berhasil *dinonaktifkan*!` 118 | } 119 | 120 | exports.addedGroup = (chat) => { 121 | return `Terima kasih telah mengundangku, para member *${chat.contact.name}*!\n\nKetik $rules terlebih dahulu ya~` 122 | } 123 | 124 | exports.nhFalse = () => { 125 | return `Kode tidak valid!` 126 | } 127 | 128 | exports.listBlock = (blockNumber) => { 129 | return `------[ HALL OF SHAME ]------ 130 | 131 | Total diblokir: *${blockNumber.length}* user\n` 132 | } 133 | 134 | exports.notPremium = () => { 135 | return `Maaf! Command ini khusus untuk user premium saja.` 136 | } 137 | 138 | exports.notAdmin = () => { 139 | return `Pengguna bukan admin!` 140 | } 141 | 142 | exports.adminAlready = () => { 143 | return `Tidak dapat promote pengguna yang merupakan admin!` 144 | } 145 | 146 | exports.botNotPremium = () => { 147 | return `Bot ini tidak mendukung command premium. Silakan hubungi pemilik bot ini.` 148 | } 149 | 150 | exports.botNotAdmin = () => { 151 | return `Jadikan bot sebagai admin terlebih dahulu!` 152 | } 153 | 154 | exports.ytLimit = () => { 155 | return `Size video terlalu besar!` 156 | } 157 | 158 | exports.ytFound = (result) => { 159 | return `Video ditemukan!\n\nTitle:\n${result.title}\n\nDescription:\n${result.desc}\n\nSize: ${result.size} / 50.0 MB\n\nMedia sedang dikirim, mohon tunggu...` 160 | } 161 | 162 | exports.fbFound = (result) => { 163 | return `Source:${result.source}` 164 | } 165 | 166 | exports.notRegistered = () => { 167 | return `Kamu belum terdafar di database!\n\nSilahkan Ketik /register namakalian | daerahkalian \n\n contohnya : /register alvio | bogor` 168 | } 169 | 170 | exports.notDaftar = () => { 171 | return `Kamu belum terdafar di database!\n\nSilakan Daftar dengan format:\n/daftar namakamu | kelaminmu\n\ncontoh= !daftar alvio | cowo` 172 | } 173 | 174 | exports.registered = () => { 175 | return `Selamat! Kamu telah terdaftar.\nKetik */rules* terlebih dahulu ya~` 176 | } 177 | 178 | exports.follow = () => { 179 | return `Makasih ya sudah follow instagram owner , semoga tuhan memberkatimu ~ , kirim ulang apa yang mau dikerjakan oleh bot , terimakasih` 180 | } 181 | 182 | exports.followsudah = () => { 183 | return `anda sudah menfollow ig owner` 184 | } 185 | 186 | exports.belomfollow = () => { 187 | return `anda belum menfollow ig owner , silahkan follow terlebih dahulu\n*dan silahkan cek bio owner di instagram*\nhttps://www.instagram.com/alvio151/\n\n*INGAT CEK BIO IG OWNER*` 188 | } 189 | exports.registeredAlready = () => { 190 | return `Kamu sudah mendaftar sebelumnya.` 191 | } 192 | 193 | exports.levelNull = () => { 194 | return `Kamu belum memiliki level!` 195 | } 196 | 197 | exports.welcome = (event) => { 198 | return `Selamat datang @${event.who.replace('@c.us', '')}!\n\nSemoga betah terus di grup kami ya~` 199 | } 200 | 201 | exports.welcomeOn = () => { 202 | return `Fitur welcome berhasil *diaktifkan*!` 203 | } 204 | 205 | exports.welcomeOff = () => { 206 | return `Fitur welcome berhasil *dinonaktifkan*!` 207 | } 208 | 209 | exports.welcomeOnAlready = () => { 210 | return `Fitur welcome telah diaktifkan sebelumnya.` 211 | } 212 | 213 | exports.minimalDb = () => { 214 | return ` Perlu setidaknya 10 user yang memiliki level di database!` 215 | } 216 | 217 | exports.autoStikOn = () => { 218 | return `Fitur auto-stiker berhasil *diaktifkan*!` 219 | } 220 | 221 | exports.autoStikOff = () => { 222 | return `Fitur auto-stiker berhasil *dinonaktifkan*!` 223 | } 224 | 225 | exports.autoStikOnAlready = () => { 226 | return `Fitur auto-stiker telah diaktifkan sebelumnya.` 227 | } 228 | exports.afkOn = () => { 229 | return `Fitur AFK berhasil *diaktifkan*!` 230 | } 231 | 232 | exports.afkOn = (pushname, reason) => { 233 | return `Fitur AFK berhasil *diaktifkan*!\n\n➸ *Username*: ${pushname}\n➸ *Alasan*: ${reason}` 234 | } 235 | 236 | exports.afkOnAlready = () => { 237 | return `Fitur AFK telah diaktifkan sebelumnya.` 238 | } 239 | 240 | exports.afkMentioned = (getReason, getTime) => { 241 | return `*「 AFK MODE 」*\n\nSssttt! Orangnya lagi afk, jangan diganggu!\n➸ *Alasan*: ${getReason}\n➸ *Sejak*: ${getTime}` 242 | } 243 | 244 | exports.afkDone = (pushname) => { 245 | return `*${pushname}* telah kembali dari AFK! Selamat datang kembali~` 246 | } 247 | 248 | exports.notNum = (q) => { 249 | return `"${q}", bukan angka!` 250 | } 251 | 252 | exports.playstore = (app_id, title, developer, description, price, free) => { 253 | return `➸ *Nama*: ${title}\n➸ *ID*: ${app_id}\n➸ *Developer*: ${developer}\n➸ *Gratis*: ${free}\n➸ *Harga*: ${price}\n➸ *Deskripsi*: ${description}` 254 | } 255 | 256 | exports.shopee = (nama, harga, terjual, shop_location, description, link_product) => { 257 | return `➸ *Nama*: ${nama}\n➸ *Harga*: ${harga}\n➸ *Terjual*: ${terjual}\n➸ *Lokasi*: ${shop_location}\n➸ *Link produk*: ${link_product}\n➸ *Deskripsi*: ${description}` 258 | } 259 | 260 | -------------------------------------------------------------------------------- /message/text/lang/index.js: -------------------------------------------------------------------------------- 1 | exports.ind = require('./ind') -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "whatsapp-bot", 3 | "version": "3.0.0", 4 | "description": "Whatsapp Bot - Node Js", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js" 8 | }, 9 | "author": "AlvioAdjijanuar", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/IndonesianDev/whatsapp-bot.git" 13 | }, 14 | "bugs": { 15 | "url": "https://github.com/IndonesianDev/whatsapp-bot/issues" 16 | }, 17 | "homepage": "https://github.com/IndonesianDev/whatsapp-bot", 18 | "license": "ISC", 19 | "dependencies": { 20 | "@open-wa/wa-automate": "^4.55.2", 21 | "@vitalets/google-translate-api": "^4.0.0", 22 | "app-root-path": "^3.0.0", 23 | "axios": "^0.21.1", 24 | "bent": "^7.3.12", 25 | "brainly-scraper": "^1.0.3", 26 | "canvacord": "^5.2.0", 27 | "chalk": "^4.1.0", 28 | "cheerio": "^1.0.0-rc.5", 29 | "dotenv": "^8.2.0", 30 | "emoji-unicode": "^2.0.1", 31 | "figlet": "^1.5.0", 32 | "file-type": "^16.0.1", 33 | "fluent-ffmpeg": "^2.1.2", 34 | "form-data": "^3.0.0", 35 | "fs-extra": "^9.0.1", 36 | "google-translate-open-api": "^1.3.5", 37 | "lowdb": "^1.0.0", 38 | "mathjs": "^9.3.2", 39 | "moment-timezone": "^0.5.31", 40 | "ms": "^2.1.3", 41 | "multer": "^1.4.2", 42 | "nana-api": "^1.1.3", 43 | "nedb": "^1.8.0", 44 | "needle": "^2.6.0", 45 | "nekobocc": "^1.1.0", 46 | "nekos.life": "^2.0.7", 47 | "nhentai-api": "^3.0.2", 48 | "nhentai-js": "^4.0.0", 49 | "node-fetch": "^2.6.1", 50 | "node-gtts": "^2.0.2", 51 | "node-tesseract-ocr": "^2.0.0", 52 | "image-to-base64": "^2.1.1", 53 | "parse-ms": "^2.1.0", 54 | "promise": "^8.1.0", 55 | "path": "^0.12.7", 56 | "quizizz.js": "^1.1.1", 57 | "remove.bg": "^1.3.0", 58 | "request": "^2.88.2", 59 | "sagiri": "^3.1.1", 60 | "sastrawijs": "^1.0.3", 61 | "stream": "^0.0.2", 62 | "util": "^0.12.3", 63 | "video-url-link": "git+https://github.com/YogaSakti/video-url-link.git" 64 | }, 65 | "devDependencies": { 66 | "babel-eslint": "^10.1.0", 67 | "eslint": "^7.12.1", 68 | "eslint-config-standard": "^16.0.1", 69 | "eslint-plugin-import": "^2.22.1", 70 | "eslint-plugin-node": "^11.1.0", 71 | "eslint-plugin-promise": "^4.2.1", 72 | "eslint-plugin-standard": "^5.0.0" 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /settings/admin.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/afk.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/antilink.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/antiporn.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /settings/antisticker.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/api.json: -------------------------------------------------------------------------------- 1 | { 2 | "apiNoBg": "ISI API KEY NO BG", 3 | "apiSS": "aa354f7fb72c4bcbad48678dabe0fef5", 4 | "apiSimi": "API SIMI KAMU", 5 | "token": "ISI TOKEN KAMU" 6 | } -------------------------------------------------------------------------------- /settings/autostiker.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/bacot.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/banned.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/biodata.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/code15.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /settings/code30.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /settings/code60.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /settings/dare.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/easy.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/hard.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/kuis.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /settings/kuismtk.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/kuismtkk.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/limit.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/medium.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/mtk.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/mtkeasy.json: -------------------------------------------------------------------------------- 1 | ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40"] -------------------------------------------------------------------------------- /settings/mtkhard.json: -------------------------------------------------------------------------------- 1 | ["70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100"] -------------------------------------------------------------------------------- /settings/mtkmedium.json: -------------------------------------------------------------------------------- 1 | ["41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70"] -------------------------------------------------------------------------------- /settings/ngegas.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/nsfw.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/piyo.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/point.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/premium.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/premiumcode.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /settings/registered.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/reminder.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/setting.json: -------------------------------------------------------------------------------- 1 | { 2 | "limitCount": 10, 3 | "ownerNumber": "628888888888@c.us", 4 | "memberLimit": 10, 5 | "groupLimit": 50, 6 | "medialimitCount": "5", 7 | "prefix": "/", 8 | "halal": true, 9 | "vhtearkey": "Your Apikey In Here", 10 | "apikeyz": "Your Apikey In Here", 11 | "lolhuman": "Your Apikey In Here", 12 | "apizeks": "Your Apikey In Here", 13 | "caliph": "beta", 14 | "urllolhuman": "https://api.lolhuman.xyz" 15 | } 16 | -------------------------------------------------------------------------------- /settings/sewa.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /settings/simi.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/stickerspam.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /settings/tebakgambar.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /settings/truth.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/uang.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /settings/update.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/usermp3.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /settings/welcome.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /temp/d.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /utils/d: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /utils/fetcher.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch') 2 | const FormData = require('form-data') 3 | const fs = require('fs') 4 | const { fromBuffer } = require('file-type') 5 | 6 | /** 7 | *Fetch Json from Url 8 | * 9 | *@param {String} url 10 | *@param {Object} options 11 | */ 12 | 13 | const fetchJson = (url, options) => 14 | new Promise((resolve, reject) => 15 | fetch(url, options) 16 | .then(response => response.json()) 17 | .then(json => resolve(json)) 18 | .catch(err => { 19 | console.error(err) 20 | reject(err) 21 | }) 22 | ) 23 | 24 | /** 25 | * Fetch Text from Url 26 | * 27 | * @param {String} url 28 | * @param {Object} options 29 | */ 30 | 31 | const fetchText = (url, options) => { 32 | return new Promise((resolve, reject) => { 33 | return fetch(url, options) 34 | .then(response => response.text()) 35 | .then(text => resolve(text)) 36 | .catch(err => { 37 | console.error(err) 38 | reject(err) 39 | }) 40 | }) 41 | } 42 | 43 | /** 44 | * Fetch base64 from url 45 | * @param {String} url 46 | */ 47 | 48 | const fetchBase64 = (url, mimetype) => { 49 | return new Promise((resolve, reject) => { 50 | console.log('Get base64 from:', url) 51 | return fetch(url) 52 | .then((res) => { 53 | const _mimetype = mimetype || res.headers.get('content-type') 54 | res.buffer() 55 | .then((result) => resolve(`data:${_mimetype};base64,` + result.toString('base64'))) 56 | }) 57 | .catch((err) => { 58 | console.error(err) 59 | reject(err) 60 | }) 61 | }) 62 | } 63 | 64 | /** 65 | * Upload images to telegra.ph server. 66 | * @param {Buffer} buffData 67 | * @param {string} fileName 68 | * @returns {Promise} 69 | */ 70 | const uploadImages = (buffData, fileName) => { 71 | return new Promise(async (resolve, reject) => { 72 | const { ext } = await fromBuffer(buffData) 73 | const filePath = `temp/${fileName}.${ext}` 74 | fs.writeFile(filePath, buffData, { encoding: 'base64' }, (err) => { 75 | if (err) reject(err) 76 | console.log('Uploading image to telegra.ph server...') 77 | const fileData = fs.readFileSync(filePath) 78 | const form = new FormData() 79 | form.append('file', fileData, `${fileName}.${ext}`) 80 | fetch('https://telegra.ph/upload', { 81 | method: 'POST', 82 | body: form 83 | }) 84 | .then((response) => response.json()) 85 | .then((result) => { 86 | if (result.error) reject(result.error) 87 | resolve('https://telegra.ph' + result[0].src) 88 | }) 89 | .then(() => fs.unlinkSync(filePath)) 90 | .catch((err) => reject(err)) 91 | }) 92 | }) 93 | } 94 | 95 | 96 | module.exports = { 97 | fetchJson, 98 | fetchText, 99 | fetchBase64, 100 | uploadImages 101 | } 102 | -------------------------------------------------------------------------------- /utils/index.js: -------------------------------------------------------------------------------- 1 | const chalk = require('chalk') 2 | const moment = require('moment-timezone') 3 | const crypto = require('crypto') 4 | moment.tz.setDefault('Asia/Jakarta').locale('id') 5 | 6 | /** 7 | * Get text with color 8 | * @param {String} text 9 | * @param {String} color 10 | * @return {String} Return text with color 11 | */ 12 | const color = (text, color) => { 13 | return !color ? chalk.blueBright(text) : chalk.keyword(color)(text) 14 | } 15 | 16 | 17 | /** 18 | * Get Time duration 19 | * @param {Date} timestamp 20 | * @param {Date} now 21 | */ 22 | const processTime = (timestamp, now) => { 23 | // timestamp => timestamp when message was received 24 | return moment.duration(now - moment(timestamp * 1000)).asSeconds() 25 | } 26 | 27 | /** 28 | * Get Code For Premium 29 | */ 30 | const createcode = (size) => { 31 | return crypto.randomBytes(size).toString('hex').slice(0, size) 32 | } 33 | 34 | 35 | /** 36 | * is it url? 37 | * @param {String} url 38 | */ 39 | const isUrl = (url) => { 40 | 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)) 41 | } 42 | 43 | // Message Filter / Message Cooldowns 44 | const usedCommandRecently = new Set() 45 | 46 | /** 47 | * Check is number filtered 48 | * @param {String} from 49 | */ 50 | const isFiltered = (from) => { 51 | return !!usedCommandRecently.has(from) 52 | } 53 | 54 | /** 55 | * Add number to filter 56 | * @param {String} from 57 | */ 58 | const addFilter = (from) => { 59 | usedCommandRecently.add(from) 60 | setTimeout(() => { 61 | return usedCommandRecently.delete(from) 62 | }, 5000) // 5sec is delay before processing next command 63 | } 64 | 65 | module.exports = { 66 | msgFilter: { 67 | isFiltered, 68 | addFilter 69 | }, 70 | processTime, 71 | createcode, 72 | isUrl, 73 | color 74 | } 75 | -------------------------------------------------------------------------------- /utils/options.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Get Client Options 3 | * @param {Function} start function 4 | * @param {Boolean} headless 5 | */ 6 | 7 | module.exports = options = (headless, start) => { 8 | const options = { 9 | sessionId: 'piyobot', 10 | headless: headless, 11 | multiDevice: true, 12 | qrTimeout: 0, 13 | authTimeout: 0, 14 | restartOnCrash: start, 15 | cacheEnabled: false, 16 | chromiumArgs: [ 17 | '--no-sandbox', 18 | '--disable-setuid-sandbox', 19 | '--aggressive-cache-discard', 20 | '--disable-cache', 21 | '--disable-application-cache', 22 | '--disable-offline-load-stale-cache', 23 | '--disk-cache-size=0' 24 | ] 25 | } 26 | return options 27 | } 28 | -------------------------------------------------------------------------------- /utils/stat.json: -------------------------------------------------------------------------------- 1 | { 2 | "sent": { 3 | 4 | }, 5 | "receive": { 6 | 7 | } 8 | } 9 | --------------------------------------------------------------------------------