├── lib ├── banned.json ├── lowdb │ ├── CAF │ ├── adapters │ │ ├── CAF │ │ ├── MemorySync.js │ │ ├── Memory.js │ │ ├── LocalStorage.js │ │ ├── JSONFile.js │ │ ├── JSONFileSync.js │ │ ├── TextFile.js │ │ └── TextFileSync.js │ ├── MissingAdapterError.js │ ├── index.js │ ├── Low.js │ └── LowSync.js ├── jo.jpg ├── color.js ├── binary.js ├── mongoDB.js ├── cloudDBAdapter.js ├── database.js ├── converter.js ├── tictactoe.js ├── uploader.js ├── y2mate.js ├── exif.js ├── scraper.js └── myfunc.js ├── chan.mp3 ├── src ├── jo.mp4 ├── chan.mp3 ├── error.jpg ├── anjas.webp ├── ga mau.mp3 ├── hahaha.mp3 ├── dosa pantek.mp3 ├── lu siapa anjir.mp3 ├── virgam yg ganas.jpeg ├── menunya.js ├── math.js └── intro.js ├── Procfile ├── virtex ├── kanjut.js ├── iphone.mp3 ├── Darkness メ ├── doc.js ├── doctext.js ├── virtex3.js ├── thejo.js └── four.js ├── app.json ├── Dockerfile ├── docker-compose.yml ├── replit.nix ├── LICENSE ├── config.js ├── package.json ├── heroku.sh ├── yarn-error.log ├── README.md ├── replit_zip_error_log.txt └── .cache └── replit └── nix └── env.json /lib/banned.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /lib/lowdb/CAF: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/lowdb/adapters/CAF: -------------------------------------------------------------------------------- 1 | >\\\< 2 | -------------------------------------------------------------------------------- /chan.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/chan.mp3 -------------------------------------------------------------------------------- /lib/jo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/lib/jo.jpg -------------------------------------------------------------------------------- /src/jo.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/src/jo.mp4 -------------------------------------------------------------------------------- /src/chan.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/src/chan.mp3 -------------------------------------------------------------------------------- /src/error.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/src/error.jpg -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | worker: npm i -g pm2 && pm2 start index.js && pm2 save && pm2 logs 2 | -------------------------------------------------------------------------------- /src/anjas.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/src/anjas.webp -------------------------------------------------------------------------------- /src/ga mau.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/src/ga mau.mp3 -------------------------------------------------------------------------------- /src/hahaha.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/src/hahaha.mp3 -------------------------------------------------------------------------------- /virtex/kanjut.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/virtex/kanjut.js -------------------------------------------------------------------------------- /virtex/iphone.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/virtex/iphone.mp3 -------------------------------------------------------------------------------- /src/dosa pantek.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/src/dosa pantek.mp3 -------------------------------------------------------------------------------- /src/lu siapa anjir.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/src/lu siapa anjir.mp3 -------------------------------------------------------------------------------- /src/virgam yg ganas.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/THEJO307/jo-v10/HEAD/src/virgam yg ganas.jpeg -------------------------------------------------------------------------------- /lib/lowdb/MissingAdapterError.js: -------------------------------------------------------------------------------- 1 | class MissingAdapterError extends Error { 2 | constructor() { 3 | super(); 4 | this.message = 'Missing Adapter'; 5 | } 6 | } 7 | module.exports = { MissingAdapterError }; 8 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jo-private", 3 | "description": "WhatsApp Bot Using Lib Baileys", 4 | "repository": "https://github.com/THEJO307/jo-private", 5 | "logo": "https://node-js-sample.herokuapp.com/node.png", 6 | "keywords": ["multi-device"] 7 | } 8 | -------------------------------------------------------------------------------- /lib/lowdb/adapters/MemorySync.js: -------------------------------------------------------------------------------- 1 | class MemorySync { 2 | constructor() { 3 | this.data = null; 4 | } 5 | read() { 6 | return this.data || null; 7 | } 8 | write(obj) { 9 | this.data = obj; 10 | } 11 | } 12 | module.exports = { MemorySync }; 13 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:lts-buster 2 | 3 | RUN apt-get update && \ 4 | apt-get install -y \ 5 | ffmpeg \ 6 | imagemagick \ 7 | webp && \ 8 | apt-get upgrade -y && \ 9 | rm -rf /var/lib/apt/lists/* 10 | 11 | COPY package.json . 12 | 13 | RUN npm install 14 | 15 | COPY . . 16 | 17 | CMD ["node", "."] 18 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" # optional since v1.27.0 2 | services: 3 | web: 4 | build: . 5 | ports: 6 | - "8000:5000" 7 | volumes: 8 | - .:/code 9 | - logvolume01:/var/log 10 | links: 11 | - redis 12 | redis: 13 | image: redis 14 | volumes: 15 | logvolume01: {} -------------------------------------------------------------------------------- /lib/lowdb/adapters/Memory.js: -------------------------------------------------------------------------------- 1 | class Memory { 2 | constructor() { 3 | this.data = null; 4 | } 5 | read() { 6 | return Promise.resolve(this.data); 7 | } 8 | write(obj) { 9 | this.data = obj; 10 | return Promise.resolve(); 11 | } 12 | } 13 | module.exports = { Memory }; 14 | -------------------------------------------------------------------------------- /lib/color.js: -------------------------------------------------------------------------------- 1 | const chalk = require('chalk') 2 | 3 | const color = (text, color) => { 4 | return !color ? chalk.green(text) : chalk.keyword(color)(text) 5 | } 6 | 7 | const bgcolor = (text, bgcolor) => { 8 | return !bgcolor ? chalk.green(text) : chalk.bgKeyword(bgcolor)(text) 9 | } 10 | 11 | module.exports = { 12 | color, 13 | bgcolor 14 | } 15 | -------------------------------------------------------------------------------- /replit.nix: -------------------------------------------------------------------------------- 1 | { pkgs }: { 2 | deps = [ 3 | 4 | pkgs.nodejs-16_x 5 | pkgs.nodejs-16_x 6 | pkgs.python 7 | pkgs.nodePackages.typescript 8 | pkgs.libuuid 9 | pkgs.ffmpeg 10 | pkgs.imagemagick 11 | pkgs.wget 12 | pkgs.git 13 | pkgs.nodePackages.pm2 14 | ]; 15 | env ={ 16 | LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [pkgs.libuuid]; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /lib/lowdb/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | ...require('./adapters/JSONFile.js'), 3 | ...require('./adapters/JSONFileSync.js'), 4 | ...require('./adapters/LocalStorage.js'), 5 | ...require('./adapters/Memory.js'), 6 | ...require('./adapters/MemorySync.js'), 7 | ...require('./adapters/TextFile.js'), 8 | ...require('./adapters/TextFileSync.js'), 9 | ...require('./Low.js'), 10 | ...require('./LowSync.js'), 11 | } -------------------------------------------------------------------------------- /lib/lowdb/adapters/LocalStorage.js: -------------------------------------------------------------------------------- 1 | class LocalStorage { 2 | constructor(key) { 3 | this.key = key; 4 | } 5 | read() { 6 | const value = localStorage.getItem(this.key); 7 | if (value === null) { 8 | return null; 9 | } 10 | return JSON.parse(value); 11 | } 12 | write(obj) { 13 | localStorage.setItem(this.key, JSON.stringify(obj)); 14 | } 15 | } 16 | module.exports = { LocalStorage }; 17 | -------------------------------------------------------------------------------- /lib/binary.js: -------------------------------------------------------------------------------- 1 | async function dBinary(str) { 2 | var newBin = str.split(" ") 3 | var binCode = [] 4 | for (i = 0; i < newBin.length; i++) { 5 | binCode.push(String.fromCharCode(parseInt(newBin[i], 2))) 6 | } 7 | return binCode.join("") 8 | } 9 | 10 | async function eBinary(str = ''){ 11 | let res = '' 12 | res = str.split('').map(char => { 13 | return char.charCodeAt(0).toString(2); 14 | }).join(' ') 15 | return res 16 | } 17 | 18 | module.exports = { dBinary, eBinary } -------------------------------------------------------------------------------- /lib/lowdb/adapters/JSONFile.js: -------------------------------------------------------------------------------- 1 | const { TextFile } = require('./TextFile.js'); 2 | class JSONFile { 3 | constructor(filename) { 4 | this.adapter = new TextFile(filename); 5 | } 6 | async read() { 7 | const data = await this.adapter.read(); 8 | if (data === null) { 9 | return null; 10 | } 11 | else { 12 | return JSON.parse(data); 13 | } 14 | } 15 | write(obj) { 16 | return this.adapter.write(JSON.stringify(obj, null, 2)); 17 | } 18 | } 19 | module.exports = { JSONFile }; 20 | -------------------------------------------------------------------------------- /lib/lowdb/adapters/JSONFileSync.js: -------------------------------------------------------------------------------- 1 | const { TextFileSync } = require('./TextFileSync.js'); 2 | class JSONFileSync { 3 | constructor(filename) { 4 | this.adapter = new TextFileSync(filename); 5 | } 6 | read() { 7 | const data = this.adapter.read(); 8 | if (data === null) { 9 | return null; 10 | } 11 | else { 12 | return JSON.parse(data); 13 | } 14 | } 15 | write(obj) { 16 | this.adapter.write(JSON.stringify(obj, null, 2)); 17 | } 18 | } 19 | module.exports = { JSONFileSync }; 20 | -------------------------------------------------------------------------------- /lib/lowdb/Low.js: -------------------------------------------------------------------------------- 1 | const { MissingAdapterError } = require('./MissingAdapterError.js'); 2 | class Low { 3 | constructor(adapter) { 4 | this.data = null; 5 | if (adapter) { 6 | this.adapter = adapter; 7 | } 8 | else { 9 | throw new MissingAdapterError(); 10 | } 11 | } 12 | async read() { 13 | this.data = await this.adapter.read(); 14 | } 15 | async write() { 16 | if (this.data) { 17 | await this.adapter.write(this.data); 18 | } 19 | } 20 | } 21 | module.exports = { Low }; 22 | -------------------------------------------------------------------------------- /lib/lowdb/LowSync.js: -------------------------------------------------------------------------------- 1 | const { MissingAdapterError } = require('./MissingAdapterError.js'); 2 | class LowSync { 3 | constructor(adapter) { 4 | this.data = null; 5 | if (adapter) { 6 | this.adapter = adapter; 7 | } 8 | else { 9 | throw new MissingAdapterError(); 10 | } 11 | } 12 | read() { 13 | this.data = this.adapter.read(); 14 | } 15 | write() { 16 | if (this.data !== null) { 17 | this.adapter.write(this.data); 18 | } 19 | } 20 | } 21 | module.exports = { LowSync }; 22 | -------------------------------------------------------------------------------- /lib/lowdb/adapters/TextFile.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const { Writer } = require('steno'); 3 | class TextFile { 4 | constructor(filename) { 5 | this.filename = filename; 6 | this.writer = new Writer(filename); 7 | } 8 | async read() { 9 | let data; 10 | try { 11 | data = await fs.promises.readFile(this.filename, 'utf-8'); 12 | } 13 | catch (e) { 14 | if (e.code === 'ENOENT') { 15 | return null; 16 | } 17 | throw e; 18 | } 19 | return data; 20 | } 21 | write(str) { 22 | return this.writer.write(str); 23 | } 24 | } 25 | module.exports = { TextFile }; -------------------------------------------------------------------------------- /lib/lowdb/adapters/TextFileSync.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | class TextFileSync { 4 | constructor(filename) { 5 | this.filename = filename; 6 | this.tempFilename = path.join(path.dirname(filename), `.${path.basename(filename)}.tmp`); 7 | } 8 | read() { 9 | let data; 10 | try { 11 | data = fs.readFileSync(this.filename, 'utf-8'); 12 | } 13 | catch (e) { 14 | if (e.code === 'ENOENT') { 15 | return null; 16 | } 17 | throw e; 18 | } 19 | return data; 20 | } 21 | write(str) { 22 | fs.writeFileSync(this.tempFilename, str); 23 | fs.renameSync(this.tempFilename, this.filename); 24 | } 25 | } 26 | module.exports = { TextFileSync }; 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Dika Ardnt. 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 | -------------------------------------------------------------------------------- /src/menunya.js: -------------------------------------------------------------------------------- 1 | const menunya = ` 2 | ██▀░░░░░░░░░░░░░▀██ 3 | █│░░░░░░░░░░░░░░░│█ 4 | ▌│░░░░░░░░░░░░░░░│▐ 5 | ░└┐░░░░░░░░░░░░░┌┘░ 6 | ░░└┐░░░░░░░░░░░┌┘░░ 7 | ░░┌┘▄▄▄░░░░░▄▄▄└┐░░ 8 | ▌░│████▌░░░▐████│░▐ 9 | █░│▐██▀░░▄░░▀██▌│░█ 10 | █▌┘░░░░░▐█▌░░░░░└▐█ 11 | ██░░▄▄▓░▀█▀░▓▄▄░░██ 12 | ██▄─┘█▌░░░░░▐█└─▄██ 13 | ███░░▐─┬┬┬┬┬─▌░░███ 14 | ███▌░░┬┼┼┼┼┼┬░░▐███ 15 | ████▄░└┴┴┴┴┴┘░▄████ 16 | █████▄░░░░░░░▄█████ 17 | ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 18 | ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 19 | ╭━━•›ꪶ ཻུ۪۪ꦽꦼ̷⸙ ━ ━ ━ ━ ꪶ ཻུ۪۪ꦽꦼ̷⸙‹•━━╮ 20 | ┃╭┈─────────────⩵꙰ཱི࿐ 21 | ┃╰── ⏤͟͟͞MENU NYA ──➤ ↶↷ 22 | ╰━━•›ꪶ ཻུ۪۪ꦽꦼ̷⸙ ━ ━ ━ ━ ꪶ ཻུ۪۪ꦽꦼ̷⸙‹•━━͙✩̣̣̣̣ 23 | ▬▭▬▭▬ ✦✧✦ ▬▭▬▭▬ 24 | ╭━━•›〘 ALL MENU 〙 25 | 𖠀⩵꙰ཱི࿐ BUGMENU 26 | 𖠀⩵꙰ཱི࿐ FUNMENU 27 | 𖠀⩵꙰ཱི࿐ MAINMENU 28 | 𖠀⩵꙰ཱི࿐ VOICEMENU 29 | 𖠀⩵꙰ཱི࿐ GROUPMENU 30 | 𖠀⩵꙰ཱི࿐ OWNERMENU 31 | 𖠀⩵꙰ཱི࿐ ISLAMICMENU 32 | 𖠀⩵꙰ཱི࿐ SEARCHMENU 33 | 𖠀⩵꙰ཱི࿐ EPHOTOMENU 34 | 𖠀⩵꙰ཱི࿐ RANDOMMENU 35 | 𖠀⩵꙰ཱི࿐ TEKSPROMENU 36 | 𖠀⩵꙰ཱི࿐ PRIMBONMENU 37 | 𖠀⩵꙰ཱི࿐ CONVERTMENU 38 | 𖠀⩵꙰ཱི࿐ WEBZONEMENU 39 | 𖠀⩵꙰ཱི࿐ DATABASEMENU 40 | 𖠀⩵꙰ཱི࿐ PHOTOOXYMENU 41 | 𖠀⩵꙰ཱི࿐ DOWNLOADMENU 42 | 𖠀⩵꙰ཱི࿐ ANONYMOUSMENU 43 | ╰━ ━ ━ ━ ━ ━ ━ ━ ━ ━•⩵꙰ཱི࿐ 44 | ▬▭▬▭▬ ✦✧✦ ▬▭▬▭▬ 45 | 46 | © ⏤͟͟͞𝑻𝑯𝑬 𝑱𝑶 𝑩𝑶𝑻𝒁 47 | ` 48 | exports.menunya = menunya -------------------------------------------------------------------------------- /lib/mongoDB.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | const { Schema } = mongoose 3 | 4 | module.exports = class mongoDB { 5 | constructor(url, options = { useNewUrlParser: true, useUnifiedTopology: true }) { 6 | this.url = url 7 | this.data = this._data = this._schema = this._model = {} 8 | this.db 9 | this.options = options 10 | } 11 | async read() { 12 | this.db = await mongoose.connect(this.url, { ...this.options }) 13 | this.connection = mongoose.connection 14 | let schema = this._schema = new Schema({ 15 | data: { 16 | type: Object, 17 | required: true, //depends on whether the field is mandatory or not 18 | default: {} 19 | } 20 | }) 21 | // this._model = mongoose.model('data', schema) 22 | try { this._model = mongoose.model('data', schema) } catch { this._model = mongoose.model('data') } 23 | this._data = await this._model.findOne({}) 24 | if (!this._data) { 25 | this.data = {} 26 | await this.write(this.data) 27 | this._data = await this._model.findOne({}) 28 | } else this.data = this._data.data 29 | return this.data 30 | } 31 | 32 | 33 | async write(data) { 34 | if (!data) return data 35 | if (!this._data) return (new this._model({ data })).save() 36 | this._model.findById(this._data._id, (err, docs) => { 37 | if (!err) { 38 | if (!docs.data) docs.data = {} 39 | docs.data = data 40 | return docs.save() 41 | } 42 | }) 43 | } 44 | } -------------------------------------------------------------------------------- /src/math.js: -------------------------------------------------------------------------------- 1 | let modes = { 2 | noob: [-3, 3,-3, 3, '+-', 15000, 10], 3 | easy: [-10, 10, -10, 10, '*/+-', 20000, 40], 4 | medium: [-40, 40, -20, 20, '*/+-', 40000, 150], 5 | hard: [-100, 100, -70, 70, '*/+-', 60000, 350], 6 | extreme: [-999999, 999999, -999999, 999999, '*/', 99999, 9999], 7 | impossible: [-99999999999, 99999999999, -99999999999, 999999999999, '*/', 30000, 35000], 8 | impossible2: [-999999999999999, 999999999999999, -999, 999, '/', 30000, 50000] 9 | } 10 | 11 | let operators = { 12 | '+': '+', 13 | '-': '-', 14 | '*': '×', 15 | '/': '÷' 16 | } 17 | 18 | function randomInt(from, to) { 19 | if (from > to) [from, to] = [to, from] 20 | from = Math.floor(from) 21 | to = Math.floor(to) 22 | return Math.floor((to - from) * Math.random() + from) 23 | } 24 | 25 | function pickRandom(list) { 26 | return list[Math.floor(Math.random() * list.length)] 27 | } 28 | 29 | function genMath(mode) { 30 | return new Promise((resolve, reject) => { 31 | let [a1, a2, b1, b2, ops, time, bonus] = modes[mode] 32 | let a = randomInt(a1, a2) 33 | let b = randomInt(b1, b2) 34 | let op = pickRandom([...ops]) 35 | let result = (new Function(`return ${a} ${op.replace('/', '*')} ${b < 0 ? `(${b})` : b}`))() 36 | if (op == '/') [a, result] = [result, a] 37 | hasil = { 38 | soal: `${a} ${operators[op]} ${b}`, 39 | mode: mode, 40 | waktu: time, 41 | hadiah: bonus, 42 | jawaban: result 43 | } 44 | resolve(hasil) 45 | }) 46 | } 47 | 48 | module.exports = { modes, operators, randomInt, pickRandom, genMath } 49 | -------------------------------------------------------------------------------- /lib/cloudDBAdapter.js: -------------------------------------------------------------------------------- 1 | const got = require('got') 2 | 3 | const stringify = obj => JSON.stringify(obj, null, 2) 4 | const parse = str => JSON.parse(str, (_, v) => { 5 | if ( 6 | v !== null && 7 | typeof v === 'object' && 8 | 'type' in v && 9 | v.type === 'Buffer' && 10 | 'data' in v && 11 | Array.isArray(v.data)) { 12 | return Buffer.from(v.data) 13 | } 14 | return v 15 | }) 16 | class CloudDBAdapter { 17 | constructor(url, { 18 | serialize = stringify, 19 | deserialize = parse, 20 | fetchOptions = {} 21 | } = {}) { 22 | this.url = url 23 | this.serialize = serialize 24 | this.deserialize = deserialize 25 | this.fetchOptions = fetchOptions 26 | } 27 | 28 | async read() { 29 | try { 30 | let res = await got(this.url, { 31 | method: 'GET', 32 | headers: { 33 | 'Accept': 'application/json;q=0.9,text/plain' 34 | }, 35 | ...this.fetchOptions 36 | }) 37 | if (res.statusCode !== 200) throw res.statusMessage 38 | return this.deserialize(res.body) 39 | } catch (e) { 40 | return null 41 | } 42 | } 43 | 44 | async write(obj) { 45 | let res = await got(this.url, { 46 | method: 'POST', 47 | headers: { 48 | 'Content-Type': 'application/json' 49 | }, 50 | ...this.fetchOptions, 51 | body: this.serialize(obj) 52 | }) 53 | if (res.statusCode !== 200) throw res.statusMessage 54 | return res.body 55 | } 56 | } 57 | 58 | module.exports = CloudDBAdapter 59 | -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Create By THE JO BOT 3 | * Base by Dika Ardnt 4 | */ 5 | 6 | const fs = require('fs') 7 | const chalk = require('chalk') 8 | 9 | // Website Api 10 | global.APIs = { 11 | zenz: 'https://zenzapis.xyz', 12 | } 13 | 14 | // Apikey Website Api 15 | global.APIKeys = { 16 | 'https://zenzapis.xyz': 'Your Key', 17 | } 18 | 19 | 20 | global.ownername = 'THE JO BOT' 21 | global.autorecording = false //status auto merekam ( auto record ) 22 | global.autoketik = false //status auto mengetik (auto typing) 23 | global.available = false //status online (online) 24 | // Other 25 | global.owner = ['60177426853','60177426853','60177426853'] 26 | global.premium = ['60177426853'] 27 | global.packname = 'The Jo Bot' 28 | global.author = 'WhatsApp Bot' 29 | global.wlcm = [] 30 | global.sessionName = 'session' 31 | global.prefa = ['','!','.','🐦','🐤','🗿'] 32 | global.sp = '⭔' 33 | global.mess = { 34 | success: '✓ Success', 35 | admin: 'Fitur Khusus Admin Group!', 36 | botAdmin: 'Bot Harus Menjadi Admin Terlebih Dahulu!', 37 | owner: 'Fitur Khusus Owner', 38 | group: 'Fitur Digunakan Hanya Untuk Group!', 39 | private: 'Fitur Digunakan Hanya Untuk Private Chat!', 40 | bot: 'Fitur Khusus Pengguna Nomor Bot', 41 | wait: 'Loading...', 42 | endLimit: 'Limit Harian Anda Telah Habis, Limit Akan Direset Setiap Jam 12', 43 | } 44 | global.limitawal = { 45 | premium: "Infinity", 46 | free: 100 47 | } 48 | global.thumb = fs.readFileSync('./lib/jo.jpg') 49 | global.visoka = { url: 'https://telegra.ph/file/15209657f9d4f59c7ca1e.mp4' } 50 | 51 | let file = require.resolve(__filename) 52 | fs.watchFile(file, () => { 53 | fs.unwatchFile(file) 54 | console.log(chalk.redBright(`Update'${__filename}'`)) 55 | delete require.cache[file] 56 | require(file) 57 | }) 58 | -------------------------------------------------------------------------------- /lib/database.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const _fs = require('fs') 3 | const { promises: fs } = _fs 4 | 5 | class Database { 6 | /** 7 | * Create new Database 8 | * @param {String} filepath Path to specified json database 9 | * @param {...any} args JSON.stringify arguments 10 | */ 11 | constructor(filepath, ...args) { 12 | this.file = path.resolve(filepath) 13 | this.logger = console 14 | 15 | this._load() 16 | 17 | this._jsonargs = args 18 | this._state = false 19 | this._queue = [] 20 | this._interval = setInterval(async () => { 21 | if (!this._state && this._queue && this._queue[0]) { 22 | this._state = true 23 | await this[this._queue.shift()]().catch(this.logger.error) 24 | this._state = false 25 | } 26 | }, 1000) 27 | 28 | } 29 | 30 | get data() { 31 | return this._data 32 | } 33 | 34 | set data(value) { 35 | this._data = value 36 | this.save() 37 | } 38 | 39 | /** 40 | * Queue Load 41 | */ 42 | load() { 43 | this._queue.push('_load') 44 | } 45 | 46 | /** 47 | * Queue Save 48 | */ 49 | save() { 50 | this._queue.push('_save') 51 | } 52 | 53 | _load() { 54 | try { 55 | return this._data = _fs.existsSync(this.file) ? JSON.parse(_fs.readFileSync(this.file)) : {} 56 | } catch (e) { 57 | this.logger.error(e) 58 | return this._data = {} 59 | } 60 | } 61 | 62 | async _save() { 63 | let dirname = path.dirname(this.file) 64 | if (!_fs.existsSync(dirname)) await fs.mkdir(dirname, { recursive: true }) 65 | await fs.writeFile(this.file, JSON.stringify(this._data, ...this._jsonargs)) 66 | return this.file 67 | } 68 | } 69 | 70 | module.exports = Database 71 | 72 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jo-bot", 3 | "version": "8.5.4", 4 | "description": "WhatsApp Using Lib Baileys Multi Device", 5 | "main": "index.js", 6 | "type": "commonjs", 7 | "scripts": { 8 | "start": "node index.js" 9 | }, 10 | "keywords": [ 11 | "termux", 12 | "whatsapp", 13 | "2021", 14 | "wabase-md", 15 | "base", 16 | "baileys-md", 17 | "bot", 18 | "bot-md", 19 | "multi-device" 20 | ], 21 | "author": "The Jo Bot.", 22 | "license": "MIT", 23 | "dependencies": { 24 | "@adiwajshing/baileys": "github:THEJO307/Baileys", 25 | "@adiwajshing/keyed-db": "^0.2.4", 26 | "awesome-phonenumber": "^2.64.0", 27 | "axios": "^0.24.0", 28 | "chalk": "^4.1.2", 29 | "cheerio": "^1.0.0-rc.10", 30 | "child_process": "^1.0.2", 31 | "crypto": "^1.0.1", 32 | "file-type": "^16.5.3", 33 | "fluent-ffmpeg": "^2.1.2", 34 | "fs": "0.0.1-security", 35 | "g-i-s": "^2.1.6", 36 | "google-it": "^1.6.2", 37 | "got": "^11.8.3", 38 | "human-readable": "^0.2.1", 39 | "jimp": "^0.16.1", 40 | "jsdom": "^16.4.0", 41 | "lowdb": "^2.1.0", 42 | "moment-timezone": "^0.5.34", 43 | "mongoose": "^6.2.1", 44 | "node-cron": "^3.0.0", 45 | "node-fetch": "^2.6.1", 46 | "node-webpmux": "^3.1.0", 47 | "os": "^0.1.2", 48 | "path": "^0.12.7", 49 | "perf_hooks": "0.0.1", 50 | "pino": "^7.0.5", 51 | "qrcode-terminal": "^0.12.0", 52 | "remove.bg": "^1.3.0", 53 | "request": "^2.88.2", 54 | "scrape-primbon": "^1.1.0", 55 | "util": "^0.12.4", 56 | "yargs": "^17.2.1", 57 | "yt-search": "^2.10.2" 58 | }, 59 | "directories": { 60 | "lib": "lib", 61 | "src": "src" 62 | }, 63 | "repository": { 64 | "type": "git", 65 | "url": "git+https://github.com/THEJO307/jo-private.git" 66 | }, 67 | "bugs": { 68 | "url": "https://github.com/THEJO307/jo-private/issues" 69 | }, 70 | "homepage": "https://github.com/THEJO307/jo-private#readme" 71 | } 72 | -------------------------------------------------------------------------------- /src/intro.js: -------------------------------------------------------------------------------- 1 | const intro = ` 2 | Nama lengkap: 3 | Nama panggilan: 4 | Hobi: 5 | Umur: 6 | Gender: 7 | Kelas: 8 | Tinggi badan: 9 | Beratbadan : 10 | Agama: 11 | Golongan darah: 12 | Status: 13 | Nama pacar: 14 | Jumlah mantan: 15 | Nama mantan: 16 | Nama bapak : 17 | Nama ibu : 18 | Nama kakak: 19 | Kakak online: 20 | Kakak kandung : 21 | Jumlah kakak: 22 | Nama adek: 23 | Adek online: 24 | Adek kandung : 25 | Jumlah adek: 26 | Nama kakek: 27 | Kakek dari ayah : 28 | Kakek dari ibu : 29 | Nama nenek: 30 | Nenek dari ayah : 31 | Nenek dari ibu : 32 | Nama bibi: 33 | Bibi dari ayah : 34 | Bibi dari ibu : 35 | Nama paman: 36 | Paman dari ayah : 37 | Paman dari ibu : 38 | KTP: 39 | SIM: 40 | STNK: 41 | BPKB: 42 | KK: 43 | Alamat rumah: 44 | RT: 45 | RW: 46 | KELURAHAN: 47 | KECAMATAN: 48 | KABUPATEN: 49 | KOTA: 50 | PROVINSI: 51 | PLANET: 52 | GALAXY: 53 | UNIVERSE: 54 | LANGIT: 55 | DARATAN: 56 | LAUTAN: 57 | KEPULAUAN: 58 | SAMUDRA: 59 | UKURAN SEPATU: 60 | UKURAN BAJU: 61 | UKURAN CELANA: 62 | LEBAR PINGGANG: 63 | PANJANG TANGAN: 64 | PANJANG KAKI: 65 | MAKANAN FAVORIT: 66 | MINUMAN FAVORIT: 67 | FILM FAVORIT: 68 | SINETRON FAVORIT: 69 | GAME FAVORIT: 70 | ANIME FAVORIT: 71 | MANGA FAVORIT: 72 | MANHUA FAVORIT: 73 | MANHWA FAVORIT: 74 | CHANNEL YOUTUBE: 75 | INSTAGRAM: 76 | TWITTEER: 77 | FACEBOOK: 78 | MUSIC FAVORIT: 79 | SIFAT: 80 | SIKAP: 81 | ZODIAK: 82 | TANGGAL LAHIR: 83 | MERK HP: 84 | MERK MOTOR: 85 | MERK MOBIL: 86 | TINGKAT RUMAH: 87 | ALAMAT SEKOLAH: 88 | Ukuran daleman: 89 | Ukuran atasan : 90 | Diameter kepala : 91 | Statistik tubuh: 92 | Diameter perut : 93 | Diameter lengan : 94 | Diameter paha : 95 | Diameter lutut : 96 | Diameter betis: 97 | Panjang tangan : 98 | Panjang kaki : 99 | Panjang kepala : 100 | Lebar hidung : 101 | Cita cita : 102 | Hobi : 103 | Jenis hewanpeliharaan : 104 | Nama hewan: 105 | Diameter rumah: 106 | Waifu: 107 | Husbu: 108 | Loli kesukaan : 109 | Shota kesukaan : 110 | Punya brp teman : 111 | Teman online : 112 | Teman offline : 113 | Teman main game: 114 | Teman sekolah: 115 | Temen rumah: 116 | ` 117 | exports.intro = intro -------------------------------------------------------------------------------- /heroku.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | { 3 | set -e 4 | SUDO='' 5 | if [ "$(id -u)" != "0" ]; then 6 | SUDO='sudo' 7 | echo "This script requires superuser access." 8 | echo "You will be prompted for your password by sudo." 9 | # clear any previous sudo permission 10 | sudo -k 11 | fi 12 | 13 | 14 | # run inside sudo 15 | $SUDO bash <