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

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 |
36 |
37 |
38 |
39 | Persyaratan •
40 | Cara Penginstalan •
41 | Fiturnya •
42 | Terimakasih Kepada •
43 | lisensi
44 |
45 |
46 |
49 |
50 |
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+71ndifZbHZnZkv6fx7zRLJnTvnNJvPumVNCQjgQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBA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AQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBMqywP8DieiD6CqpO1wAAAAASUVORK5CYII=
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------