├── LICENSE.txt ├── README.md ├── database.json ├── handler.js ├── index.js ├── lib ├── anti-spam-config.js ├── antitoxic-database.js ├── canvas.js ├── cloudDBAdapter.js ├── converter.js ├── database.js ├── ezgif-convert.js ├── gdrive.js ├── helper.js ├── import.js ├── levelling.js ├── logs.js ├── mongoDB.js ├── playlist.js ├── plugins.js ├── print.js ├── queque.js ├── scraper.js ├── simple.js ├── sticker.js ├── store.js ├── subbot-manager.js ├── tictactoe.d.ts ├── tictactoe.js ├── uploadFile.js ├── uploadImage.js ├── webp.js ├── webp2mp4.js ├── welcome.js └── y2mate.js ├── package.json ├── plugins ├── +18-porno.js ├── _antiarabes.js ├── _antibot.js ├── _antilink.js ├── _antiprivado.js ├── _antisubbots.js ├── _antitoxic.js ├── _audios-responder.js ├── _autodetect.js ├── _autoresponder.js ├── _cmdWithMedia.js ├── _expired-prem.js ├── _getmsg.js ├── _infomessage.js ├── _level.js ├── _nable.js ├── _templateResponse.js ├── _welcome.js ├── ai-dalle.js ├── ai-demo.js ├── ai-flux.js ├── ai-gemini.js ├── ai-ia.js ├── ai-llama.js ├── ai-miku.js ├── ai-simi.js ├── ai-sora.js ├── anime-angry.js ├── anime-bath.js ├── anime-bite.js ├── anime-bleh.js ├── anime-blush.js ├── anime-bored.js ├── anime-clap.js ├── anime-coffee.js ├── anime-cry.js ├── anime-cuddle.js ├── anime-dance.js ├── anime-drunk.js ├── anime-eat.js ├── anime-facepalm.js ├── anime-happy.js ├── anime-hello.js ├── anime-hug.js ├── anime-kill.js ├── anime-kiss.js ├── anime-laugh.js ├── anime-lick.js ├── anime-love.js ├── anime-pat.js ├── anime-poke.js ├── anime-pout.js ├── anime-ppcp.js ├── anime-preg.js ├── anime-punch.js ├── anime-random.js ├── anime-run.js ├── anime-sad.js ├── anime-scared.js ├── anime-seduce.js ├── anime-shy.js ├── anime-slap.js ├── anime-sleep.js ├── anime-smoke.js ├── anime-think.js ├── anime-waifu.js ├── buscador-cuevanasearch.js ├── buscador-githubsearch.js ├── buscador-google.js ├── buscador-hentaisearch.js ├── buscador-imagen.js ├── buscador-infoanime.js ├── buscador-npmjs.js ├── buscador-pinterest.js ├── buscador-pornhub.js ├── buscador-tiktoksearch.js ├── buscador-tweetposts.js ├── buscador-xnxxsearch.js ├── buscador-xvideos.js ├── buscador-yts.js ├── check-url.js ├── convertidor-catbox.js ├── convertidor-ibb.js ├── convertidor-togifaud.js ├── convertidor-tomp3.js ├── convertidor-tourl.js ├── convertidor-tovideo.js ├── convertidor-tts.js ├── convertidor-tts2.js ├── descargas-facebook.js ├── descargas-gitclone.js ├── descargas-instagram.js ├── descargas-mediafire.js ├── descargas-mega.js ├── descargas-modapk.js ├── descargas-npmdl.js ├── descargas-pinvid.js ├── descargas-play.js ├── descargas-randomtiktok.js ├── descargas-spotify.js ├── descargas-tiktok.js ├── descargas-tiktok_img.js ├── descargas-tiktok_mp3.js ├── descargas-twitter.js ├── descargas-url.js ├── descargas-xnxxdl.js ├── descargas-xvideosdl.js ├── download-audios.js ├── fun-afk.js ├── fun-agarrartetas.js ├── fun-amigo-random.js ├── fun-calculador.js ├── fun-chaqueta.js ├── fun-chiste.js ├── fun-consejo.js ├── fun-doxeo.js ├── fun-doxxing.js ├── fun-factos.js ├── fun-formarpareja.js ├── fun-formarpareja5.js ├── fun-fortuna.js ├── fun-frases.js ├── fun-gay.js ├── fun-huevo.js ├── fun-imagenes.js ├── fun-iqtest.js ├── fun-memes.js ├── fun-morse.js ├── fun-nombreninja.js ├── fun-paja.js ├── fun-personalidad.js ├── fun-piropo.js ├── fun-pokedex.js ├── fun-preguntas.js ├── fun-ruletamuerte.js ├── fun-ship.js ├── fun-sorteo.js ├── fun-top.js ├── fun-trio.js ├── fun-zodiac.js ├── game-_suitpvp.js ├── game-_ttt.js ├── game-ahorcado.js ├── game-delttt.js ├── game-math.js ├── game-math_answer.js ├── game-ppt.js ├── game-sopa_de_letras.js ├── game-suitpvp.js ├── game-ttt.js ├── grupo-add.js ├── grupo-admins.js ├── grupo-advertencia.js ├── grupo-banchat.js ├── grupo-config.js ├── grupo-delete.js ├── grupo-demote.js ├── grupo-encuesta.js ├── grupo-fantasmas.js ├── grupo-gpbanner.js ├── grupo-gpdesc.js ├── grupo-gpname.js ├── grupo-hidetag.js ├── grupo-infogrupo.js ├── grupo-kick.js ├── grupo-kickfantasmas.js ├── grupo-kicknum.js ├── grupo-linea.js ├── grupo-link.js ├── grupo-listawarns.js ├── grupo-mute.js ├── grupo-promote.js ├── grupo-revoke.js ├── grupo-setbye.js ├── grupo-setmoji_tagall.js ├── grupo-setwelcome.js ├── grupo-tagall.js ├── grupo-unbanchat.js ├── grupo-unwarn.js ├── info-autoresponder.js ├── info-dashboard.js ├── info-depool.js ├── info-ds.js ├── info-estado.js ├── info-gruposofc.js ├── info-infobot.js ├── info-newcommand.js ├── info-ping.js ├── info-reporte.js ├── info-sistema.js ├── info-speed.js ├── info-speedtest.js ├── info-totalplugins.js ├── jadibot-bots.js ├── jadibot-deletebot.js ├── jadibot-help.js ├── jadibot-serbot.js ├── jadibot-serbotmenu.js ├── jadibot-token.js ├── main-afk.js ├── main-allfake.js ├── main-creator.js ├── main-menu-botones.js ├── main-menucompleto.js ├── main-runtime.js ├── main-script.js ├── menu-audios.js ├── miku-concierto.js ├── miku-studio.js ├── nsfw-69.js ├── nsfw-anal.js ├── nsfw-blowjob.js ├── nsfw-boobjob.js ├── nsfw-cum.js ├── nsfw-fap.js ├── nsfw-follar.js ├── nsfw-footjob.js ├── nsfw-fuck.js ├── nsfw-grabboobs.js ├── nsfw-grop.js ├── nsfw-penetrar.js ├── nsfw-pussy.js ├── nsfw-rule34.js ├── nsfw-sexo.js ├── nsfw-spank.js ├── nsfw-suckboobs.js ├── nsfw-undress.js ├── nsfw-violar.js ├── nsfw-yuri.js ├── owner-addcoins.js ├── owner-adddelowner.js ├── owner-addprem.js ├── owner-aimiku-config.js ├── owner-anadirXP.js ├── owner-autoadmin.js ├── owner-backup.js ├── owner-banlist.js ├── owner-banuser.js ├── owner-bcgc.js ├── owner-block-unblock.js ├── owner-blocklist.js ├── owner-chetar.js ├── owner-cleanfiles.js ├── owner-cleartmp.js ├── owner-creargc.js ├── owner-deletefile.js ├── owner-deschetar.js ├── owner-dsowner.js ├── owner-exec.js ├── owner-exec2.js ├── owner-get.js ├── owner-getplugin.js ├── owner-grouplist.js ├── owner-join.js ├── owner-leavegc.js ├── owner-let.js ├── owner-prefix.js ├── owner-quitarXP.js ├── owner-quitarcoin.js ├── owner-resetprefix.js ├── owner-resetuser.js ├── owner-restart.js ├── owner-reunion.js ├── owner-savefile.js ├── owner-saveplugin.js ├── owner-setavatar.js ├── owner-setbanner.js ├── owner-setcmd.js ├── owner-setcmd_del.js ├── owner-setcmd_list.js ├── owner-seticono.js ├── owner-setimage.js ├── owner-setmoneda.js ├── owner-setname.js ├── owner-setstatus.js ├── owner-spam2.js ├── owner-subbotadmin.js ├── owner-subbots-admin.js ├── owner-subbots.js ├── owner-unbanuser.js ├── owner-update.js ├── pujarwaifu.js ├── random-loli.js ├── regalarwaifu.js ├── rg-confesar.js ├── rg-delbirth.js ├── rg-deldescription.js ├── rg-delgenre.js ├── rg-lb.js ├── rg-levelup.js ├── rg-marry.js ├── rg-perfil.js ├── rg-respuesta.js ├── rg-ser-premium.js ├── rg-setbirth.js ├── rg-setdescription.js ├── rg-setgenre.js ├── rg-unreg.js ├── rg-verificar.js ├── rpg-aventura.js ├── rpg-baltop.js ├── rpg-bank.js ├── rpg-berburu_cazar.js ├── rpg-canjear.js ├── rpg-cartera.js ├── rpg-casino.js ├── rpg-cf.js ├── rpg-codigo.js ├── rpg-cofre.js ├── rpg-coleccion.js ├── rpg-crimen.js ├── rpg-daily.js ├── rpg-depositar.js ├── rpg-explorar.js ├── rpg-gremio.js ├── rpg-halloween.js ├── rpg-inventario.js ├── rpg-mazmorra.js ├── rpg-mensual.js ├── rpg-minar.js ├── rpg-navida.js ├── rpg-ranking.js ├── rpg-retirar.js ├── rpg-robarcoin.js ├── rpg-robarxp.js ├── rpg-ruleta.js ├── rpg-save.js ├── rpg-shop.js ├── rpg-slot.js ├── rpg-slut.js ├── rpg-stats.js ├── rpg-tienda.js ├── rpg-trabajar.js ├── rpg-transferir.js ├── rpg-waifu.js ├── rpg-weekly.js ├── sticker-brat.js ├── sticker-bratvid.js ├── sticker-emojimix.js ├── sticker-pfp.js ├── sticker-qc.js ├── sticker-setmeta.js ├── sticker-sticker.js ├── sticker-toimg.js ├── sticker-wm.js ├── stickers-ttp_attp.js ├── stop-subbot.js ├── subbot-commands.js ├── tools-cal.js ├── tools-clima.js ├── tools-detectar.js ├── tools-fake.js ├── tools-hd.js ├── tools-horario.js ├── tools-ip.js ├── tools-letra.js ├── tools-lid.js ├── tools-readviewonce.js ├── tools-say.js ├── tools-shazam.js ├── tools-southpark.js ├── tools-spamwa.js ├── tools-ssweb.js ├── tools-tamaño.js ├── tools-todoc.js ├── tools-translate.js ├── tools-up.js ├── tools-whatmusic.js └── tools-wikipedia.js ├── settings.js ├── src ├── audios │ ├── A bueno adios master.mp3 │ ├── Ara.mp3 │ ├── Banate.mp3 │ ├── Bienvenido.mp3 │ ├── Blackpink in your area.mp3 │ ├── Buen día grupo.mp3 │ ├── Buenas noches.mp3 │ ├── Buenos-dias-2.mp3 │ ├── Calla Fan de BTS.mp3 │ ├── Cambiate a Movistar.mp3 │ ├── Corte Corte.mp3 │ ├── DiagnosticadoConGay.mp3 │ ├── El Toxico.mp3 │ ├── Elmo sabe donde vives.mp3 │ ├── Elmo.mp3 │ ├── En caso de una investigación.mp3 │ ├── Eres Fuerte.mp3 │ ├── Es putoo.mp3 │ ├── Esta Zzzz.mp3 │ ├── Feliz cumple.mp3 │ ├── Fiesta1.mp3 │ ├── Hola.mp3 │ ├── Homero chino.mp3 │ ├── Las reglas del grupo.mp3 │ ├── Me anda buscando anonymous.mp3 │ ├── Momento equisde.mp3 │ ├── Motivacion.mp3 │ ├── Muchachos.mp3 │ ├── Murio.m4a │ ├── Nico Nico.mp3 │ ├── No Rompas Mas.mp3 │ ├── No soy real.mp3 │ ├── Noche.mp3 │ ├── Nuevo audio.mp3 │ ├── Onichan.mp3 │ ├── Porque ta tite.mp3 │ ├── Potaxio.mp3 │ ├── Que tal Grupo.mp3 │ ├── Se estan riendo de mi.mp3 │ ├── Su nivel de pendejo.mp3 │ ├── Tal vez.mp3 │ ├── Te gusta el Pepino.mp3 │ ├── Te-amo.mp3 │ ├── Todo bien.mp3 │ ├── Traigan le una falda.mp3 │ ├── Tu.mp3 │ ├── UwU.mp3 │ ├── Y este quien es.mp3 │ ├── Ya antojaron.mp3 │ ├── Yamete-kudasai.mp3 │ ├── a.mp3 │ ├── abduzcan.mp3 │ ├── admin-calzones.mp3 │ ├── admin.mp3 │ ├── asen.mp3 │ ├── baneado.mp3 │ ├── basado.mp3 │ ├── bien-pensado-woody.mp3 │ ├── bot.mp3 │ ├── bueno si.mp3 │ ├── cancion.mp3 │ ├── cancion2.mp3 │ ├── chica lgante.mp3 │ ├── contexto.mp3 │ ├── dylan1.mp3 │ ├── el pepe.mp3 │ ├── el rap de fernanfloo.mp3 │ ├── entrada-epica-al-chat.mp3 │ ├── esto va a hacer epico papus.mp3 │ ├── esto va para ti.mp3 │ ├── fiesta.mp3 │ ├── fino-senores.mp3 │ ├── flash.mp3 │ ├── gemi2.mp3 │ ├── hablar primos.mp3 │ ├── hentai.mp3 │ ├── insultar.mp3 │ ├── jai.mp3 │ ├── jesucristo.mp3 │ ├── joder.mp3 │ ├── la-voz-de-hombre.mp3 │ ├── maau1.mp3 │ ├── masivo-cancion.mp3 │ ├── me-pican-los-cocos.mp3 │ ├── menugatabot.mp3 │ ├── miku.mp3 │ ├── mmm.mp3 │ ├── moshi moshi.mp3 │ ├── nadie te pregunto.mp3 │ ├── navidad.m4a │ ├── niconico.mp3 │ ├── no chu.mp3 │ ├── no me hables.mp3 │ ├── no me hagas usar esto.mp3 │ ├── no-digas-eso-papu.mp3 │ ├── nochupala.mp3 │ ├── ohayo.mp3 │ ├── omaiga.mp3 │ ├── ora.mp3 │ ├── orale.mp3 │ ├── otaku.mp3 │ ├── pato.mp3 │ ├── pero-esto-ya-es-otro-nivel.mp3 │ ├── pikachu.mp3 │ ├── pokemon.mp3 │ ├── rawr.mp3 │ ├── risa.mp3 │ ├── sempai.mp3 │ ├── siu.mp3 │ ├── sus.mp3 │ ├── suspenso.mp3 │ ├── toma.mp3 │ ├── tunometecabrasaramambiche.mp3 │ ├── una-pregunta.mp3 │ ├── usted esta detenido.mp3 │ ├── vengo.mp3 │ ├── verdad-que-te-engane.mp3 │ ├── vete a la verga.mp3 │ ├── viernes.mp3 │ ├── violin.mp3 │ ├── vivan.mp3 │ ├── wtf.mp3 │ ├── yokese.mp3 │ └── yoshi-cancion.mp3 ├── catalogo.jpg ├── database │ ├── casados.json │ ├── db.json │ └── waifudatabase.json └── embarazar.mp4 └── tmp └── Miku.php /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 (ㅎㅊDEPOOLㅊㅎ) 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 | -------------------------------------------------------------------------------- /lib/database.js: -------------------------------------------------------------------------------- 1 | import { resolve, dirname as _dirname } from 'path' 2 | import _fs, { existsSync, readFileSync } from 'fs' 3 | const { promises: fs } = _fs 4 | 5 | class Database { 6 | constructor(filepath, ...args) { 7 | this.file = resolve(filepath) 8 | this.logger = console 9 | 10 | this._load() 11 | 12 | this._jsonargs = args 13 | this._state = false 14 | this._queue = [] 15 | this._interval = setInterval(async () => { 16 | if (!this._state && this._queue && this._queue[0]) { 17 | this._state = true 18 | await this[this._queue.shift()]().catch(this.logger.error) 19 | this._state = false 20 | } 21 | }, 1000) 22 | 23 | } 24 | 25 | get data() { 26 | return this._data 27 | } 28 | 29 | set data(value) { 30 | this._data = value 31 | this.save() 32 | } 33 | 34 | load() { 35 | this._queue.push('_load') 36 | } 37 | 38 | save() { 39 | this._queue.push('_save') 40 | } 41 | 42 | _load() { 43 | try { 44 | return this._data = existsSync(this.file) ? JSON.parse(readFileSync(this.file)) : {} 45 | } catch (e) { 46 | this.logger.error(e) 47 | return this._data = {} 48 | } 49 | } 50 | 51 | async _save() { 52 | let dirname = _dirname(this.file) 53 | if (!existsSync(dirname)) await fs.mkdir(dirname, { recursive: true }) 54 | await fs.writeFile(this.file, JSON.stringify(this._data, ...this._jsonargs)) 55 | return this.file 56 | } 57 | } 58 | 59 | export default Database -------------------------------------------------------------------------------- /lib/gdrive.js: -------------------------------------------------------------------------------- 1 | import { join } from 'path' 2 | import { promises as fs } from 'fs' 3 | import { promisify } from 'util' 4 | import { google } from 'googleapis' 5 | 6 | const SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly'] 7 | 8 | const TOKEN_PATH = join(__dirname, '..', 'token.json') 9 | 10 | class GoogleAuth extends EventEmitter { 11 | constructor() { 12 | super() 13 | } 14 | 15 | async authorize(credentials) { 16 | let token 17 | const { client_secret, client_id } = credentials 18 | const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, `http://localhost:${port}`) 19 | try { 20 | token = JSON.parse(await fs.readFile(TOKEN_PATH)) 21 | } catch (e) { 22 | const authUrl = oAuth2Client.generateAuthUrl({ 23 | access_type: 'offline', 24 | scope: SCOPES 25 | }) 26 | this.emit('auth', authUrl) 27 | let code = await promisify(this.once).bind(this)('token') 28 | token = await oAuth2Client.getToken(code) 29 | await fs.writeFile(TOKEN_PATH, JSON.stringify(token)) 30 | } finally { 31 | await oAuth2Client.setCredentials(token) 32 | } 33 | } 34 | 35 | token(code) { 36 | this.emit('token', code) 37 | } 38 | } 39 | 40 | class GoogleDrive extends GoogleAuth { 41 | constructor() { 42 | super() 43 | this.path = '/drive/api' 44 | } 45 | 46 | async getFolderID(path) { 47 | 48 | } 49 | 50 | async infoFile(path) { 51 | 52 | } 53 | 54 | async folderList(path) { 55 | 56 | } 57 | 58 | async downloadFile(path) { 59 | 60 | } 61 | 62 | async uploadFile(path) { 63 | 64 | } 65 | } 66 | 67 | export { GoogleAuth GoogleDrive } -------------------------------------------------------------------------------- /lib/import.js: -------------------------------------------------------------------------------- 1 | // inspired from https://github.com/nodejs/modules/issues/307#issuecomment-858729422 2 | 3 | // import { resolve } from 'path' 4 | // import { Worker, isMainThread, parentPort, workerData } from 'worker_threads' 5 | import Helper from './helper.js' 6 | 7 | const WORKER_DIR = Helper.__dirname(import.meta.url, false) 8 | // const WORKER_FILE = Helper.__filename(resolve(WORKER_DIR, './import.js'), false) 9 | 10 | // if (!isMainThread) importModule(workerData) 11 | 12 | // async function importModule(file) { 13 | // file = Helper.__filename(file) 14 | // const module = await import(file).catch(console.error) 15 | // const result = module && 'default' in module ? module.default : module 16 | // parentPort.postMessage(JSON.stringify(result), result) 17 | // } 18 | 19 | /** 20 | * @template T 21 | * @param {string} module 22 | * @returns {Promise} 23 | */ 24 | export default async function importLoader(module) { 25 | // return new Promise((resolve, reject) => { 26 | // const worker = new Worker(new URL(WORKER_FILE), { 27 | // workerData: module 28 | // }) 29 | // const killWorker = () => worker.terminate().catch(() => { }) 30 | // worker.once('message', (msg) => (killWorker(), console.log(msg.data), resolve(msg))) 31 | // worker.once('error', (error) => (killWorker(), reject(error))) 32 | // }) 33 | module = Helper.__filename(module) 34 | const module_ = await import(`${module}?id=${Date.now()}`) 35 | const result = module_ && 'default' in module_ ? module_.default : module_ 36 | return result 37 | } -------------------------------------------------------------------------------- /lib/levelling.js: -------------------------------------------------------------------------------- 1 | export const growth = Math.pow(Math.PI / Math.E, 1.618) * Math.E * .75 2 | export function xpRange(level, multiplier = global.multiplier || 1) { 3 | if (level < 0) 4 | throw new TypeError('level cannot be negative value') 5 | level = Math.floor(level) 6 | let min = level === 0 ? 0 : Math.round(Math.pow(level, growth) * multiplier) + 1 7 | let max = Math.round(Math.pow(++level, growth) * multiplier) 8 | return { 9 | min, 10 | max, 11 | xp: max - min 12 | } 13 | } 14 | 15 | export function findLevel(xp, multiplier = global.multiplier || 1) { 16 | if (xp === Infinity) 17 | return Infinity 18 | if (isNaN(xp)) 19 | return NaN 20 | if (xp <= 0) 21 | return -1 22 | let level = 0 23 | do 24 | level++ 25 | while (xpRange(level, multiplier).min <= xp) 26 | return --level 27 | } 28 | 29 | export function canLevelUp(level, xp, multiplier = global.multiplier || 1) { 30 | if (level < 0) 31 | return false 32 | if (xp === Infinity) 33 | return true 34 | if (isNaN(xp)) 35 | return false 36 | if (xp <= 0) 37 | return false 38 | return level < findLevel(xp, multiplier) 39 | } -------------------------------------------------------------------------------- /lib/logs.js: -------------------------------------------------------------------------------- 1 | let stdouts = [] 2 | export default (maxLength = 200) => { 3 | let oldWrite = process.stdout.write.bind(process.stdout) 4 | module.exports.disable = () => { 5 | module.exports.isModified = false 6 | return process.stdout.write = oldWrite 7 | } 8 | process.stdout.write = (chunk, encoding, callback) => { 9 | stdouts.push(Buffer.from(chunk, encoding)) 10 | oldWrite(chunk, encoding, callback) 11 | if (stdouts.length > maxLength) stdouts.shift() 12 | } 13 | module.exports.isModified = true 14 | return module.exports 15 | } 16 | 17 | export const isModified = false 18 | export function logs() { return Buffer.concat(stdouts)} -------------------------------------------------------------------------------- /lib/tictactoe.d.ts: -------------------------------------------------------------------------------- 1 | export declare class TicTacToe { 2 | /* X PlayerName */ 3 | playerX: string; 4 | /* Y PlayerName */ 5 | playerY: string; 6 | /* X if true, Y if false */ 7 | _currentTurn: boolean; 8 | _x: number; 9 | _y: number; 10 | _turns: number; 11 | constructor(playerX: string, playerY: string); 12 | get board(): number; 13 | turn(player, index: number): boolean; 14 | turn(player, x: number, y: number): boolean; 15 | } 16 | -------------------------------------------------------------------------------- /lib/uploadImage.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch'; 2 | import { FormData, Blob } from 'formdata-node'; 3 | import { fileTypeFromBuffer } from 'file-type'; 4 | 5 | /** 6 | * Upload file to qu.ax 7 | * Supported mimetypes: 8 | * - `image/jpeg` 9 | * - `image/jpg` 10 | * - `image/png` 11 | * - `video/mp4` 12 | * - `video/webm` 13 | * - `audio/mpeg` 14 | * - `audio/wav` 15 | * @param {Buffer} buffer File Buffer 16 | * @return {Promise} 17 | */ 18 | export default async (buffer) => { 19 | const { ext, mime } = await fileTypeFromBuffer(buffer); 20 | const form = new FormData(); 21 | const blob = new Blob([buffer.toArrayBuffer()], { type: mime }); 22 | form.append('files[]', blob, 'tmp.' + ext); 23 | const res = await fetch('https://qu.ax/upload.php', { method: 'POST', body: form }); 24 | const result = await res.json(); 25 | if (result && result.success) { 26 | return result.files[0].url; 27 | } else { 28 | throw new Error('Failed to upload the file to qu.ax'); 29 | } 30 | }; 31 | 32 | /*import fetch from 'node-fetch'; 33 | import {FormData, Blob} from 'formdata-node'; 34 | import {fileTypeFromBuffer} from 'file-type'; 35 | export default async (buffer) => { 36 | const {ext, mime} = await fileTypeFromBuffer(buffer); 37 | const form = new FormData(); 38 | const blob = new Blob([buffer.toArrayBuffer()], {type: mime}); 39 | form.append('file', blob, 'tmp.' + ext); 40 | const res = await fetch('https://telegra.ph/upload', { 41 | method: 'POST', 42 | body: form, 43 | }); 44 | const img = await res.json(); 45 | if (img.error) throw img.error; 46 | return 'https://telegra.ph' + img[0].src; 47 | };*/ -------------------------------------------------------------------------------- /plugins/_antibot.js: -------------------------------------------------------------------------------- 1 | export async function before(m, { conn, isAdmin, isBotAdmin }) { 2 | if (!m.isGroup) return; 3 | let chat = global.db.data.chats[m.chat] 4 | let delet = m.key.participant 5 | let bang = m.key.id 6 | let bot = global.db.data.settings[this.user.jid] || {} 7 | if (m.fromMe) return true; 8 | 9 | if ((m.id.startsWith('NJX-') || (m.id.startsWith('BAE5') && m.id.length === 16) || (m.id.startsWith('B24E') && m.id.length === 20))) { 10 | let chat = global.db.data.chats[m.chat]; 11 | 12 | if (chat.antiBot) { 13 | 14 | if (isBotAdmin) { 15 | await conn.sendMessage(m.chat, { delete: { remoteJid: m.chat, fromMe: false, id: bang, participant: delet }}) 16 | await conn.groupParticipantsUpdate(m.chat, [m.sender], 'remove') 17 | } 18 | } 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /plugins/_antiprivado.js: -------------------------------------------------------------------------------- 1 | export async function before(m, {conn, isAdmin, isBotAdmin, isOwner, isROwner}) { 2 | if (m.isBaileys && m.fromMe) return !0; 3 | if (m.isGroup) return !1; 4 | if (!m.message) return !0; 5 | if (m.text.includes('PIEDRA') || m.text.includes('PAPEL') || m.text.includes('TIJERA') || m.text.includes('serbot') || m.text.includes('jadibot')) return !0; 6 | const chat = global.db.data.chats[m.chat]; 7 | const bot = global.db.data.settings[this.user.jid] || {}; 8 | if (m.chat === '120363315369913363@newsletter') return !0 9 | if (bot.antiPrivate && !isOwner && !isROwner) { 10 | await m.reply(`${emoji} Hola @${m.sender.split`@`[0]}, mi creador a desactivado los comandos en los chats privados el cual serás bloqueado, si quieres usar los comandos del bot te invito a que te unas al grupo principal del bot.\n\n${gp1}`, false, {mentions: [m.sender]}); 11 | await this.updateBlockStatus(m.chat, 'block'); 12 | } 13 | return !1; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /plugins/_antisubbots.js: -------------------------------------------------------------------------------- 1 | import { areJidsSameUser } from '@whiskeysockets/baileys' 2 | export async function before(m, { participants, conn }) { 3 | if (m.isGroup) { 4 | let chat = global.db.data.chats[m.chat]; 5 | 6 | if (!chat.antiBot2) { 7 | return 8 | } 9 | 10 | 11 | let botJid = global.conn.user.jid 12 | 13 | if (botJid === conn.user.jid) { 14 | return 15 | } else { 16 | let isBotPresent = participants.some(p => areJidsSameUser(botJid, p.id)) 17 | 18 | if (isBotPresent) { 19 | setTimeout(async () => { 20 | await conn.reply(m.chat, `💙 En este grupo está el bot principal, el cual me saldré para no hacer spam.`, m) 21 | await this.groupLeave(m.chat) 22 | }, 5000) 23 | } 24 | } 25 | } 26 | } 27 | 28 | -------------------------------------------------------------------------------- /plugins/_cmdWithMedia.js: -------------------------------------------------------------------------------- 1 | const { 2 | proto, 3 | generateWAMessage, 4 | areJidsSameUser 5 | } = (await import('@whiskeysockets/baileys')).default 6 | 7 | export async function all(m, chatUpdate) { 8 | if (m.isBaileys) return 9 | if (!m.message) return 10 | if (!m.msg.fileSha256) return 11 | if (!(Buffer.from(m.msg.fileSha256).toString('base64') in global.db.data.sticker)) return 12 | 13 | let hash = global.db.data.sticker[Buffer.from(m.msg.fileSha256).toString('base64')] 14 | let { text, mentionedJid } = hash 15 | let messages = await generateWAMessage(m.chat, { text: text, mentions: mentionedJid }, { 16 | userJid: this.user.id, 17 | quoted: m.quoted && m.quoted.fakeObj 18 | }) 19 | messages.key.fromMe = areJidsSameUser(m.sender, this.user.id) 20 | messages.key.id = m.key.id 21 | messages.pushName = m.pushName 22 | if (m.isGroup) messages.participant = m.sender 23 | let msg = { 24 | ...chatUpdate, 25 | messages: [proto.WebMessageInfo.fromObject(messages)], 26 | type: 'append' 27 | } 28 | this.ev.emit('messages.upsert', msg) 29 | } 30 | 31 | -------------------------------------------------------------------------------- /plugins/_expired-prem.js: -------------------------------------------------------------------------------- 1 | const handler = (m) => m; 2 | 3 | export async function all(m) { 4 | for (const user of Object.values(global.db.data.users)) { 5 | if (user.premiumTime != 0 && user.premium) { 6 | if (new Date() * 1 >= user.premiumTime) { 7 | user.premiumTime = 0; 8 | user.premium = false; 9 | const JID = Object.keys(global.db.data.users).find((key) => global.db.data.users[key] === user); 10 | const usuarioJid = JID.split`@`[0]; 11 | const textoo = `「✐」@${usuarioJid} Se agotó tu tiempo como usuario premium`; 12 | await this.sendMessage(JID, {text: textoo, mentions: [JID]}, {quoted: m }); 13 | } 14 | } 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /plugins/_getmsg.js: -------------------------------------------------------------------------------- 1 | export async function all(m) { 2 | if (!m.chat.endsWith('.net') || m.fromMe || m.key.remoteJid.endsWith('status@broadcast')) return 3 | if (global.db.data.chats[m.chat].isBanned) return 4 | if (global.db.data.users[m.sender].banned) return 5 | if (m.isBaileys) return 6 | let msgs = global.db.data.msgs 7 | if (!(m.text in msgs)) return 8 | let _m = this.serializeM(JSON.parse(JSON.stringify(msgs[m.text]), (_, v) => { 9 | if ( 10 | v !== null && 11 | typeof v === 'object' && 12 | 'type' in v && 13 | v.type === 'Buffer' && 14 | 'data' in v && 15 | Array.isArray(v.data)) { 16 | return Buffer.from(v.data) 17 | } 18 | return v 19 | })) 20 | await _m.copyNForward(m.chat, true) 21 | } 22 | -------------------------------------------------------------------------------- /plugins/_infomessage.js: -------------------------------------------------------------------------------- 1 | let handler = m => m 2 | handler.before = async function (m, { conn, isBotAdmin }) { 3 | 4 | let chat = globalThis.db.data.chats[m.chat]; 5 | 6 | if (isBotAdmin && chat.autoRechazar) { 7 | const prefixes = ['6', '90', '963', '966', '967', '249', '212', '92', '93', '94', '7', '49', '2', '91', '48'] 8 | if (prefixes.some(prefix => m.sender.startsWith(prefix))) { 9 | await conn.groupRequestParticipantsUpdate(m.chat, [m.sender], 'reject')} 10 | 11 | } if (chat.autoAceptar && isBotAdmin) { 12 | const participants2 = await conn.groupRequestParticipantsList(m.chat) 13 | const filteredParticipants = participants2.filter(p => p.jid.includes('@s.whatsapp.net') && p.jid.split('@')[0].startsWith('5')) 14 | for (const participant of filteredParticipants) { 15 | await conn.groupRequestParticipantsUpdate(m.chat, [participant.jid], "approve") 16 | } if (m.messageStubType === 172 && m.messageStubParameters?.[0]?.includes('@s.whatsapp.net')) { 17 | const jid = m.messageStubParameters[0] 18 | if (jid.split('@')[0].startsWith('5')) { 19 | await conn.groupRequestParticipantsUpdate(m.chat, [jid], "approve")}} 20 | 21 | } if (isBotAdmin && chat.antifake) { 22 | const antiFakePrefixes = ['6', '90', '212', '92', '93', '94', '7', '49', '2', '91', '48'] 23 | if (antiFakePrefixes.some(prefix => m.sender.startsWith(prefix))) { 24 | global.db.data.users[m.sender].block = true 25 | await conn.groupParticipantsUpdate(m.chat, [m.sender], 'remove')}} 26 | 27 | } 28 | export default handler 29 | 30 | -------------------------------------------------------------------------------- /plugins/ai-dalle.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const handler = async (m, { conn, args }) => { 4 | if (!args[0]) { 5 | await conn.reply(m.chat, `💙 Por favor, proporciona una descripción para generar la imagen en el mundo virtual de Miku 🎵`, m, global.rcanal); 6 | return; 7 | } 8 | 9 | const prompt = args.join(' '); 10 | const apiUrl = `https://eliasar-yt-api.vercel.app/api/ai/text2img?prompt=${prompt}`; 11 | 12 | try { 13 | conn.reply(m.chat, `💙 ¡Generando tu imagen en el concierto virtual! Por favor espera un momento 🎵`, m) 14 | 15 | const response = await axios.get(apiUrl, { responseType: 'arraybuffer' }); 16 | 17 | await conn.sendMessage(m.chat, { image: Buffer.from(response.data) }, { quoted: m }); 18 | } catch (error) { 19 | console.error('Error al generar la imagen:', error); 20 | await conn.reply(m.chat, `💙 ¡Gomen! No se pudo generar la imagen en el mundo virtual. ¡Inténtalo de nuevo más tarde! 💫`, m, global.rcanal); 21 | } 22 | }; 23 | 24 | handler.command = ['dalle']; 25 | handler.help = ['dalle']; 26 | handler.tags = ['tools']; 27 | 28 | export default handler; 29 | 30 | -------------------------------------------------------------------------------- /plugins/ai-demo.js: -------------------------------------------------------------------------------- 1 | import { randomBytes } from "crypto" 2 | import axios from "axios" 3 | 4 | let handler = async (m, { conn, text }) => { 5 | if (!text) throw `${emoji} ¿Cómo puedo ayudarte hoy?`; 6 | try { 7 | conn.reply(m.chat, m); 8 | let data = await chatGpt(text); 9 | await conn.sendMessage(m.chat, { 10 | text: '*Demo:* ' + data 11 | }, { quoted: m }); 12 | 13 | } catch (err) { 14 | m.reply('error cik:/ ' + err); 15 | } 16 | } 17 | 18 | handler.help = ['demo **']; 19 | handler.command = ['demo', 'openai']; 20 | handler.tags = ['ai']; 21 | handler.group = true; 22 | 23 | export default handler; 24 | 25 | async function chatGpt(query) { 26 | try { 27 | const { id_ } = (await axios.post("https://chat.chatgptdemo.net/new_chat", { user_id: "crqryjoto2h3nlzsg" }, { headers: { "Content-Type": "application/json" } })).data; 28 | 29 | const json = { "question": query, "chat_id": id_, "timestamp": new Date().getTime() }; 30 | 31 | const { data } = await axios.post("https://chat.chatgptdemo.net/chat_api_stream", json, { headers: { "Content-Type": "application/json" } }); 32 | const cek = data.split("data: "); 33 | 34 | let res = []; 35 | 36 | for (let i = 1; i < cek.length; i++) { 37 | if (cek[i].trim().length > 0) { 38 | res.push(JSON.parse(cek[i].trim())); 39 | } 40 | } 41 | 42 | return res.map((a) => a.choices[0].delta.content).join(""); 43 | 44 | } catch (error) { 45 | console.error("Error parsing JSON:", error); 46 | return 404; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /plugins/ai-gemini.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | var handler = async (m, { text, usedPrefix, command }) => { 3 | if (!text) return conn.reply(m.chat, `💙 Ingresa una petición para que Gemini Virtual responda con la sabiduría del concierto cibernético de Miku 🎵`, m, global.rcanal) 4 | try { 5 | await m.react('🎤') 6 | conn.sendPresenceUpdate('composing', m.chat) 7 | var apii = await fetch(`https://apis-starlights-team.koyeb.app/starlight/gemini?text=${text}`) 8 | var res = await apii.json() 9 | await m.reply(res.result) 10 | } catch { 11 | await m.react('💙') 12 | await conn.reply(m.chat, `💙 ¡Gomen! Gemini Virtual está ensayando en el mundo cibernético y no puede responder en este momento 💫`, m, global.rcanal) 13 | }} 14 | handler.command = ['gemini'] 15 | handler.help = ['gemini'] 16 | handler.tags = ['ai'] 17 | handler.group = true 18 | 19 | export default handler 20 | 21 | -------------------------------------------------------------------------------- /plugins/ai-llama.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | let handler = async (m, { conn, command, text, usedPrefix }) => { 4 | if (!text) return conn.reply(m.chat, `${emoji} Ingrese un texto para hablar con Llama AI.`, m) 5 | try { 6 | let api = await fetch(`https://delirius-apiofc.vercel.app/ia/llamaia?query=${text}`) 7 | let json = await api.json() 8 | let responseMessage = json.data; 9 | 10 | await conn.sendMessage(m.chat, { 11 | text: responseMessage 12 | }, { quoted: m }); 13 | 14 | } catch (error) { 15 | console.error(error) 16 | } 17 | } 18 | 19 | handler.command = ['llama', 'meta'] 20 | 21 | export default handler 22 | -------------------------------------------------------------------------------- /plugins/anime-poke.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | let handler = async (m, { conn, usedPrefix }) => { 5 | let who; 6 | 7 | if (m.mentionedJid.length > 0) { 8 | who = m.mentionedJid[0]; 9 | } else if (m.quoted) { 10 | who = m.quoted.sender; 11 | } else { 12 | who = m.sender; 13 | } 14 | 15 | let name = conn.getName(who); 16 | let name2 = conn.getName(m.sender); 17 | 18 | let str; 19 | if (m.mentionedJid.length > 0) { 20 | str = `\`${name2}\` *picó a* \`${name || who}\`.`; 21 | } else if (m.quoted) { 22 | str = `\`${name2}\` *picó a* \`${name || who}\`.`; 23 | } else { 24 | str = `\`${name2}\` *se picó a sí mismo.*`.trim(); 25 | } 26 | 27 | if (m.isGroup) { 28 | let pp = 'https://qu.ax/dzdVR.mp4'; 29 | let pp2 = 'https://qu.ax/AXLDz.mp4'; 30 | let pp3 = 'https://qu.ax/AJEfp.mp4'; 31 | let pp4 = 'https://qu.ax/LEYfb.mp4'; 32 | let pp5 = 'https://qu.ax/WNGYF.mp4'; 33 | let pp6 = 'https://qu.ax/WFWaY.mp4'; 34 | let pp7 = 'https://qu.ax/ditle.mp4'; 35 | let pp8 = 'https://qu.ax/dzdVR.mp4'; 36 | 37 | const videos = [pp, pp2, pp3, pp4, pp5, pp6, pp7, pp8]; 38 | const video = videos[Math.floor(Math.random() * videos.length)]; 39 | 40 | let mentions = [who]; 41 | conn.sendMessage(m.chat, { video: { url: video }, gifPlayback: true, caption: str, mentions }, { quoted: m }); 42 | } 43 | } 44 | 45 | handler.help = ['poke/picar @tag']; 46 | handler.tags = ['anime']; 47 | handler.command = ['poke','picar']; 48 | handler.group = true; 49 | 50 | export default handler; 51 | -------------------------------------------------------------------------------- /plugins/anime-ppcp.js: -------------------------------------------------------------------------------- 1 | import fetch from "node-fetch" 2 | let handler = async (m, { conn }) => { 3 | 4 | let data = await (await fetch('https://raw.githubusercontent.com/ShirokamiRyzen/WAbot-DB/main/fitur_db/ppcp.json')).json() 5 | let cita = data[Math.floor(Math.random() * data.length)] 6 | 7 | let cowi = await(await fetch(cita.cowo)).buffer() 8 | await conn.sendFile(m.chat, cowi, '', '*Masculino* ♂️', m) 9 | let ciwi = await(await fetch(cita.cewe)).buffer() 10 | await conn.sendFile(m.chat, ciwi, '', '*Femenina* ♀️', m) 11 | } 12 | 13 | handler.help = ['ppcouple'] 14 | handler.tags = ['anime'] 15 | handler.command = ['ppcp', 'ppcouple'] 16 | handler.limit = false 17 | handler.register = true 18 | 19 | export default handler 20 | -------------------------------------------------------------------------------- /plugins/anime-preg.js: -------------------------------------------------------------------------------- 1 | /* 2 | 🎤💙 Codígo creado por Brauliovh3 3 | https://github.com/Brauliovh3/HATSUNE-MIKU.git 4 | */ 5 | 6 | import fs from 'fs' 7 | import path from 'path' 8 | 9 | let handler = async (m, { conn, usedPrefix }) => { 10 | let who = m.mentionedJid.length > 0 ? m.mentionedJid[0] : (m.quoted ? m.quoted.sender : m.sender) 11 | let name = conn.getName(who) 12 | let name2 = conn.getName(m.sender) 13 | 14 | let str = m.mentionedJid.length > 0 || m.quoted 15 | ? `\`${name2}\` Embarazo a \`${name || who}\` ` 16 | : `\`${name2}\` *se embarazó a sí mismo >.<*` 17 | 18 | if (m.isGroup) { 19 | let pp = './src/embarazar.mp4' 20 | 21 | 22 | 23 | const videos = [pp] 24 | const video = videos[Math.floor(Math.random() * videos.length)] 25 | 26 | conn.sendMessage(m.chat, { video: { url: video }, gifPlayback: true, caption: str, ptt: true, mentions: [who] }, { quoted: m }) 27 | } 28 | } 29 | 30 | handler.help = ['coffee'] 31 | handler.tags = ['anime'] 32 | handler.command = ['preg', 'preñar', 'embarazar', 'ireporpan'] 33 | handler.group = true 34 | 35 | export default handler 36 | 37 | -------------------------------------------------------------------------------- /plugins/anime-random.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const handler = async (m, {command, conn, usedPrefix}) => { 4 | const res = (await axios.get(`https://raw.githubusercontent.com/BrunoSobrino/TheMystic-Bot-MD/master/src/JSON/anime-${command}.json`)).data; 5 | const haha = await res[Math.floor(res.length * Math.random())]; 6 | conn.sendFile(m.chat, haha, 'error.jpg', `_${command}_`, m); 7 | }; 8 | 9 | handler.help = ['akira', 'akiyama', 'anna', 'asuna', 'ayuzawa', 'boruto', 'chiho', 'chitoge', 'deidara', 'erza', 'elaina', 'eba', 'emilia', 'hestia', 'hinata', 'inori', 'isuzu', 'itachi', 'itori', 'kaga', 'kagura', 'kaori', 'keneki', 'kotori', 'kurumi', 'madara', 'mikasa', 'hatsunemiku', 'minato', 'naruto', 'nezuko', 'sagiri', 'sasuke', 'sakura', 'cosplay']; 10 | handler.tags = ['random']; 11 | handler.command = ['akira', 'akiyama', 'anna', 'asuna', 'ayuzawa', 'boruto', 'chiho', 'chitoge', 'deidara', 'erza', 'elaina', 'eba', 'emilia', 'hestia', 'hinata', 'inori', 'isuzu', 'itachi', 'itori', 'kaga', 'kagura', 'kaori', 'keneki', 'kotori', 'kurumi', 'madara', 'mikasa', 'hatsunemiku', 'minato', 'naruto', 'nezuko', 'sagiri', 'sasuke', 'sakura', 'cosplay']; 12 | 13 | export default handler; 14 | 15 | -------------------------------------------------------------------------------- /plugins/anime-waifu.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | let handler = async (m, { conn, usedPrefix, command }) => { 4 | try { 5 | await m.react(emojis) 6 | conn.reply(m.chat, `💙 Buscando una hermosa waifu virtual como yo... ¡Espera un momentito! ✨`, m, global.rcanal) 7 | let res = await fetch('https://api.waifu.pics/sfw/waifu') 8 | if (!res.ok) return 9 | let json = await res.json() 10 | if (!json.url) return 11 | await conn.sendFile(m.chat, json.url, 'thumbnail.jpg', `💙 ¡Aquí tienes tu hermosa waifu virtual! ¿No es kawaii? (◕‿◕)♡ 💙`, m) 12 | } catch { 13 | }} 14 | handler.help = ['waifu'] 15 | handler.tags = ['anime'] 16 | handler.command = ['waifu'] 17 | handler.group = true 18 | 19 | export default handler 20 | 21 | -------------------------------------------------------------------------------- /plugins/buscador-cuevanasearch.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | let handler = async (m, { conn, text }) => { 4 | if (!text) return m.reply(`${emoji} Ingresa el nombre de una pelicula\n> *Ejemplo: /cuevana Deadpool*.`) 5 | 6 | try { 7 | let api = await fetch(`https://delirius-apiofc.vercel.app/search/cuevana?q=${encodeURIComponent(text)}`) 8 | let json = await api.json() 9 | 10 | let JT = '📽️ Cuevana - Search 📽️'; 11 | json.data.forEach((app, index) => { 12 | JT += `\n\n═══════════════════════`; 13 | JT += `\n☁️ *Nro :* ${index + 1}` 14 | JT += `\n🖼️ *Imagen:* ${app.image}` 15 | JT += `\n⚜️ *Titulo:* ${app.title}` 16 | JT += `\n📚 *Descripcion:* ${app.description}` 17 | JT += `\n🔗 *Link:* ${app.link}` 18 | }) 19 | 20 | m.reply(JT) 21 | } catch (error) { 22 | console.error(error) 23 | }} 24 | 25 | handler.command = ['cuevanasearch', 'cuevana'] 26 | 27 | export default handler 28 | -------------------------------------------------------------------------------- /plugins/buscador-githubsearch.js: -------------------------------------------------------------------------------- 1 | /* 🎤💙 Github Search by Brauliovh3 2 | - Virtual Concert Experience 3 | - https://github.com/Brauliovh3/HATSUNE-MIKU 4 | */ 5 | 6 | 7 | 8 | import fetch from 'node-fetch'; 9 | 10 | let handler = async(m, { conn, text, usedPrefix, command }) => { 11 | 12 | if (!text) return conn.reply(m.chat, `💙 Por favor ingresa el nombre de un repositorio GitHub para buscar en el ciberespacio virtual 🎵`, m, global.rcanal); 13 | 14 | try { 15 | let api = `https://dark-core-api.vercel.app/api/search/github?key=api&text=${text}`; 16 | 17 | let response = await fetch(api); 18 | let json = await response.json(); 19 | let result = json.results[0]; 20 | 21 | let txt = `💙 *Repositorio Virtual:* ${result.name}\n👑 *Creador:* ${result.creator}\n🌟 *Estrellas del Concierto:* ${result.stars}\n🔖 *Bifurcaciones Virtuales:* ${result.forks}\n📜 *Descripción Musical:* ${result.description}\n📆 *Creado en el Ciberespacio:* ${result.createdAt}\n🔗 *Link Virtual:* ${result.cloneUrl}`; 22 | 23 | let img = 'https://raw.githubusercontent.com/Brauliovh3/HATSUNE-MIKU/main/Contenido/1745610598914.jpeg'; 24 | 25 | conn.sendMessage(m.chat, { image: { url: img }, caption: txt }, { quoted: fkontak }); 26 | 27 | } catch (error) { 28 | console.error(error) 29 | m.reply(`💙 ¡Gomen! Error en la búsqueda virtual: ${error.message} ✨`); 30 | m.react('💙'); 31 | } 32 | }; 33 | 34 | handler.command = ['githubsearch', 'gbsearch']; 35 | 36 | export default handler; 37 | 38 | -------------------------------------------------------------------------------- /plugins/buscador-google.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch'; 2 | 3 | let handler = async (m, { text }) => { 4 | if (!text) { 5 | m.reply(`💙 Por favor, proporciona el término de búsqueda que deseas que busque en el ciberespacio de Google ✨`, m, global.rcanal); 6 | return; 7 | } 8 | 9 | const apiUrl = `https://delirius-apiofc.vercel.app/search/googlesearch?query=${encodeURIComponent(text)}`; 10 | 11 | try { 12 | const response = await fetch(apiUrl); 13 | const result = await response.json(); 14 | 15 | if (!result.status) { 16 | m.reply('🎵 Error al realizar la búsqueda en el mundo virtual 💫', m, global.rcanal); 17 | return; 18 | } 19 | 20 | let replyMessage = `💙 Resultados de búsqueda virtual:\n\n`; 21 | result.data.slice(0, 1).forEach((item, index) => { 22 | replyMessage += `🌟 *${index + 1}. ${item.title}*\n`; 23 | replyMessage += `🎵 *${item.description}*\n`; 24 | replyMessage += `🌐 URL Virtual: ${item.url}`; 25 | }); 26 | 27 | m.react('🎤') 28 | 29 | m.reply(replyMessage); 30 | } catch (error) { 31 | console.error(`💙 Error al realizar la solicitud a la API virtual:`, error , m, global.rcanal); 32 | m.reply(`🎤 ¡Gomen! Ocurrió un error al obtener los resultados del ciberespacio ✨`, m, global.rcanal); 33 | } 34 | }; 35 | 36 | handler.command = ['google']; 37 | 38 | export default handler; 39 | 40 | -------------------------------------------------------------------------------- /plugins/buscador-infoanime.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | var handler = async (m, { conn, usedPrefix, command, text }) => { 4 | 5 | if (!text) return conn.reply(m.chat, `${emoji} Ingrese el nombre de algun anime\n\n> Ejemplo, ${usedPrefix + command} Roshidere`, m, global.rcanal) 6 | let res = await fetch('https://api.jikan.moe/v4/manga?q=' + text) 7 | if (!res.ok) return conn.reply(m.chat, `${msm} Ocurrió un fallo.`, m, global.rcanal) 8 | 9 | let json = await res.json() 10 | let { chapters, title_japanese, url, type, score, members, background, status, volumes, synopsis, favorites } = json.data[0] 11 | let author = json.data[0].authors[0].name 12 | let animeingfo = `💙 Título: ${title_japanese} 13 | 🎞️ Capítulo: ${chapters} 14 | 💫 Transmisión: ${type} 15 | 🗂 Estado: ${status} 16 | 🗃 Volumes: ${volumes} 17 | 🌟 Favorito: ${favorites} 18 | 🧮 Puntaje: ${score} 19 | 👥 Miembros: ${members} 20 | 🔗 Url: ${url} 21 | 👨‍🔬 Autor: ${author} 22 | 📝 Fondo: ${background} 23 | 💬 Sinopsis: ${synopsis} 24 | ` 25 | conn.sendFile(m.chat, json.data[0].images.jpg.image_url, 'anjime.jpg', '💙 *I N F O - A N I M E* 💙\n\n' + animeingfo, fkontak, m) 26 | 27 | } 28 | handler.help = ['infoanime'] 29 | handler.tags = ['anime'] 30 | handler.group = true; 31 | handler.register = true 32 | handler.command = ['infoanime','animeinfo'] 33 | 34 | export default handler 35 | 36 | -------------------------------------------------------------------------------- /plugins/buscador-npmjs.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | let handler = async (m, { text, usedPrefix, command }) => { 4 | 5 | if (!text) return conn.reply(m.chat, `${emoji} Escribe el nonbre del scraper.\nEjemplo: ${usedPrefix + command} yt-search`, m, global.rcanal) 6 | 7 | try { 8 | 9 | await m.react(rwait) 10 | conn.reply(m.chat, `${emoji2} Buscando el scraper....`, m, global.rcanal) 11 | 12 | let res = await fetch(`http://registry.npmjs.com/-/v1/search?text=${text}`) 13 | let { objects } = await res.json() 14 | 15 | if (!objects.length) return conn.reply(m.chat, `${emoji2} No se encontró resultado de: ${text}`, m, global.rcanal) 16 | 17 | let txt = objects.map(({ package: pkg }) => { 18 | return `《✧》 Scraper - Search 《✧》 19 | 20 | ✦ Nombre: ${pkg.name} 21 | ✦ Versión: V${pkg.version} 22 | ✦ Enlace: ${pkg.links.npm} 23 | ✦ Descripción: ${pkg.description} 24 | \n\n----------` 25 | }).join`\n\n` 26 | 27 | await conn.reply(m.chat, txt, m, fake) 28 | await m.react(done) 29 | } catch { 30 | await conn.reply(m.chat, `${msm} Ocurrió un error.`, m, global.rcanal) 31 | await m.react(error) 32 | }} 33 | 34 | handler.help = ['npmjs'] 35 | handler.tags = ['buscador'] 36 | handler.command = ['npmjs'] 37 | handler.register = true 38 | handler.coin = 1 39 | 40 | export default handler 41 | -------------------------------------------------------------------------------- /plugins/buscador-yts.js: -------------------------------------------------------------------------------- 1 | import yts from 'yt-search' 2 | 3 | const handler = async (m, { text, conn }) => { 4 | if (!text) return conn.reply(m.chat, `💙 Por favor, ingresa una búsqueda de YouTube.`, m, global.rcanal) 5 | 6 | conn.reply(m.chat, '💙 Buscando...', m, global.rcanal) 7 | 8 | try { 9 | const results = await yts(text) 10 | const videos = results.all.filter(v => v.type === 'video').slice(0, 5) 11 | 12 | if (!videos.length) { 13 | return conn.reply(m.chat, '💙 No se encontraron resultados.', m, global.rcanal) 14 | } 15 | 16 | const teks = videos.map(v => 17 | `> ☁️ Título » *${v.title}*\n` + 18 | `> 🍬 Canal » *${v.author.name}*\n` + 19 | `> 🕝 Duración » *${v.timestamp}*\n` + 20 | `> 📆 Subido » *${v.ago}*\n` + 21 | `> 👀 Vistas » *${v.views}*\n` + 22 | `> 🔗 Enlace » ${v.url}` 23 | ).join('\n\n••••••••••••••••••••••••••••••••••••\n\n') 24 | 25 | const finalText = `💙 Resultados de la búsqueda para *<${text}>*\n\n${teks}` 26 | 27 | conn.sendFile(m.chat, videos[0].thumbnail, 'yts.jpeg', finalText, m) 28 | } catch (error) { 29 | conn.reply(m.chat, '💙 Error en la búsqueda.', m, global.rcanal) 30 | } 31 | } 32 | handler.help = ['ytsearch'] 33 | handler.tags = ['buscador'] 34 | handler.command = ['ytbuscar', 'ytsearch', 'yts'] 35 | handler.register = true 36 | handler.coin = 1 37 | 38 | export default handler 39 | 40 | -------------------------------------------------------------------------------- /plugins/convertidor-togifaud.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, usedPrefix, command }) => { 2 | if (!m.quoted) return conn.reply(m.chat, `${emoji} Por favor, responde a un *Video.*`, m, global.rcanal) 3 | conn.reply(m.chat, global.wait, m, global.rcanal) 4 | const q = m.quoted || m 5 | let mime = (q.msg || q).mimetype || '' 6 | if (!/(mp4)/.test(mime)) return conn.reply(m.chat, `${emoji} Por favor, responde a un *Video.*`, m, global.rcanal) 7 | await m.react(rwait) 8 | let media = await q.download() 9 | let listo = '🍬 Aqui tienes ฅ^•ﻌ•^ฅ.' 10 | conn.sendMessage(m.chat, { video: media, gifPlayback: true, caption: listo }, { quoted: fkontak }) 11 | await m.react(done) 12 | } 13 | handler.help = ['togifaud'] 14 | handler.tags = ['transformador'] 15 | handler.group = true; 16 | handler.register = true 17 | handler.command = ['togifaud'] 18 | 19 | export default handler 20 | -------------------------------------------------------------------------------- /plugins/convertidor-tomp3.js: -------------------------------------------------------------------------------- 1 | import {toAudio, toPTT} from '../lib/converter.js' 2 | 3 | const handler = async (m, {conn, usedPrefix, command}) => { 4 | const q = m.quoted ? m.quoted : m 5 | const mime = (q || q.msg).mimetype || q.mediaType || '' 6 | 7 | if (!/video|audio/.test(mime)) { 8 | return conn.reply(m.chat, `🎤💙 Por favor, responde al video o nota de voz que desees convertir a Audio/MP3 virtual ✨🎵`, m, global.rcanal) 9 | } 10 | 11 | const media = await q.download() 12 | if (!media) { 13 | return conn.reply(m.chat, `🎤💙 ¡Gomen! Ocurrió un error al descargar tu video en el mundo virtual ✨💫`, m, global.rcanal) 14 | } 15 | 16 | const audio = await toPTT(media, 'mp4') 17 | if (!audio.data) { 18 | return conn.reply(m.chat, `🎤💙 ¡Gomen! Ocurrió un error al convertir tu nota de voz a Audio/MP3 virtual ✨🎵`, m, global.rcanal) 19 | } 20 | conn.sendMessage(m.chat, {audio: media || audio.data, mimetype: 'audio/mpeg'}, {quoted: m}) 21 | } 22 | 23 | handler.help = ['tomp3', 'toaudio'] 24 | handler.command = ['tomp3', 'toaudio'] 25 | handler.group = true 26 | handler.register = true 27 | 28 | export default handler 29 | 30 | -------------------------------------------------------------------------------- /plugins/convertidor-tovideo.js: -------------------------------------------------------------------------------- 1 | import {webp2mp4} from '../lib/webp2mp4.js'; 2 | import {ffmpeg} from '../lib/converter.js'; 3 | 4 | const handler = async (m, {conn, usedPrefix, command}) => { 5 | if (!m.quoted) { 6 | return conn.reply(m.chat, `${emoji} Responda A Un Sticker Que Desee Convertir En Video.`, m); 7 | } 8 | 9 | const mime = m.quoted.mimetype || ''; 10 | if (!/webp/.test(mime)) { 11 | return conn.reply(m.chat, `${emoji} Responda A Un Sticker Que Desee Convertir En Video.`, m); 12 | } 13 | 14 | const media = await m.quoted.download(); 15 | let out = Buffer.alloc(0); 16 | 17 | conn.reply(m.chat, `${emoji2} Procesando, por favor espere un momento...`, m); 18 | 19 | if (/webp/.test(mime)) { 20 | out = await webp2mp4(media); 21 | } else if (/audio/.test(mime)) { 22 | out = await ffmpeg(media, [ 23 | '-filter_complex', 'color', 24 | '-pix_fmt', 'yuv420p', 25 | '-crf', '51', 26 | '-c:a', 'copy', 27 | '-shortest', 28 | ], 'mp3', 'mp4'); 29 | } 30 | 31 | await conn.sendFile(m.chat, out, 'error.mp4', `${emoji} Aqui tienes tu *Vídeo* ฅ^•ﻌ•^ฅ.`, m, 0, {thumbnail: out}); 32 | }; 33 | 34 | handler.help = ['tovideo']; 35 | handler.tags = ['transformador']; 36 | handler.group = true; 37 | handler.register = true; 38 | handler.command = ['tovideo', 'tomp4', 'mp4', 'togif']; 39 | 40 | export default handler; 41 | -------------------------------------------------------------------------------- /plugins/convertidor-tts.js: -------------------------------------------------------------------------------- 1 | import gtts from 'node-gtts'; 2 | import {readFileSync, unlinkSync} from 'fs'; 3 | import {join} from 'path'; 4 | const defaultLang = 'es'; 5 | const handler = async (m, {conn, args, usedPrefix, command}) => { 6 | let lang = args[0]; 7 | let text = args.slice(1).join(' '); 8 | if ((args[0] || '').length !== 2) { 9 | lang = defaultLang; 10 | text = args.join(' '); 11 | } 12 | if (!text && m.quoted?.text) text = m.quoted.text; 13 | let res; 14 | try { 15 | res = await tts(text, lang); 16 | } catch (e) { 17 | m.reply(e + ''); 18 | text = args.join(' '); 19 | if (!text) throw `🎤💙 ¡Konnichiwa! Por favor, proporciona un texto para que pueda cantarlo con mi voz virtual de Miku ✨\n\n🎵 Ejemplo: #tts ja ¡Hatsune Miku desu! 🎵`; 20 | res = await tts(text, defaultLang); 21 | } finally { 22 | if (res) conn.sendFile(m.chat, res, 'tts.opus', null, m, true); 23 | } 24 | }; 25 | handler.help = ['tts ']; 26 | handler.tags = ['transformador']; 27 | handler.group = true; 28 | handler.register = true 29 | handler.command = ['tts']; 30 | 31 | export default handler; 32 | 33 | function tts(text, lang = 'es') { 34 | console.log(lang, text); 35 | return new Promise((resolve, reject) => { 36 | try { 37 | const tts = gtts(lang); 38 | const filePath = join(global.__dirname(import.meta.url), '../tmp', (1 * new Date) + '.wav'); 39 | tts.save(filePath, text, () => { 40 | resolve(readFileSync(filePath)); 41 | unlinkSync(filePath); 42 | }); 43 | } catch (e) { 44 | reject(e); 45 | } 46 | }); 47 | } 48 | -------------------------------------------------------------------------------- /plugins/descargas-facebook.js: -------------------------------------------------------------------------------- 1 | import { igdl } from 'ruhend-scraper' 2 | 3 | const handler = async (m, { text, conn, args }) => { 4 | if (!args[0]) { 5 | return conn.reply(m.chat, `${emoji} Por favor, ingresa un enlace de Facebook.`, m) 6 | } 7 | 8 | let res; 9 | try { 10 | await m.react(rwait); 11 | res = await igdl(args[0]); 12 | } catch (e) { 13 | return conn.reply(m.chat, `${msm} Error al obtener datos. Verifica el enlace.`, m) 14 | } 15 | 16 | let result = res.data; 17 | if (!result || result.length === 0) { 18 | return conn.reply(m.chat, `${emoji2} No se encontraron resultados.`, m) 19 | } 20 | 21 | let data; 22 | try { 23 | data = result.find(i => i.resolution === "720p (HD)") || result.find(i => i.resolution === "360p (SD)"); 24 | } catch (e) { 25 | return conn.reply(m.chat, `${msm} Error al procesar los datos.`, m) 26 | } 27 | 28 | if (!data) { 29 | return conn.reply(m.chat, `${emoji2} No se encontró una resolución adecuada.`, m) 30 | } 31 | 32 | let video = data.url; 33 | try { 34 | await conn.sendMessage(m.chat, { video: { url: video }, caption: `${emoji} Aqui tienes ฅ^•ﻌ•^ฅ.`, fileName: 'fb.mp4', mimetype: 'video/mp4' }, { quoted: m }) 35 | await m.react(done); 36 | } catch (e) { 37 | return conn.reply(m.chat, `${msm} Error al enviar el video.`, m) 38 | await m.react(error); 39 | } 40 | } 41 | 42 | handler.help = ['facebook', 'fb'] 43 | handler.tags = ['descargas'] 44 | handler.command = ['facebook', 'fb'] 45 | handler.group = true; 46 | handler.register = true; 47 | handler.coin = 2; 48 | 49 | export default handler 50 | -------------------------------------------------------------------------------- /plugins/descargas-instagram.js: -------------------------------------------------------------------------------- 1 | import { igdl } from 'ruhend-scraper'; 2 | 3 | const handler = async (m, { args, conn }) => { 4 | if (!args[0]) { 5 | return conn.reply(m.chat, `🎤💙 Por favor, ingresa un enlace de Instagram para descargarlo en el mundo virtual ✨🎵`, m); 6 | } 7 | 8 | try { 9 | await m.react('🎤'); 10 | const res = await igdl(args[0]); 11 | const data = res.data; 12 | 13 | for (let media of data) { 14 | await conn.sendFile(m.chat, media.url, 'instagram.mp4', `🎤💙 ¡Aquí tienes tu descarga del concierto virtual! ✨🎵💫`, m); 15 | await m.react('✨'); 16 | } 17 | } catch (e) { 18 | return conn.reply(m.chat, `🎤💙 ¡Gomen! Ocurrió un error en el mundo virtual. ¡Inténtalo de nuevo! ✨💫`, m); 19 | await m.react('💙'); 20 | } 21 | }; 22 | 23 | handler.command = ['instagram', 'ig']; 24 | handler.tags = ['descargas']; 25 | handler.help = ['instagram', 'ig']; 26 | handler.group = true; 27 | handler.register = true; 28 | handler.coin = 2; 29 | 30 | export default handler; 31 | -------------------------------------------------------------------------------- /plugins/descargas-modapk.js: -------------------------------------------------------------------------------- 1 | import { search, download } from 'aptoide-scraper' 2 | 3 | var handler = async (m, {conn, usedPrefix, command, text}) => { 4 | if (!text) return conn.reply(m.chat, `${emoji} Por favor, ingrese el nombre de la apk para descargarlo.`, m) 5 | try { 6 | await m.react(rwait) 7 | conn.reply(m.chat, `${emoji} Descargando su aplicación, espere un momento...`, m) 8 | let searchA = await search(text) 9 | let data5 = await download(searchA[0].id) 10 | let txt = `*乂 APTOIDE - DESCARGAS* 乂\n\n` 11 | txt += `☁️ *Nombre* : ${data5.name}\n` 12 | txt += `🔖 *Package* : ${data5.package}\n` 13 | txt += `🚩 *Update* : ${data5.lastup}\n` 14 | txt += `⚖ *Peso* : ${data5.size}` 15 | await conn.sendFile(m.chat, data5.icon, 'thumbnail.jpg', txt, m) 16 | await m.react(done) 17 | if (data5.size.includes('GB') || data5.size.replace(' MB', '') > 999) { 18 | return await conn.reply(m.chat, `${emoji2} El archivo es demaciado pesado.`, m)} 19 | await conn.sendMessage(m.chat, {document: {url: data5.dllink}, mimetype: 'application/vnd.android.package-archive', fileName: data5.name + '.apk', caption: null}, {quoted: fkontak}) 20 | } catch { 21 | return conn.reply(m.chat, `${msm} Ocurrió un fallo...`, m)}} 22 | 23 | handler.tags = ['descargas'] 24 | handler.help = ['apkmod'] 25 | handler.command = ['apk', 'modapk', 'aptoide'] 26 | handler.group = true; 27 | handler.register = true; 28 | handler.coin = 5; 29 | 30 | export default handler 31 | -------------------------------------------------------------------------------- /plugins/descargas-pinvid.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | let handler = async (m, { conn, text, usedPrefix, command }) => { 4 | if (!text) throw m.reply(`${emoji} Por favor, ingresa el link de un video/imagen de Pinterest.`); 5 | conn.sendMessage(m.chat, { react: { text: "🕒", key: m.key } }); 6 | let ouh = await fetch(`https://api.agatz.xyz/api/pinterest?url=${text}`) 7 | let gyh = await ouh.json() 8 | await conn.sendFile(m.chat, gyh.data.result, `pinvideobykeni.mp4`, `*${emoji} Url:* ${gyh.data.url}`, m) 9 | await conn.sendMessage(m.chat, { react: { text: '✅', key: m.key }}) 10 | } 11 | handler.help = ['pinvid **'] 12 | handler.tags = ['descargas'] 13 | handler.command = ['pinvideo', 'pinvid'] 14 | handler.premium = false 15 | handler.group = true 16 | handler.register = true 17 | handler.coin = 2 18 | 19 | export default handler 20 | -------------------------------------------------------------------------------- /plugins/fun-afk.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {text}) => { 2 | const user = global.db.data.users[m.sender]; 3 | user.afk = + new Date; 4 | user.afkReason = text; 5 | conn.reply(m.chat, `${emoji} *El Usuario ${conn.getName(m.sender)} Estará Inactivo*\n\n*Motivo: ${text ? ': ' + text : 'Sin Especificar!'}* 6 | `, m); 7 | }; 8 | handler.help = ['afk [alasan]']; 9 | handler.tags = ['main']; 10 | handler.command = ['afk']; 11 | handler.group = true; 12 | handler.register = true; 13 | 14 | export default handler; 15 | -------------------------------------------------------------------------------- /plugins/fun-amigo-random.js: -------------------------------------------------------------------------------- 1 | let toM = a => '@' + a.split('@')[0] 2 | function handler(m, { groupMetadata }) { 3 | let ps = groupMetadata.participants.map(v => v.id) 4 | let a = ps.getRandom() 5 | let b 6 | do b = ps.getRandom() 7 | while (b === a) 8 | m.reply(`${emoji} Vamos a hacer algunas amistades.\n\n*Oye ${toM(a)} hablale al privado a ${toM(b)} para que jueguen y se haga una amistad 🙆*\n\n*Las mejores amistades empiezan con un juego 😉.*`, null, { 9 | mentions: [a, b] 10 | })} 11 | handler.help = ['amistad'] 12 | handler.tags = ['fun'] 13 | handler.command = ['amigorandom','amistad'] 14 | handler.group = true 15 | handler.register = true 16 | 17 | export default handler 18 | -------------------------------------------------------------------------------- /plugins/fun-doxxing.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | import {performance} from 'perf_hooks'; 4 | const handler = async (m, {conn, text}) => { 5 | const start = performance.now(); 6 | const end = performance.now(); 7 | const executionTime = (end - start); 8 | async function loading() { 9 | var hawemod = [ 10 | "Injecting Malware", 11 | " █ 10%", 12 | " █ █ 20%", 13 | " █ █ █ 30%", 14 | " █ █ █ █ 40%", 15 | " █ █ █ █ █ 50%", 16 | " █ █ █ █ █ █ 60%", 17 | " █ █ █ █ █ █ █ 70%", 18 | " █ █ █ █ █ █ █ █ 80%", 19 | " █ █ █ █ █ █ █ █ █ 90%", 20 | " █ █ █ █ █ █ █ █ █ █ 100%", 21 | "System hyjacking on process.. \\n Conecting to Server error to find 404 ", 22 | "Device successfully connected... \\n Riciving data...", 23 | "Data hyjacked from divice 100% completed \\n killing all evidence killing all malwares...", 24 | " HACKING COMPLETED ", 25 | " SENDING LOG DOCUMENTS...", 26 | " SUCCESSFULLY SENT DATA AND Connection disconnected", 27 | "BACKLOGS CLEARED" 28 | ]; 29 | let { key } = await conn.sendMessage(m.chat, {text: `*☠ ¡¡Starting doxxing!! ☠*`}, {quoted: m}) 30 | for (let i = 0; i < hawemod.length; i++) { 31 | await new Promise(resolve => setTimeout(resolve, 1000)); 32 | await conn.sendMessage(m.chat, {text: hawemod[i], edit: key}, {quoted: m}); 33 | } 34 | } 35 | loading() 36 | }; 37 | handler.help = ['doxxing | <@tag>']; 38 | handler.tags = ['fun']; 39 | handler.command = ['doxxing'] 40 | handler.group = true 41 | handler.register = true 42 | 43 | export default handler; 44 | 45 | function getRandomValue(arr) { 46 | return arr[Math.floor(Math.random() * arr.length)]; 47 | } 48 | -------------------------------------------------------------------------------- /plugins/fun-formarpareja.js: -------------------------------------------------------------------------------- 1 | const toM = (a) => '@' + a.split('@')[0]; 2 | function handler(m, {groupMetadata}) { 3 | const ps = groupMetadata.participants.map((v) => v.id); 4 | const a = ps.getRandom(); 5 | let b; 6 | do b = ps.getRandom(); 7 | while (b === a); 8 | m.reply(`*${toM(a)}, Deberías casarte 💍 con ${toM(b)}, hacen una bonita pareja 💓*`, null, { 9 | mentions: [a, b], 10 | }); 11 | } 12 | handler.help = ['formarpareja']; 13 | handler.tags = ['fun']; 14 | handler.command = ['formarpareja', 'formarparejas']; 15 | handler.group = true; 16 | handler.register = true; 17 | 18 | export default handler; 19 | -------------------------------------------------------------------------------- /plugins/fun-gay.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | let who; 3 | 4 | 5 | if (m.mentionedJid && m.mentionedJid[0]) { 6 | who = m.mentionedJid[0]; 7 | } 8 | 9 | else if (m.quoted && m.quoted.sender) { 10 | who = m.quoted.sender; 11 | } 12 | 13 | else if (m.fromMe) { 14 | who = conn.user.jid; 15 | } 16 | 17 | else { 18 | who = m.sender; 19 | } 20 | 21 | try { 22 | 23 | let avatarUrl = await conn.profilePictureUrl(who, 'image').catch(() => 'https://telegra.ph/file/24fa902ead26340f3df2c.png'); 24 | 25 | 26 | let apiUrl = `https://some-random-api.com/canvas/overlay/gay?avatar=${encodeURIComponent(avatarUrl)}`; 27 | 28 | 29 | await conn.sendFile(m.chat, apiUrl, 'gay.png', '*¿Quién quiere violar a este gay?* 🏳️‍🌈', m); 30 | 31 | } catch (err) { 32 | console.error('Error en comando gay:', err); 33 | 34 | 35 | if (err.message.includes('profilePictureUrl')) { 36 | m.reply('⚠️ No se pudo obtener la foto de perfil del usuario.'); 37 | } else if (err.message.includes('sendFile')) { 38 | m.reply('⚠️ Error al generar o enviar la imagen.'); 39 | } else { 40 | m.reply('⚠️ Hubo un error al procesar tu solicitud. Intenta de nuevo.'); 41 | } 42 | } 43 | }; 44 | 45 | handler.help = ['gay *@user*']; 46 | handler.tags = ['fun']; 47 | handler.command = /^(gay)$/i; 48 | 49 | export default handler; 50 | 51 | -------------------------------------------------------------------------------- /plugins/fun-huevo.js: -------------------------------------------------------------------------------- 1 | //Codígo creado por Destroy wa.me/584120346669 2 | 3 | const handler = async (m, { conn, usedPrefix, command, text }) => { 4 | let who; 5 | 6 | if (m.isGroup) { 7 | who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : text ? text.replace(/[^0-9]/g, '') + '@s.whatsapp.net' : false; 8 | } else { 9 | who = text ? text.replace(/[^0-9]/g, '') + '@s.whatsapp.net' : m.chat; 10 | } 11 | 12 | if (!who) return m.reply(`${emoji} Por favor, menciona aun usuario.`); 13 | 14 | let pp = './src/catalogo.jpg'; 15 | try { 16 | pp = await conn.getProfilePicture(who); 17 | } catch (e) { 18 | } finally { 19 | let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './src/catalogo.jpg'); 20 | let username = conn.getName(who); 21 | let str = `@${m.sender.split('@')[0]} le está agarrando el huevo a @${who.split('@')[0]}.`; 22 | let mentionedJid = [who, m.sender]; 23 | 24 | const abrazo = await conn.reply(m.chat, str, m, { mentions: mentionedJid }); 25 | 26 | conn.sendMessage(m.chat, { react: { text: '🍆', key: abrazo.key } }); 27 | } 28 | }; 29 | 30 | handler.help = ['huevo @user']; 31 | handler.tags = ['fun']; 32 | handler.command = ['huevo']; 33 | handler.group = true; 34 | handler.register = true; 35 | 36 | export default handler; 37 | -------------------------------------------------------------------------------- /plugins/fun-iqtest.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | conn.reply(m.chat,`${pickRandom(global.iq)}`, m) 3 | } 4 | handler.help = ['iqtest'] 5 | handler.tags = ['fun'] 6 | handler.command = ['iqtest', 'iq'] 7 | handler.group = true 8 | handler.register = true 9 | handler.fail = null 10 | 11 | export default handler 12 | 13 | function pickRandom(list) { 14 | return list[Math.floor(list.length * Math.random())] 15 | } 16 | 17 | global.iq = [ 18 | 'Tu IQ es de: 1', 19 | 'Tu IQ es de: 14', 20 | 'Tu IQ es de: 23', 21 | 'Tu IQ es de: 35', 22 | 'Tu IQ es de: 41', 23 | 'Tu IQ es de: 50', 24 | 'Tu IQ es de: 67', 25 | 'Tu IQ es de: 72', 26 | 'Tu IQ es de: 86', 27 | 'Tu IQ es de: 99', 28 | 'Tu IQ es de: 150', 29 | 'Tu IQ es de: 340', 30 | 'Tu IQ es de: 423', 31 | 'Tu IQ es de: 500', 32 | 'Tu IQ es de: 676', 33 | 'Tu IQ es de: 780', 34 | 'Tu IQ es de: 812', 35 | 'Tu IQ es de: 945', 36 | 'Tu IQ es de: 1000', 37 | 'Tu IQ es de: Ilimitado!!', 38 | 'Tu IQ es de: 5000', 39 | 'Tu IQ es de: 7500', 40 | 'Tu IQ es de: 10000', 41 | ] 42 | -------------------------------------------------------------------------------- /plugins/fun-memes.js: -------------------------------------------------------------------------------- 1 | import hispamemes from 'hispamemes' 2 | let handler = async (m, { conn, usedPrefix, command }) => { 3 | const meme = hispamemes.meme() 4 | conn.sendFile(m.chat, meme, '', '', m) 5 | m.react('🎤') 6 | } 7 | handler.help = ['meme'] 8 | handler.tags = ['fun'] 9 | handler.command = ['meme', 'memes'] 10 | handler.coin = 1 11 | handler.group = true; 12 | handler.register = true 13 | 14 | export default handler 15 | -------------------------------------------------------------------------------- /plugins/fun-nombreninja.js: -------------------------------------------------------------------------------- 1 | function handler(m, { text }) { 2 | if (!text) return conn.reply(m.chat, `${emoji} Por favor, ingresa tu nombre junto al comando.`, m) 3 | conn.reply(m.chat, `${emoji} Buscando el Nombre, espere un momento...`, m) 4 | let teks = text ? text : m.quoted && m.quoted.text ? m.quoted.text : m.text 5 | m.reply(teks.replace(/[a-z]/gi, v => { 6 | return { 7 | 'a': 'ka', 8 | 'b': 'tsu', 9 | 'c': 'mi', 10 | 'd': 'te', 11 | 'e': 'ku', 12 | 'f': 'hi', 13 | 'g': 'ji', 14 | 'h': 'ri', 15 | 'i': 'ki', 16 | 'j': 'zu', 17 | 'k': 'me', 18 | 'l': 'ta', 19 | 'm': 'rin', 20 | 'n': 'to', 21 | 'o': 'mo', 22 | 'p': 'no', 23 | 'q': 'ke', 24 | 'r': 'shi', 25 | 's': 'ari', 26 | 't': 'chi', 27 | 'u': 'do', 28 | 'v': 'ru', 29 | 'w': 'mei', 30 | 'x': 'na', 31 | 'y': 'fu', 32 | 'z': 'mori' 33 | }[v.toLowerCase()] || v }))} 34 | 35 | handler.help = ['nombreninja **'] 36 | handler.tags = ['fun'] 37 | handler.command = ['nombreninja'] 38 | handler.group = true; 39 | handler.register = true 40 | 41 | export default handler 42 | -------------------------------------------------------------------------------- /plugins/fun-paja.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, usedPrefix, text }) => { 2 | let { key } = await conn.sendMessage(m.chat, { text: "Tas caliente! Ahora te hare una paja" }, { quoted: m }); 3 | const array = [ 4 | "8==👊==D", "8===👊=D", "8=👊===D", "8=👊===D", "8==👊==D", "8===👊=D", "8====👊D", "8==👊=D", "8==👊==D", "8=👊===D", "8👊====D", "8=👊===D","8==👊==D", "8===👊=D", "8====👊D","8==👊==D", "8===👊=D", "8=👊===D", "8=👊===D", "8==👊==D", "8===👊=D", "8====👊D💦" 5 | ]; 6 | 7 | for (let item of array) { 8 | await conn.sendMessage(m.chat, { text: `${item}`, edit: key }, { quoted: m }); 9 | await new Promise(resolve => setTimeout(resolve, 20)); // Delay 5 seconds 10 | } 11 | return conn.sendMessage(m.chat, { text: `Oh, se corrió en menos de 1 hora!`.trim() , edit: key, mentions: [m.sender] }, { quoted: m }); 12 | }; 13 | 14 | handler.help = ['pajeame']; 15 | handler.tags = ['fun']; 16 | handler.command = ['paja', 'pajeame'] 17 | handler.group = true 18 | handler.register = true 19 | 20 | export default handler; 21 | -------------------------------------------------------------------------------- /plugins/fun-pokedex.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch'; 2 | 3 | let handler = async (m, { conn, text }) => { 4 | if (!text) return conn.reply(m.chat, `${emoji} Por favor, ingresa el nombre del Pokemon que quiere buscar.`, m) 5 | await m.react(rwait) 6 | conn.reply(m.chat, `${emoji2} Buscando *<${text}>*, espere un momento...`, m) 7 | const url = `https://some-random-api.com/pokemon/pokedex?pokemon=${encodeURIComponent(text)}`; 8 | const response = await fetch(url); 9 | const json = await response.json(); 10 | if (!response.ok) { 11 | await m.react(error) 12 | return conn.reply(m.chat, '⚠️ Ocurrio un error al buscar el Pokemon.', m)} 13 | const aipokedex = `${emoji} *Pokedex - Información de ${json.name}*\n\n☁️ *Nombre:* ${json.name}\n🔖 *ID:* ${json.id}\n💬 *Tipo:* ${json.type}\n💪 *Habilidades:* ${json.abilities}\n🎴 *Tamaño:* ${json.height}\n⚖️ *Peso:* ${json.weight}\n\n📖 *Descripción:*\n${json.description}\n\n🔍 ¡Encuentra más detalles sobre este Pokémon en la Pokedex!\n\n🔗 https://www.pokemon.com/es/pokedex/${json.name.toLowerCase()}` 14 | conn.reply(m.chat, aipokedex, m) 15 | await m.react(done) } 16 | 17 | handler.help = ['pokedex **'] 18 | handler.tags = ['fun'] 19 | handler.group = true; 20 | handler.register = true 21 | handler.command = ['pokedex'] 22 | 23 | export default handler 24 | -------------------------------------------------------------------------------- /plugins/fun-preguntas.js: -------------------------------------------------------------------------------- 1 | var handler = async (m, { conn, text, usedPrefix, command }) => { 2 | 3 | if (!text) return conn.reply(m.chat, `🎤💙 Por favor, hazme una pregunta para que pueda responderte con mi sabiduría virtual ✨`, m) 4 | 5 | await m.react('❔') 6 | await delay(1000 * 1) 7 | await m.react('❓') 8 | await delay(1000 * 1) 9 | await m.react('❔') 10 | await delay(1000 * 1) 11 | 12 | await conn.reply(m.chat, + dev + `\n\n🎤💙 *Pregunta Musical:* ` + text + `\n🎵✨ *Respuesta Virtual:* ` + res, m) 13 | 14 | } 15 | handler.help = ['pregunta'] 16 | handler.tags = ['fun'] 17 | handler.command = ['pregunta','preguntas'] 18 | handler.group = true 19 | handler.register = true 20 | 21 | export default handler 22 | 23 | const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)) 24 | 25 | let res = ['¡Hai! Sí ✨','Tal vez sí, nya~ 🎵','Posiblemente, desu 💙','Probablemente no, gomen 🎤','No, lo siento 💫','Imposible en el mundo virtual 🌟','¿Por qué haces estas preguntas musicales? 🎶','Por eso prefiero cantar 🎵','Para que quieres saber, fanático curioso 💙','No te diré la respuesta, es un secreto virtual ✨','Mi intuición Vocaloid dice que sí 🎤','El ciberespacio me dice que no 💫','¡Definitivamente! Como una melodía perfecta 🎵','Ni siquiera mi tecnología puede predecir eso 🌟'].getRandom() 26 | -------------------------------------------------------------------------------- /plugins/fun-ship.js: -------------------------------------------------------------------------------- 1 | var handler = async (m, { conn, command, text }) => { 2 | 3 | if (!text) return conn.reply(m.chat, `🎤💙 Escribe tu nombre y el nombre de la otra persona para calcular su compatibilidad musical virtual ✨`, m, global.rcanal) 4 | let [text1, ...text2] = text.split(' ') 5 | 6 | text2 = (text2 || []).join(' ') 7 | if (!text2) return conn.reply(m.chat, `🎵💫 Escribe el nombre de la segunda persona para crear la armonía perfecta 💫🎵`, m, global.rcanal) 8 | let love = `🎤💙 *${text1}* tu compatibilidad musical virtual con *${text2}* es de ${Math.floor(Math.random() * 100)}% ✨�\n\n� ¡Qué hermosa melodía podrían crear juntos! �` 9 | 10 | m.reply(love, null, { mentions: conn.parseMention(love) }) 11 | 12 | } 13 | handler.help = ['ship', 'love'] 14 | handler.tags = ['fun'] 15 | handler.command = ['ship','pareja'] 16 | handler.group = true; 17 | handler.register = true 18 | 19 | export default handler 20 | -------------------------------------------------------------------------------- /plugins/fun-sorteo.js: -------------------------------------------------------------------------------- 1 | import util from 'util' 2 | import path from 'path' 3 | 4 | async function handler(m, { groupMetadata, command, conn, text, usedPrefix}) { 5 | 6 | let user = a => '@' + a.split('@')[0] 7 | if (!text) return conn.reply(m.chat, `${emoji} Por favor ingresa lo que deseas sortear.`, m) 8 | let ps = groupMetadata.participants.map(v => v.id) 9 | let a = ps.getRandom() 10 | let k = Math.floor(Math.random() * 70) 11 | let vn = `https://hansxd.nasihosting.com/sound/sound${k}.mp3` 12 | let top = `*[🥳 \`FELICIDADES\` 🥳]*\n\n${user(a)} 🥳\nAcaba de ganar el sorteo felicitaciones 🎉` 13 | let txt = '' 14 | let count = 0 15 | for (const c of top) { 16 | await new Promise(resolve => setTimeout(resolve, 15)) 17 | txt += c 18 | count++ 19 | 20 | if (count % 10 === 0) { 21 | conn.sendPresenceUpdate('composing' , m.chat); 22 | } 23 | } 24 | await conn.sendMessage(m.chat, { text: txt.trim(), mentions: conn.parseMention(txt) }, {quoted: m, ephemeralExpiration: 24*60*100, disappearingMessagesInChat: 24*60*100} ) 25 | 26 | } 27 | handler.help = ['sorteo'] 28 | handler.command = ['sorteo'] 29 | handler.tags = ['fun'] 30 | handler.group = true 31 | handler.register = true 32 | 33 | export default handler 34 | 35 | function pickRandom(list) { 36 | return list[Math.floor(Math.random() * list.length)]} 37 | -------------------------------------------------------------------------------- /plugins/fun-top.js: -------------------------------------------------------------------------------- 1 | import util from 'util' 2 | import path from 'path' 3 | let user = a => '@' + a.split('@')[0] 4 | function handler(m, { groupMetadata, command, conn, text, usedPrefix}) { 5 | if (!text) return conn.reply(m.chat, `${emoji} Por favor, ingrese un texto para hacer un Top 10 *texto*.`, m) 6 | let ps = groupMetadata.participants.map(v => v.id) 7 | let a = ps.getRandom() 8 | let b = ps.getRandom() 9 | let c = ps.getRandom() 10 | let d = ps.getRandom() 11 | let e = ps.getRandom() 12 | let f = ps.getRandom() 13 | let g = ps.getRandom() 14 | let h = ps.getRandom() 15 | let i = ps.getRandom() 16 | let j = ps.getRandom() 17 | let k = Math.floor(Math.random() * 70); 18 | let x = `${pickRandom(['🤓','😅','😂','😳','😎', '🥵', '😱', '🤑', '🙄', '💩','🍑','🤨','🥴','🔥','👇🏻','😔', '👀','🌚'])}` 19 | let l = Math.floor(Math.random() * x.length); 20 | let vn = `https://hansxd.nasihosting.com/sound/sound${k}.mp3` 21 | let top = `*${x} Top 10 ${text} ${x}* 22 | 23 | *1. ${user(a)}* 24 | *2. ${user(b)}* 25 | *3. ${user(c)}* 26 | *4. ${user(d)}* 27 | *5. ${user(e)}* 28 | *6. ${user(f)}* 29 | *7. ${user(g)}* 30 | *8. ${user(h)}* 31 | *9. ${user(i)}* 32 | *10. ${user(j)}*` 33 | m.reply(top, null, { mentions: [a, b, c, d, e, f, g, h, i, j]}) 34 | } 35 | handler.help = ['top **'] 36 | handler.command = ['top'] 37 | handler.tags = ['fun'] 38 | handler.group = true; 39 | handler.register = true 40 | 41 | export default handler 42 | 43 | function pickRandom(list) { 44 | return list[Math.floor(Math.random() * list.length)]} 45 | -------------------------------------------------------------------------------- /plugins/fun-trio.js: -------------------------------------------------------------------------------- 1 | let handler = async(m, { conn, text, usedPrefix, command }) => { 2 | 3 | if (m.mentionedJid && m.mentionedJid.length === 2) { 4 | let person1 = m.mentionedJid[0]; 5 | let person2 = m.mentionedJid[1]; 6 | let name1 = conn.getName(person1); 7 | let name2 = conn.getName(person2); 8 | let name3 = conn.getName(m.sender); 9 | const pp = './src/Imagen.jpg'; 10 | 11 | let trio = `\t\t*TRIO VIOLENTOOOOO!* 12 | 13 | ${name1} y ${name2} tienen un *${Math.floor(Math.random() * 100)}%* de compatibilidad como pareja. 14 | Mientras que ${name1} y ${name3} tienen un *${Math.floor(Math.random() * 100)}%* de compatibilidad. 15 | Y ${name2} y ${name3} tienen un *${Math.floor(Math.random() * 100)}%* de compatibilidad. 16 | ¿Qué opinas de un trío? 😏`; 17 | 18 | conn.sendMessage(m.chat, { image: { url: pp }, caption: trio, mentions: [person1, person2, m.sender] }, { quoted: m }); 19 | } else { 20 | conn.reply(m.chat, `${emoji} Menciona a 2 usuarios mas, para calcular la compatibilidad.`, m); 21 | } 22 | } 23 | 24 | handler.help = ['formartrio @usuario1 @usuario2']; 25 | handler.tags = ['fun']; 26 | handler.command = ['formartrio'] 27 | handler.group = true; 28 | handler.register = true; 29 | 30 | export default handler; 31 | -------------------------------------------------------------------------------- /plugins/game-delttt.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text }) => { 2 | let room = Object.values(conn.game).find(room => room.id.startsWith('tictactoe') && [room.game.playerX, room.game.playerO].includes(m.sender)) 3 | if (room == undefined) return conn.reply(m.chat,`${emoji2} No estás en el juego de TicTacToe .`, m) 4 | delete conn.game[room.id] 5 | await conn.reply(m.chat, `${done} Se reinicia la sesión de *tictactoe*.`, m) 6 | } 7 | handler.help = ['delttt'] 8 | handler.tags = ['game'] 9 | handler.command = ['delttc', 'delttt', 'delxo','tictactoe'] 10 | handler.group = true 11 | handler.register = true 12 | 13 | export default handler 14 | -------------------------------------------------------------------------------- /plugins/game-math_answer.js: -------------------------------------------------------------------------------- 1 | global.math = global.math ? global.math : {}; 2 | const handler = async (m, {conn}) => { 3 | const id = m.chat; 4 | if (!m.quoted) return; 5 | if (m.quoted.sender != conn.user.jid) return; 6 | if (!/^Cuanto es el resultado de:/i.test(m.quoted.text)) return; 7 | if (!(m.chat in global.math)) return conn.reply(m.chat, `${emoji2} Ya se ha respondido a esa pregunta.`, m); 8 | 9 | if (m.quoted.id == global.math[id][0].id) { 10 | const math = global.math[id][1]; 11 | if (m.text == math.result) { 12 | conn.reply(m.chat, `Respuesta correcta!!\nHaz ganado: ${math.bonus} XP.`, m); 13 | global.db.data.users[m.sender].exp += math.bonus; 14 | clearTimeout(global.math[id][3]); 15 | delete global.math[id]; 16 | } else { 17 | if (--global.math[id][2] == 0) { 18 | conn.reply(m.chat, `Se acabaron tus oportunidades\nLa respuesta es: ${math.result}`, m); 19 | clearTimeout(global.math[id][3]); 20 | delete global.math[id]; 21 | } else conn.reply(m.chat, `Respuesta incorrecta!!\nOportunidades disponibles ${global.math[id][2]}`, m); 22 | } 23 | } 24 | }; 25 | handler.customPrefix = /^-?[0-9]+(\.[0-9]+)?$/; 26 | handler.command = new RegExp; 27 | export default handler; 28 | -------------------------------------------------------------------------------- /plugins/grupo-add.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args, text, usedPrefix, command }) => { 2 | if (!text) return conn.reply(m.chat, `${emoji} Por favor, ingrese el número al que quiere enviar una invitación al grupo.`, m, global.rcanal) 3 | if (text.includes('+')) return conn.reply(`${emoji2} Ingrese el número todo junto sin el *+*`, m, global.rcanal) 4 | if (isNaN(text)) return conn.reply(m.chat, `${emoji2} Ingrese sólo números sin su código de país y sin espacios.*`, m, global.rcanal) 5 | let group = m.chat 6 | let link = 'https://chat.whatsapp.com/' + await conn.groupInviteCode(group) 7 | 8 | await conn.reply(text+'@s.whatsapp.net', `${emoji} *INVITACIÓN A GRUPO*\n\nUn usuario te invitó a unirte a este grupo \n\n${link}`, m, {mentions: [m.sender]}) 9 | m.reply(`${emoji} Se envió un enlace de invitación al usuario.`) 10 | 11 | } 12 | handler.help = ['invite *<521>*'] 13 | handler.tags = ['group'] 14 | handler.command = ['add', 'agregar', 'añadir'] 15 | handler.group = true 16 | handler.admin = false 17 | handler.botAdmin = true 18 | 19 | export default handler 20 | -------------------------------------------------------------------------------- /plugins/grupo-admins.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, participants, groupMetadata, args }) => { 2 | const pp = await conn.profilePictureUrl(m.chat, 'image').catch(_ => null) || './media/img/miniurl.mp4' 3 | const groupAdmins = participants.filter(p => p.admin) 4 | const listAdmin = groupAdmins.map((v, i) => `${i + 1}. @${v.id.split('@')[0]}`).join('\n💙 ') 5 | const owner = groupMetadata.owner || groupAdmins.find(p => p.admin === 'superadmin')?.id || m.chat.split`-`[0] + '@s.whatsapp.net' 6 | 7 | let text = ` 8 | ≡ *Admis del grupo* _${groupMetadata.subject}_ 9 | 10 | ┌─⊷ *ADMINISTRADORES* 11 | 💙 ${listAdmin} 12 | └─────────── 13 | `.trim() 14 | conn.sendFile(m.chat, pp, 'staff.png', text, m, false, { mentions: [...groupAdmins.map(v => v.id), owner] }) 15 | } 16 | handler.help = ['staff', 'admins', 'administradores'] 17 | handler.tags = ['group'] 18 | handler.command = ['staff', 'admins', 'administradores'] 19 | handler.group = true 20 | export default handler 21 | 22 | -------------------------------------------------------------------------------- /plugins/grupo-banchat.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, isAdmin, isROwner }) => { 2 | if (!(isAdmin || isROwner)) return dfail('admin', m, conn) 3 | global.db.data.chats[m.chat].isBanned = true 4 | await conn.reply(m.chat, `💙 Chat Baneado con exito.`, m, global.rcanal) 5 | await m.react('✅') 6 | } 7 | handler.help = ['banearbot'] 8 | handler.tags = ['group'] 9 | handler.command = ['banearbot', 'banchat'] 10 | handler.group = true 11 | export default handler 12 | 13 | -------------------------------------------------------------------------------- /plugins/grupo-config.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args, usedPrefix, command }) => { 2 | const pp = await conn.profilePictureUrl(m.chat, 'image').catch(_ => icono) 3 | let isClose = { 4 | 'open': 'not_announcement', 5 | 'close': 'announcement', 6 | 'abierto': 'not_announcement', 7 | 'cerrado': 'announcement', 8 | 'abrir': 'not_announcement', 9 | 'cerrar': 'announcement', 10 | }[(args[0] || '')] 11 | if (isClose === undefined) 12 | return conn.reply(m.chat, `${emoji} *Elija una opción para configurar el grupo*\n\nEjemplo:\n*🔓 #${command} abrir*\n*📣 #${command} cerrar*\n*🔒 #${command} close*\n*🔈 #${command} open*`, m, global.rcanal) 13 | await conn.groupSettingUpdate(m.chat, isClose) 14 | 15 | if (isClose === 'not_announcement'){ 16 | m.reply(`${emoji} *Ya pueden escribir en este grupo.*`) 17 | } 18 | 19 | if (isClose === 'announcement'){ 20 | m.reply(`${emoji2} *Solos los admins pueden escribir en este grupo.*`) 21 | }} 22 | handler.help = ['group open / close', 'grupo abrir / cerrar'] 23 | handler.tags = ['grupo'] 24 | handler.command = ['group', 'grupo'] 25 | handler.admin = true 26 | handler.botAdmin = true 27 | 28 | export default handler 29 | -------------------------------------------------------------------------------- /plugins/grupo-delete.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, usedPrefix, command }) => { 2 | 3 | if (!m.quoted) return conn.reply(m.chat, `${emoji} Por favor, cita el mensaje que deseas eliminar.`, m) 4 | try { 5 | let delet = m.message.extendedTextMessage.contextInfo.participant 6 | let bang = m.message.extendedTextMessage.contextInfo.stanzaId 7 | return conn.sendMessage(m.chat, { delete: { remoteJid: m.chat, fromMe: false, id: bang, participant: delet }}) 8 | } catch { 9 | return conn.sendMessage(m.chat, { delete: m.quoted.vM.key }) 10 | } 11 | } 12 | 13 | handler.help = ['delete'] 14 | handler.tags = ['grupo'] 15 | handler.command = ['del','delete'] 16 | handler.group = false 17 | handler.admin = true 18 | handler.botAdmin = true 19 | 20 | export default handler 21 | -------------------------------------------------------------------------------- /plugins/grupo-demote.js: -------------------------------------------------------------------------------- 1 | var handler = async (m, { conn,usedPrefix, command, text }) => { 2 | 3 | if (isNaN(text) && !text.match(/@/g)){ 4 | 5 | } else if (isNaN(text)) { 6 | var number = text.split`@`[1] 7 | } else if (!isNaN(text)) { 8 | var number = text 9 | } 10 | 11 | if (!text && !m.quoted) return conn.reply(m.chat, `${emoji} Debes mencionar a un usuario para poder degradarlo de administrador.`, m) 12 | if (number.length > 13 || (number.length < 11 && number.length > 0)) return conn.reply(m.chat, `${emoji} Debes mencionar a un usuario para poder degradarlo de administrador.`, m) 13 | 14 | try { 15 | if (text) { 16 | var user = number + '@s.whatsapp.net' 17 | } else if (m.quoted.sender) { 18 | var user = m.quoted.sender 19 | } else if (m.mentionedJid) { 20 | var user = number + '@s.whatsapp.net' 21 | } 22 | } catch (e) { 23 | } finally { 24 | conn.groupParticipantsUpdate(m.chat, [user], 'demote') 25 | conn.reply(m.chat, `${emoji2} Fue descartado como admin.`, m) 26 | } 27 | 28 | } 29 | handler.help = ['demote'] 30 | handler.tags = ['grupo'] 31 | handler.command = ['demote','quitarpija', 'degradar'] 32 | handler.group = true 33 | handler.admin = true 34 | handler.botAdmin = true 35 | handler.fail = null 36 | 37 | export default handler 38 | -------------------------------------------------------------------------------- /plugins/grupo-encuesta.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, args, usedPrefix, command }) => { 2 | 3 | if (!args[0]) throw `${emoji} Ingrese un texto para iniciar la escuesta.\n\n>📌 Ejemplo : *${usedPrefix + command}* texto|texto2...` 4 | if (!text.includes('|')) throw `${emoji2} Separe las encuestas con *|* \n\n> 📌 Ejemplo : *${usedPrefix + command}* texto|texto2...` 5 | let a = [] 6 | let b = text.split('|') 7 | for (let c = 0; c < b.length; c++) { 8 | a.push([b[c]]) 9 | } 10 | return conn.sendPoll(m.chat, `${packname}`, a, m) 11 | } 12 | handler.help = ['encuesta '] 13 | handler.tags = ['grupo'] 14 | handler.command = ['poll', 'encuesta'] 15 | handler.group = true 16 | 17 | export default handler 18 | -------------------------------------------------------------------------------- /plugins/grupo-gpbanner.js: -------------------------------------------------------------------------------- 1 | import { makeWASocket } from '@whiskeysockets/baileys'; 2 | 3 | let handler = async (m, { conn, usedPrefix, command }) => { 4 | let q = m.quoted ? m.quoted : m; 5 | let mime = (q.msg || q).mimetype || q.mediaType || ''; 6 | 7 | if (/image/.test(mime)) { 8 | let img = await q.download(); 9 | if (!img) return m.reply(`${emoji} Te faltó la imagen para el perfil del grupo.`); 10 | 11 | try { 12 | await conn.updateProfilePicture(m.chat, img); 13 | m.reply(`${emoji} Perfecto.`); 14 | m.react(done) 15 | } catch (e) { 16 | m.reply(`︎${msm} Ocurrió un error: ${e.message}`); 17 | } 18 | } else { 19 | return m.reply(`${emoji} Te faltó la imagen para cambiar el perfil del grupo.`); 20 | } 21 | }; 22 | 23 | handler.command = ['gpbanner', 'groupimg']; 24 | handler.group = true; 25 | handler.admin = true; 26 | handler.botAdmin = true; 27 | 28 | export default handler; 29 | -------------------------------------------------------------------------------- /plugins/grupo-gpdesc.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn, args}) => { 2 | await conn.groupUpdateDescription(m.chat, `${args.join(' ')}`); 3 | m.reply(`${emoji} La descripción del grupo se modifico correctamente.`); 4 | }; 5 | handler.help = ['groupdesc ']; 6 | handler.tags = ['grupo']; 7 | handler.command = ['gpdesc', 'groupdesc'] 8 | handler.group = true; 9 | handler.admin = true; 10 | handler.botAdmin = true; 11 | 12 | export default handler; 13 | -------------------------------------------------------------------------------- /plugins/grupo-gpname.js: -------------------------------------------------------------------------------- 1 | import Presence from '@whiskeysockets/baileys'; 2 | const handler = async (m, {conn, args, text}) => { 3 | if (!text) throw `${emoji} Por favor, ingresé el nuevo nombre qué desea ponerle al grupo.`; 4 | try { 5 | const text = args.join` `; 6 | if (!args || !args[0]) { 7 | } else { 8 | conn.groupUpdateSubject(m.chat, text); 9 | } 10 | } catch (e) { 11 | throw `${msm} Ocurrió un error.`; 12 | } 13 | }; 14 | handler.help = ['gruponame ']; 15 | handler.tags = ['grupo']; 16 | handler.command = ['gpname', 'groupname'] 17 | handler.group = true; 18 | handler.admin = true; 19 | 20 | export default handler; 21 | -------------------------------------------------------------------------------- /plugins/grupo-kick.js: -------------------------------------------------------------------------------- 1 | var handler = async (m, { conn, participants, usedPrefix, command }) => { 2 | if (!m.mentionedJid[0] && !m.quoted) { 3 | return conn.reply(m.chat, `${emoji} Debes mencionar a un usuario para poder expulsarlo del grupo.`, m); 4 | } 5 | 6 | let user = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted.sender; 7 | 8 | const groupInfo = await conn.groupMetadata(m.chat); 9 | const ownerGroup = groupInfo.owner || m.chat.split`-`[0] + '@s.whatsapp.net'; 10 | const ownerBot = global.owner[0][0] + '@s.whatsapp.net'; 11 | //const nn = conn.getName(m.sender); 12 | 13 | if (user === conn.user.jid) { 14 | return conn.reply(m.chat, `${emoji2} No puedo eliminar el bot del grupo.`, m); 15 | } 16 | 17 | if (user === ownerGroup) { 18 | return conn.reply(m.chat, `${emoji2} No puedo eliminar al propietario del grupo.`, m); 19 | } 20 | 21 | if (user === ownerBot) { 22 | return conn.reply(m.chat, `${emoji2} No puedo eliminar al propietario del bot.`, m); 23 | } 24 | 25 | await conn.groupParticipantsUpdate(m.chat, [user], 'remove'); 26 | 27 | //conn.reply(`${suitag}@s.whatsapp.net`, `${emoji} Un Admin Acabo De Eliminar Un Usuario En El Grupo:\n> ${groupMetadata.subject}.`, m, rcanal, ); 28 | }; 29 | 30 | handler.help = ['kick']; 31 | handler.tags = ['grupo']; 32 | handler.command = ['kick','echar','hechar','sacar','ban','fueramrd']; 33 | handler.admin = true; 34 | handler.group = true; 35 | handler.register = false 36 | handler.botAdmin = true; 37 | 38 | export default handler; 39 | 40 | -------------------------------------------------------------------------------- /plugins/grupo-linea.js: -------------------------------------------------------------------------------- 1 | import axios from "axios" 2 | 3 | let handler = async (m, { conn, args }) => { 4 | const pp = await conn.profilePictureUrl(m.chat, 'image').catch((_) => global.icon) 5 | try { 6 | let id = args?.[0]?.match(/\d+\-\d+@g.us/) || m.chat 7 | 8 | const participantesUnicos = Object.values(conn.chats[id]?.messages || {}) 9 | .map((item) => item.key.participant) 10 | .filter((value, index, self) => self.indexOf(value) === index) 11 | 12 | const participantesOrdenados = participantesUnicos 13 | .filter(participante => participante) 14 | .sort((a, b) => { 15 | if (a && b) { 16 | return a.split("@")[0].localeCompare(b.split("@")[0]) 17 | } 18 | return 0 19 | }) 20 | 21 | const listaEnLinea = 22 | participantesOrdenados 23 | .map((k) => `*●* @${k.split("@")[0]}`) 24 | .join("\n") || "🌱 No hay usuarios en línea en este momento." 25 | 26 | await conn.sendMessage( 27 | m.chat, 28 | { 29 | image: { url: pp }, 30 | caption: `*💙 Lista de usuarios en línea:*\n\n${listaEnLinea}\n\n> ${dev}`, 31 | contextInfo: { mentionedJid: participantesOrdenados }, 32 | }, 33 | { quoted: m }) 34 | 35 | await m.react("✅") 36 | } catch (error) { 37 | await m.reply(`⚠︎ Ocurrió un error: ${error.message}`) 38 | }} 39 | 40 | handler.help = ["listonline"] 41 | handler.tags = ["owner"] 42 | handler.command = ["listonline", "online", "linea", "enlinea"] 43 | handler.group = true 44 | 45 | export default handler 46 | 47 | -------------------------------------------------------------------------------- /plugins/grupo-link.js: -------------------------------------------------------------------------------- 1 | var handler = async (m, { conn, args }) => { 2 | 3 | let group = m.chat 4 | let link = 'https://chat.whatsapp.com/' + await conn.groupInviteCode(group) 5 | conn.reply(m.chat, link, m) 6 | 7 | } 8 | handler.help = ['link'] 9 | handler.tags = ['grupo'] 10 | handler.command = ['link','linkgroup'] 11 | 12 | handler.botAdmin = true 13 | 14 | export default handler 15 | 16 | -------------------------------------------------------------------------------- /plugins/grupo-listawarns.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, isOwner }) => { 2 | let adv = Object.entries(global.db.data.users).filter(user => user[1].warn) 3 | let warns = global.db.data.users.warn 4 | let user = global.db.data.users 5 | 6 | let caption = `${msm} Usuarios Advertidos 7 | *╭•·–––––––––––––––––––·•* 8 | │ *Total : ${adv.length} Usuarios* ${adv ? '\n' + adv.map(([jid, user], i) => ` 9 | │ 10 | │ *${i + 1}.* ${conn.getName(jid) == undefined ? 'Sin Usuarios' : conn.getName(jid) + ` *(${user.warn}/3)*`} 11 | │ ${isOwner ? '@' + jid.split`@`[0] : jid}\n│ - - - - - - - - -`.trim()).join('\n') : ''} 12 | *╰•·–––––––––––––––––––·•*\n\n${msm} Advertencias ⇢ ${warns ? `*${warns}/3*` : '*0/3*'}` 13 | await conn.reply(m.chat, caption, m, { mentions: await conn.parseMention(caption) })} 14 | 15 | handler.help = ['listadv'] 16 | handler.tags = ['grupo'] 17 | handler.command = ['listadv', 'listaadv', 'listadv', 'adv', 'advlist', 'advlista'] 18 | 19 | export default handler 20 | -------------------------------------------------------------------------------- /plugins/grupo-promote.js: -------------------------------------------------------------------------------- 1 | var handler = async (m, { conn,usedPrefix, command, text }) => { 2 | 3 | if (isNaN(text) && !text.match(/@/g)){ 4 | 5 | } else if (isNaN(text)) { 6 | var number = text.split`@`[1] 7 | } else if (!isNaN(text)) { 8 | var number = text 9 | } 10 | 11 | if (!text && !m.quoted) return conn.reply(m.chat, `${emoji} Debes mencionar a un usuario para poder promoverlo a administrador.`, m) 12 | if (number.length > 13 || (number.length < 11 && number.length > 0)) return conn.reply(m.chat, `${emoji} Debe de responder o mensionar a una persona para usar este comando.`, m) 13 | 14 | try { 15 | if (text) { 16 | var user = number + '@s.whatsapp.net' 17 | } else if (m.quoted.sender) { 18 | var user = m.quoted.sender 19 | } else if (m.mentionedJid) { 20 | var user = number + '@s.whatsapp.net' 21 | } 22 | } catch (e) { 23 | } finally { 24 | conn.groupParticipantsUpdate(m.chat, [user], 'promote') 25 | conn.reply(m.chat, `${done} Fue agregado como admin del grupo con exito.`, m) 26 | } 27 | 28 | } 29 | handler.help = ['promote'] 30 | handler.tags = ['grupo'] 31 | handler.command = ['promote','darpija', 'promover'] 32 | handler.group = true 33 | handler.admin = true 34 | handler.botAdmin = true 35 | handler.fail = null 36 | 37 | export default handler 38 | -------------------------------------------------------------------------------- /plugins/grupo-revoke.js: -------------------------------------------------------------------------------- 1 | var handler = async (m, { conn }) => { 2 | 3 | let res = await conn.groupRevokeInvite(m.chat) 4 | let gruf = m.chat 5 | conn.reply(m.sender, 'https://chat.whatsapp.com/' + await conn.groupInviteCode(gruf), m) 6 | } 7 | 8 | handler.help = ['revoke'] 9 | handler.tags = ['grupo'] 10 | handler.command = ['revoke', 'restablecer'] 11 | handler.group = true 12 | handler.admin = true 13 | handler.botAdmin = true 14 | 15 | export default handler 16 | -------------------------------------------------------------------------------- /plugins/grupo-setbye.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, isRowner }) => { 2 | if (!text) return m.reply(`${emoji} Por favor, proporciona un mensaje de despedida para el bot.\n> Ejemplo: #setbye adios user`); 3 | 4 | global.welcom2 = text.trim(); 5 | 6 | m.reply(`${emoji} La despedida del bot ha sido cambiado a: ${global.welcom2}`); 7 | }; 8 | 9 | handler.help = ['setdespedida']; 10 | handler.tags = ['tools']; 11 | handler.command = ['setbye']; 12 | handler.owner = false; 13 | handler.admin = true; 14 | 15 | export default handler; 16 | -------------------------------------------------------------------------------- /plugins/grupo-setmoji_tagall.js: -------------------------------------------------------------------------------- 1 | /* 2 | - Setemoji By Angel-OFC 3 | - edita el tagall con tu emoji favorito 4 | - https://whatsapp.com/channel/0029VaJxgcB0bIdvuOwKTM2Y 5 | */ 6 | let handler = async (m, { conn, text, isRowner }) => { 7 | 8 | if (!text) { 9 | return m.reply(`${emoji} Debes proporcionar un emoji válido después del comando. Ejemplo: .setemoji ${emoji2}`); 10 | } 11 | 12 | const emoji = text.trim(); 13 | 14 | if (!isEmoji(emoji)) { 15 | return m.reply(`${emoji} El texto proporcionado no es un emoji válido. Asegúrate de que sea un emoji real.`); 16 | } 17 | 18 | try { 19 | global.db.data.chats[m.chat].customEmoji = emoji; 20 | 21 | m.reply(`${emoji2} El emoji del grupo ha sido actualizado correctamente a: ${emoji}`); 22 | } catch (error) { 23 | console.error(error); 24 | m.reply(`${msm} Hubo un error al intentar cambiar el emoji.`); 25 | } 26 | }; 27 | 28 | const isEmoji = (text) => { 29 | const emojiRegex = 30 | /(?:\p{Emoji_Presentation}|\p{Extended_Pictographic}|\p{Emoji})/gu; 31 | return emojiRegex.test(text) && text.length <= 2; 32 | }; 33 | 34 | handler.help = ['setemoji **']; 35 | handler.tags = ['group']; 36 | handler.command = ['setemoji', 'setemo']; 37 | handler.admin = true; 38 | handler.group = true; 39 | 40 | export default handler; 41 | -------------------------------------------------------------------------------- /plugins/grupo-setwelcome.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, isRowner }) => { 2 | if (!text) return m.reply(`${emoji} Por favor, proporciona una bienvenida para el bot.\n> Ejemplo: #setwelcome Hola user`); 3 | 4 | global.welcom1 = text.trim(); 5 | 6 | m.reply(`${emoji} La bienvenida del bot ha sido cambiado a: ${global.welcom1}`); 7 | }; 8 | 9 | handler.help = ['setwelcome']; 10 | handler.tags = ['tools']; 11 | handler.command = ['setwelcome']; 12 | handler.owner = false; 13 | handler.admin = true; 14 | 15 | export default handler; 16 | -------------------------------------------------------------------------------- /plugins/grupo-tagall.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { isOwner, isAdmin, conn, text, participants, args, command, usedPrefix }) => { 2 | if (usedPrefix == 'a' || usedPrefix == 'A') return; 3 | 4 | const customEmoji = global.db.data.chats[m.chat]?.customEmoji || '📣'; 5 | m.react(customEmoji); 6 | 7 | if (!(isAdmin || isOwner)) { 8 | global.dfail('admin', m, conn); 9 | throw false; 10 | } 11 | 12 | const pesan = args.join` `; 13 | const oi = `*💙 ANUNCIO DE MIKU :* ${pesan} 💙`; 14 | let teks = `*🎵 LLAMADA VIRTUAL A TODOS LOS FANÁTICOS 🎵*\n *🌟 PARA ${participants.length} MIEMBROS DEL CONCIERTO 🌟* 🎤\n\n ${oi}\n\n╭ ┄ 𝅄 ۪꒰ \`⡞᪲=͟͟͞${botname} ≼᳞ׄ\` ꒱ ۟ 𝅄 ┄\n`; 15 | for (const mem of participants) { 16 | teks += `┊🎵 @${mem.id.split('@')[0]}\n`; 17 | } 18 | teks += `╰⸼ ┄ ┄ ┄ ─ ꒰ ׅ୭ *${vs}* ୧ ׅ ꒱ ┄ ─ ┄ ⸼`; 19 | 20 | conn.sendMessage(m.chat, { text: teks, mentions: participants.map((a) => a.id) }); 21 | }; 22 | 23 | handler.help = ['todos **']; 24 | handler.tags = ['group']; 25 | handler.command = ['todos', 'invocar', 'tagall'] 26 | handler.admin = true; 27 | handler.group = true; 28 | 29 | export default handler; 30 | -------------------------------------------------------------------------------- /plugins/grupo-unbanchat.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, isAdmin, isROwner} ) => { 2 | if (!(isAdmin || isROwner)) return dfail('admin', m, conn) 3 | global.db.data.chats[m.chat].isBanned = false 4 | await conn.reply(m.chat, '💙 Bot activo en este grupo.', m, global.rcanal) 5 | await m.react('✅') 6 | } 7 | handler.help = ['desbanearbot'] 8 | handler.tags = ['group'] 9 | handler.command = ['desbanearbot', 'unbanchat'] 10 | handler.group = true 11 | export default handler 12 | 13 | -------------------------------------------------------------------------------- /plugins/grupo-unwarn.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn, text, command, usedPrefix}) => { 2 | const pp = './src/Imagen.jpg'; 3 | let who; 4 | if (m.isGroup) who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : text; 5 | else who = m.chat; 6 | const user = global.db.data.users[who]; 7 | const bot = global.db.data.settings[conn.user.jid] || {}; 8 | const warntext = `${emoji} Etiqueta a un usuario para quitarle las advertencias.\n${emoji2} Ejemplo: *${usedPrefix + command} @${global.suittag}*`; 9 | if (!who) throw m.reply(warntext, m.chat, {mentions: conn.parseMention(warntext)}); 10 | if (m.mentionedJid.includes(conn.user.jid)) return; 11 | if (user.warn == 0) throw `${emoji2} El usuario tiene 0 advertencias.`; 12 | user.warn -= 1; 13 | await m.reply(`${user.warn == 1 ? `*@${who.split`@`[0]}*` : `♻️ *@${who.split`@`[0]}*`} Se le quito una advertencia.\n*ADVERTENCIAS ${user.warn}/3*`, null, {mentions: [who]}); 14 | }; 15 | handler.command = ['delwarn', 'unwarn'] 16 | handler.group = true; 17 | handler.admin = true; 18 | handler.botAdmin = true; 19 | 20 | export default handler; 21 | -------------------------------------------------------------------------------- /plugins/info-autoresponder.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, usedPrefix, command, isOwner, isAdmin, isROwner }) => { 2 | if (!(isOwner || isAdmin || isROwner)) { 3 | conn.reply(m.chat, `${emoji2} Lo siento no puedes personalizar el autoresponder en este grupo/chat.`, m) 4 | } 5 | const chatData = global.db.data.chats[m.chat] 6 | if (text) { 7 | if (chatData.sAutoresponder) return conn.reply(m.chat, `${emoji} Ya hay un prompt en uso, si quieres configurar otro escribe: *${usedPrefix + command}, hazlo sin texto.*`, m) 8 | 9 | chatData.sAutoresponder = text 10 | conn.reply(m.chat, `${emoji} Configuración con éxito.\n\n${emoji2} Si el autoresponder está desactivado activalo usando:\n> » *${usedPrefix}autoresponder*`, m) 11 | } else { 12 | if (chatData.sAutoresponder) { 13 | chatData.sAutoresponder = '' 14 | conn.reply(m.chat, "🗑️ Prompt borrado con éxito.", m) 15 | } else { 16 | conn.reply(m.chat, `${emoji2} No hay Prompt personalizado en este chat.\n\n${emoji} Puedes perzonalizar el autoresponder usando:\n> » *${usedPrefix + command} + texto que quieres que lo interactúe.*`, m) 17 | }} 18 | } 19 | 20 | handler.tags = ['info'] 21 | handler.help = ['editautoresponder'] 22 | handler.command = ['editautoresponder', 'autoresponder2'] 23 | 24 | export default handler 25 | -------------------------------------------------------------------------------- /plugins/info-dashboard.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, command }) => { 2 | 3 | if (command == 'dash' || command == 'dashboard' || command == 'views') { 4 | let stats = Object.entries(db.data.stats).map(([key, val]) => { 5 | let name = Array.isArray(plugins[key]?.help) ? plugins[key]?.help?.join(' , ') : plugins[key]?.help || key 6 | 7 | if (/exec/.test(name)) return 8 | return { name, ...val } 9 | }) 10 | 11 | stats = stats.sort((a, b) => b.total - a.total) 12 | var handlers = stats.slice(0, 10).map(({ name, total }) => { 13 | return `⬡ *Comando* : *${name}*\n⬡ *Usos* : ${total}` 14 | }).join('\n\n') 15 | 16 | conn.reply(m.chat, handlers, m, fake) 17 | } 18 | 19 | if (command == 'database' || command == 'usuarios' || command == 'user') { 20 | let totalreg = Object.keys(global.db.data.users).length 21 | let rtotalreg = Object.values(global.db.data.users).filter(user => user.registered == true).length 22 | 23 | conn.reply(m.chat, ` 24 | 🗂️ *Tengo ${rtotalreg} Usuarios Registrados* 25 | 26 | 📂 *${totalreg} No Están Registrados*`, m) 27 | } 28 | 29 | } 30 | 31 | handler.help = ['dash', 'dashboard', 'views', 'database', 'usuarios', 'user'] 32 | handler.tags = ['info'] 33 | handler.command = ['dashboard', 'dash', 'views', 'database', 'usuarios', 'user'] 34 | handler.register = true 35 | 36 | export default handler 37 | -------------------------------------------------------------------------------- /plugins/info-ds.js: -------------------------------------------------------------------------------- 1 | import { readdirSync, unlinkSync, existsSync, promises as fs, rmSync } from 'fs' 2 | import path from 'path' 3 | 4 | var handler = async (m, { conn, usedPrefix }) => { 5 | 6 | if (global.conn.user.jid !== conn.user.jid) { 7 | return conn.reply(m.chat, `${emoji} Utiliza este comando directamente en el número principal del Bot.`, m) 8 | } 9 | 10 | let chatId = m.isGroup ? [m.chat, m.sender] : [m.sender] 11 | let sessionPath = `./${sessions}/` 12 | 13 | try { 14 | 15 | let files = await fs.readdir(sessionPath) 16 | let filesDeleted = 0 17 | for (let file of files) { 18 | for (let id of chatId) { 19 | if (file.includes(id.split('@')[0])) { 20 | await fs.unlink(path.join(sessionPath, file)) 21 | filesDeleted++; 22 | break 23 | }}} 24 | 25 | if (filesDeleted === 0) { 26 | await conn.reply(m.chat, `${emoji2} No se encontró ningún archivo que incluya la ID del chat.`, m) 27 | } else { 28 | await conn.reply(m.chat, `${emoji2} Se eliminaron ${filesDeleted} archivos de sesión.`, m) 29 | conn.reply(m.chat, `${emoji} ¡Hola! ¿logras verme?`, m) 30 | } 31 | } catch (err) { 32 | console.error('Error al leer la carpeta o los archivos de sesión:', err) 33 | await conn.reply(m.chat, `${emoji} Hola Soy ${botname} Sigue El Canal y apoyanos porfavor.\n\n> ${channel}`, m) 34 | } 35 | 36 | } 37 | handler.help = ['ds', 'fixmsgespera'] 38 | handler.tags = ['info'] 39 | handler.command = ['fixmsgespera', 'ds'] 40 | handler.register = true 41 | 42 | export default handler 43 | -------------------------------------------------------------------------------- /plugins/info-gruposofc.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | let handler = async (m, { conn, usedPrefix, command }) => { 4 | 5 | let grupos = `💙 *¡Konnichiwa, querido fanático!* 💙 6 | 7 | ✨ Te invito a unirte a mis escenarios virtuales oficiales para disfrutar de conciertos increíbles con toda la comunidad Vocaloid... ✨ 8 | 9 | 🎵 ${namegrupo} 10 | > *💙* ${gp1} 11 | 12 | 🌟 ${namecomu} 13 | > *💙* ${comunidad1} 14 | 15 | *🎤─💙─✨─🎵─💫─🎶─✨─💙─🎤* 16 | 17 | 🎵 ¿Enlace caducado? ¡Entra aquí para más información musical! 18 | 19 | 💫 ${namechannel} 20 | > *💙* ${channel} 21 | 22 | > ${dev} 🎤✨` 23 | 24 | await conn.sendFile(m.chat, catalogo, "grupos.jpg", grupos, m) 25 | 26 | await m.react(emojis) 27 | 28 | } 29 | handler.help = ['grupos'] 30 | handler.tags = ['info'] 31 | handler.command = ['grupos', 'links', 'groups'] 32 | 33 | export default handler 34 | 35 | -------------------------------------------------------------------------------- /plugins/info-newcommand.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, usedPrefix, command }) => { 2 | if (!text) return conn.reply(m.chat, `√${emoji} Que comando quieres sugerir?`, m) 3 | if (text.length < 10) return conn.reply(m.chat, `${emoji2} La sugerencia debe ser mas de 10 character.`, m) 4 | if (text.length > 1000) return conn.reply(m.chat, `${emoji2} Maximo de la sugerencia es de 1000 character.`, m) 5 | const teks = `${emoji} Sugerencia de un nuevo comando del usuario *${nombre}* 6 | 7 | ☁️ Comando Sugerido: 8 | > ${text}` 9 | await conn.reply(`${suittag}@s.whatsapp.net`, m.quoted ? teks + m.quoted.text : teks, m, { mentions: conn.parseMention(teks) }) 10 | 11 | m.reply('🍬 La sugerencia se envió a mi propietario.') 12 | } 13 | handler.help = ['newcommand'] 14 | handler.tags = ['info'] 15 | handler.command = ['newcommand', 'sug','nuevocomando','sugerencia'] 16 | 17 | export default handler 18 | -------------------------------------------------------------------------------- /plugins/info-ping.js: -------------------------------------------------------------------------------- 1 | import speed from 'performance-now' 2 | import { spawn, exec, execSync } from 'child_process' 3 | 4 | let handler = async (m, { conn }) => { 5 | let timestamp = speed() 6 | let sentMsg = await conn.reply(m.chat, '🎤💙 Sincronizando frecuencias virtuales... ✨', m) 7 | let latency = speed() - timestamp 8 | exec(`neofetch --stdout`, (error, stdout, stderr) => { 9 | let child = stdout.toString("utf-8"); 10 | let ssd = child.replace(/Memory:/, "Ram:") 11 | 12 | let result = `🎵✨ *¡Miku Pong!* ✨🎵\n💙 Latencia del Escenario Virtual ⴵ ${latency.toFixed(4).split(".")[0]}ms 💙\n${ssd}` 13 | conn.sendMessage(m.chat, { text: result, edit: sentMsg.key }, { quoted: m }) 14 | }) 15 | } 16 | handler.help = ['ping'] 17 | handler.tags = ['info'] 18 | handler.command = ['ping', 'p'] 19 | 20 | export default handler 21 | 22 | -------------------------------------------------------------------------------- /plugins/info-reporte.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, usedPrefix, command }) => { 2 | if (!text) return conn.reply(m.chat, `${emoji} Por favor, ingrese el error que desea reportar.`, m) 3 | if (text.length < 10) return conn.reply(m.chat, `${emoji} Especifique bien el error, mínimo 10 caracteres.`, m) 4 | if (text.length > 1000) return conn.reply(m.chat, `${emoji2} *Máximo 1000 caracteres para enviar el error.`, m) 5 | const teks = `*✖️ \`R E P O R T E\` ✖️* 6 | 7 | ☁️ Número: 8 | • Wa.me/${m.sender.split`@`[0]} 9 | 10 | 👤 Usuario: 11 | • ${m.pushName || 'Anónimo'} 12 | 13 | 💬 Mensaje: 14 | • ${text}` 15 | await conn.reply(`${suittag}@s.whatsapp.net`, m.quoted ? teks + m.quoted.text : teks, m, { mentions: conn.parseMention(teks) }) 16 | 17 | m.reply(`${emoji} El reporte se envío a mi creador, cualquier informe falso puede ocasionar baneo.`) 18 | } 19 | handler.help = ['reportar'] 20 | handler.tags = ['info'] 21 | handler.command = ['reporte', 'report', 'reportar', 'bug', 'error'] 22 | 23 | export default handler 24 | -------------------------------------------------------------------------------- /plugins/info-speedtest.js: -------------------------------------------------------------------------------- 1 | import cp from 'child_process'; 2 | import { promisify } from 'util'; 3 | const exec = promisify(cp.exec).bind(cp); 4 | 5 | const handler = async (m) => { 6 | let o; 7 | try { 8 | conn.reply(m.chat, `${emoji} Speed Test....`, m, ) 9 | o = await exec('python3 ./lib/ookla-speedtest.py --secure --share'); 10 | const {stdout, stderr} = o; 11 | if (stdout.trim()) { 12 | const match = stdout.match(/http[^"]+\.png/); 13 | const urlImagen = match ? match[0] : null; 14 | await conn.sendMessage(m.chat, {image: {url: urlImagen}, caption: stdout.trim()}, {quoted: fkontak}); 15 | } 16 | if (stderr.trim()) { 17 | const match2 = stderr.match(/http[^"]+\.png/); 18 | const urlImagen2 = match2 ? match2[0] : null; 19 | await conn.sendMessage(m.chat, {image: {url: urlImagen2}, caption: stderr.trim()}, {quoted: fkontak}); 20 | } 21 | } catch (e) { 22 | o = e.message; 23 | return m.reply(o) 24 | } 25 | }; 26 | handler.help = ['speedtest']; 27 | handler.tags = ['info']; 28 | handler.command = ['speedtest', 'stest', 'test']; 29 | handler.register = true; 30 | 31 | export default handler; 32 | -------------------------------------------------------------------------------- /plugins/info-totalplugins.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | let totalf = Object.values(global.plugins).filter( 3 | (v) => v.help && v.tags 4 | ).length; 5 | conn.reply(m.chat, `${emoji} Total de Funciones : ${totalf}`, m) 6 | } 7 | 8 | handler.help = ['totalfunciones'] 9 | handler.tags = ['main'] 10 | handler.command = ['totalfunciones', 'comandos', 'funciones'] 11 | handler.register = true 12 | 13 | export default handler 14 | -------------------------------------------------------------------------------- /plugins/main-afk.js: -------------------------------------------------------------------------------- 1 | export function before(m) { 2 | const user = global.db.data.users[m.sender]; 3 | if (user.afk > -1) { 4 | conn.reply(m.chat, `${emoji} Dejastes De Estar Inactivo\n${user.afkReason ? 'Motivo De La Inactividad: ' + user.afkReason : ''}\n\n*Tiempo Inactivo: ${(new Date - user.afk).toTimeString()}*`, m) 5 | user.afk = -1; 6 | user.afkReason = ''; 7 | } 8 | const jids = [...new Set([...(m.mentionedJid || []), ...(m.quoted ? [m.quoted.sender] : [])])]; 9 | for (const jid of jids) { 10 | const user = global.db.data.users[jid]; 11 | if (!user) { 12 | continue; 13 | } 14 | const afkTime = user.afk; 15 | if (!afkTime || afkTime < 0) { 16 | continue; 17 | } 18 | const reason = user.afkReason || ''; 19 | conn.reply(m.chat, `${emoji2} El Usuario Esta Inactivo No Lo Etiquetes.`, m) 20 | } 21 | return true; 22 | } 23 | -------------------------------------------------------------------------------- /plugins/main-runtime.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { usedPrefix, command }) => { 2 | let uptime = await process.uptime() 3 | let runtime = `${global.botname} 4 | 5 | ✰ Tiempo activo: ${rTime(uptime)}` 6 | conn.reply(m.chat, runtime, m) 7 | } 8 | handler.help = ['runtime'] 9 | handler.tags = ['main'] 10 | handler.command = ['runtime', 'uptime'] 11 | 12 | export default handler 13 | 14 | const dd = new Date(new Date + 3600000); 15 | const time = dd.toLocaleString('en-US', { 16 | hour: 'numeric', 17 | minute: 'numeric', 18 | second: 'numeric', 19 | hour12: true 20 | }); 21 | 22 | function rTime(seconds) { 23 | seconds = Number(seconds); 24 | var d = Math.floor(seconds / (3600 * 24)); 25 | var h = Math.floor((seconds % (3600 * 24)) / 3600); 26 | var m = Math.floor((seconds % 3600) / 60); 27 | var s = Math.floor(seconds % 60); 28 | var dDisplay = d > 0 ? d + (d == 1 ? " dia, " : " Dias, ") : ""; 29 | var hDisplay = h > 0 ? h + (h == 1 ? " hora, " : " Horas, ") : ""; 30 | var mDisplay = m > 0 ? m + (m == 1 ? " minuto, " : " Minutos, ") : ""; 31 | var sDisplay = s > 0 ? s + (s == 1 ? " segundo" : " Segundos") : ""; 32 | return dDisplay + hDisplay + mDisplay + sDisplay; 33 | }; 34 | -------------------------------------------------------------------------------- /plugins/main-script.js: -------------------------------------------------------------------------------- 1 | import moment from 'moment-timezone' 2 | import fetch from 'node-fetch' 3 | 4 | let handler = async (m, { conn, args }) => { 5 | try { 6 | let res = await fetch('https://api.github.com/repos/Brauliovh3/HATSUNE-MIKU') 7 | 8 | if (!res.ok) throw new Error('Error al obtener datos del repositorio virtual de Miku') 9 | let json = await res.json() 10 | 11 | let txt = `*🎤💙 R E P O S I T O R I O - V I R T U A L 💙🎤*\n\n` 12 | txt += `🎵 *Nombre del Proyecto* : ${json.name}\n` 13 | txt += `🌟 *Fanáticos Observando* : ${json.watchers_count}\n` 14 | txt += `💫 *Tamaño Virtual* : ${(json.size / 1024).toFixed(2)} MB\n` 15 | txt += `✨ *Última Actualización* : ${moment(json.updated_at).format('DD/MM/YY - HH:mm:ss')}\n` 16 | txt += `🎶 *Enlace del Escenario* : ${json.html_url}\n` 17 | txt += `💙 *Versiones Derivadas* : ${json.forks_count}\n` 18 | txt += `🎤 *Estrellas del Concierto* : ${json.stargazers_count}\n\n` 19 | txt += `> *🎵✨ ${dev} ✨🎵*` 20 | 21 | await conn.sendMessage(m.chat, {text: txt, contextInfo: { forwardingScore: 999, isForwarded: true, forwardedNewsletterMessageInfo: { newsletterName: channelRD.name, newsletterJid: channelRD.id, }, externalAdReply: { title: packname, body: dev, thumbnailUrl: 'https://files.catbox.moe/v2abfs.png', sourceUrl: redes, mediaType: 1, renderLargerThumbnail: true }}}, {quoted: m}) 22 | 23 | } catch { 24 | await conn.reply(m.chat, `🎵💙 ¡Gomen! Ocurrió un error al acceder al repositorio virtual de Miku. ✨`, m) 25 | await m.react(error) 26 | }} 27 | 28 | handler.help = ['script'] 29 | handler.tags = ['main'] 30 | handler.command = ['script', 'sc'] 31 | handler.register = true 32 | 33 | export default handler 34 | 35 | -------------------------------------------------------------------------------- /plugins/nsfw-penetrar.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, command, text }) => { 2 | if (!db.data.chats[m.chat].nsfw && m.isGroup) { 3 | return m.reply(`${emoji} El contenido *NSFW* está desactivado en este grupo.\n> Un administrador puede activarlo con el comando » *#nsfw on*`); 4 | } 5 | 6 | let user = m.mentionedJid[0] || (m.quoted ? m.quoted.sender : m.sender); 7 | let userName = user === m.sender ? `@${m.sender.split('@')[0]}` : `@${user.split('@')[0]}`; 8 | m.react('🔥'); 9 | 10 | const responseMessage = ` 11 | *TE HAN LLENADO LA CARA DE SEMEN POR PUTA Y ZORRA!* 12 | 13 | *Le ha metido el pene a* \`${text || userName}\` *con todo y condón hasta quedar seco, has dicho "por favor más duroooooo!, ahhhhhhh, ahhhhhh, hazme un hijo que sea igual de pitudo que tú!" mientras te penetraba y luego te ha dejado en silla de ruedas!* 14 | 15 | \`${text || userName}\` 16 | 💗 *YA TE HAN PENETRADO!*`; 17 | 18 | conn.reply(m.chat, responseMessage, null, { mentions: [user] }); 19 | } 20 | 21 | handler.help = ['penetrar @user']; 22 | handler.tags = ['nsfw']; 23 | handler.command = ['penetrar', 'penetrado']; 24 | handler.register = true; 25 | handler.group = true; 26 | handler.fail = null; 27 | 28 | export default handler; 29 | 30 | -------------------------------------------------------------------------------- /plugins/nsfw-rule34.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch'; 2 | const handler = async (m, { conn, args, usedPrefix }) => { 3 | if (!db.data.chats[m.chat].nsfw && m.isGroup) { 4 | return m.reply(`${emoji} El contenido *NSFW* está desactivado en este grupo.\n> Un administrador puede activarlo con el comando » *#nsfw on*`); 5 | } 6 | if (!args[0]) { 7 | await conn.reply(m.chat, `${emoji} Por favor, ingresa un tag para realizar la búsqueda.`, m); 8 | return; 9 | } 10 | const tag = args[0]; 11 | const url = `https://rule34.xxx/index.php?page=dapi&s=post&q=index&json=1&tags=${tag}`; 12 | try { 13 | const response = await fetch(url); 14 | const data = await response.json(); 15 | if (!data || data.length === 0) { 16 | await conn.reply(m.chat, `${emoji2} No hubo resultados para *${tag}*`, m); 17 | return; 18 | } 19 | const randomIndex = Math.floor(Math.random() * data.length); 20 | const randomImage = data[randomIndex]; 21 | const imageUrl = randomImage.file_url; 22 | await conn.sendMessage(m.chat, { image: { url: imageUrl }, caption: `${emoji} Resultados para » *${tag}*`, mentions: [m.sender] }); 23 | } catch (error) { 24 | console.error(error); 25 | await m.reply(`${emoji} Ocurrió un error.`); 26 | } 27 | }; 28 | handler.help = ['r34 ', 'rule34 ']; 29 | handler.command = ['r34', 'rule34']; 30 | handler.tags = ['nsfw']; 31 | 32 | export default handler; 33 | 34 | -------------------------------------------------------------------------------- /plugins/owner-adddelowner.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { conn, text, args, usedPrefix, command }) => { 2 | const why = `${emoji} Por favo, menciona a un usuario pará agregar o quitar como owner.`; 3 | const who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : text ? text.replace(/[^0-9]/g, '') + '@s.whatsapp.net' : false; 4 | if (!who) return conn.reply(m.chat, why, m, {mentions: [m.sender]}); 5 | switch (command) { 6 | case 'addowner': 7 | const nuevoNumero = who; 8 | global.owner.push([nuevoNumero]); 9 | await conn.reply(m.chat, `${emoji} Listo Ya Está En La Lista De Owner El Usuario.`, m); 10 | break; 11 | case 'delowner': 12 | const numeroAEliminar = who; 13 | const index = global.owner.findIndex(owner => owner[0] === numeroAEliminar); 14 | if (index !== -1) { 15 | global.owner.splice(index, 1); 16 | await conn.reply(m.chat, `${emoji2} Eliminado El Numero de la lista de owner correctamente.`, m); 17 | } else { 18 | await conn.reply(m.chat, `${emoji2} El Numero No Está En La Lista De Owners.`, m); 19 | } 20 | break; 21 | } 22 | }; 23 | handler.command = ['addowner', 'delowner'] 24 | handler.rowner = true; 25 | export default handler; 26 | -------------------------------------------------------------------------------- /plugins/owner-anadirXP.js: -------------------------------------------------------------------------------- 1 | import db from '../lib/database.js'; 2 | import MessageType from '@whiskeysockets/baileys'; 3 | 4 | let pajak = 0; 5 | 6 | const handler = async (m, { conn, text }) => { 7 | let who; 8 | if (m.isGroup) { 9 | if (m.mentionedJid.length > 0) { 10 | who = m.mentionedJid[0]; 11 | } else { 12 | const quoted = m.quoted ? m.quoted.sender : null; 13 | who = quoted ? quoted : m.chat; 14 | } 15 | } else { 16 | who = m.chat; 17 | } 18 | 19 | if (!who) return m.reply(`${emoji} Por favor, menciona al usuario o cita un mensaje.`); 20 | 21 | const txt = text.replace('@' + who.split`@`[0], '').trim(); 22 | if (!txt) return m.reply(`${emoji} Ingresa la cantidad de experiencia (XP) que deseas añadir.`); 23 | if (isNaN(txt)) return m.reply(`${emoji2} Solo números son permitidos.`); 24 | 25 | const xp = parseInt(txt); 26 | let exp = xp; 27 | const pjk = Math.ceil(xp * pajak); 28 | exp += pjk; 29 | 30 | if (exp < 1) return m.reply(`${emoji} El mínimo de experiencia (XP) para añadir es *1*.`); 31 | 32 | const users = global.db.data.users; 33 | users[who].exp += xp; 34 | 35 | m.reply(`✨ XP Añadido: *${xp}* \n@${who.split('@')[0]}, recibiste ${xp} XP`, null, { mentions: [who] }); 36 | }; 37 | 38 | handler.command = ['añadirxp', 'addexp']; 39 | handler.rowner = true; 40 | 41 | export default handler; 42 | 43 | -------------------------------------------------------------------------------- /plugins/owner-autoadmin.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn, isAdmin, groupMetadata }) => { 2 | if (isAdmin) return m.reply(`${emoji} Tu ya eres admin.`); 3 | try { 4 | await conn.groupParticipantsUpdate(m.chat, [m.sender], 'promote'); 5 | await m.react(done) 6 | m.reply(`${emoji} Ya te di admin.`); 7 | } catch { 8 | m.reply(`${msm} Ocurrio un error.`); 9 | } 10 | }; 11 | handler.tags = ['owner']; 12 | handler.help = ['autoadmin']; 13 | handler.command = ['autoadmin']; 14 | handler.rowner = true; 15 | handler.group = true; 16 | handler.botAdmin = true; 17 | 18 | export default handler; 19 | 20 | -------------------------------------------------------------------------------- /plugins/owner-backup.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | 3 | let handler = async (m, { conn, text, usedPrefix, command }) => { 4 | await m.reply(`${emoji} Enviando base de datos de ${packname}...`) 5 | try { 6 | await m.react(rwait) 7 | let d = new Date 8 | let date = d.toLocaleDateString('es', { day: 'numeric', month: 'long', year: 'numeric' }) 9 | let database = await fs.readFileSync(`./src/database/database.json`) 10 | let creds = await fs.readFileSync(`./Sessions/creds.json`) 11 | await conn.reply(m.chat, `*• Fecha:* ${date}`, m) 12 | await conn.sendMessage(m.sender, {document: database, mimetype: 'application/json', fileName: `database.json`}, { quoted: fkontak }) 13 | await m.react(done) 14 | await conn.sendMessage(m.sender, {document: creds, mimetype: 'application/json', fileName: `creds.json`}, { quoted: fkontak }) 15 | await m.react(done) 16 | } catch { 17 | await m.react(error) 18 | conn.reply(m.chat, `${msm} Ocurrió un error.`, m)}} 19 | 20 | handler.help = ['copia'] 21 | handler.tags = ['owner'] 22 | handler.command = ['backup', 'respaldo', 'copia'] 23 | handler.rowner = true 24 | 25 | export default handler 26 | 27 | -------------------------------------------------------------------------------- /plugins/owner-banlist.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn, isOwner}) => { 2 | const chats = Object.entries(global.db.data.chats).filter((chat) => chat[1].isBanned); 3 | const users = Object.entries(global.db.data.users).filter((user) => user[1].banned); 4 | const caption = ` 5 | ┌〔 Usuarios - Baneados 〕 6 | ├ Total : ${users.length} ${users ? '\n' + users.map(([jid], i) => ` 7 | ├ ${isOwner ? '@' + jid.split`@`[0] : jid}`.trim()).join('\n') : '├'} 8 | └──── 9 | 10 | ┌〔 Chats - Baneados 〕 11 | ├ Total : ${chats.length} ${chats ? '\n' + chats.map(([jid], i) => ` 12 | ├ ${isOwner ? '@' + jid.split`@`[0] : jid}`.trim()).join('\n') : '├'} 13 | └──── 14 | `.trim(); 15 | m.reply(caption, null, {mentions: conn.parseMention(caption)}); 16 | }; 17 | handler.command = ['banlist','listban']; 18 | handler.rowner = true; 19 | 20 | export default handler; 21 | 22 | -------------------------------------------------------------------------------- /plugins/owner-bcgc.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn, isROwner, text}) => { 2 | const delay = (time) => new Promise((res) => setTimeout(res, time)); 3 | const getGroups = await conn.groupFetchAllParticipating(); 4 | const groups = Object.entries(getGroups).slice(0).map((entry) => entry[1]); 5 | const anu = groups.map((v) => v.id); 6 | const pesan = m.quoted && m.quoted.text ? m.quoted.text : text; 7 | if (!pesan) throw `${emoji} Te faltó el texto.`; 8 | for (const i of anu) { 9 | await delay(500); 10 | conn.relayMessage(i, 11 | {liveLocationMessage: { 12 | degreesLatitude: 35.685506276233525, 13 | degreesLongitude: 139.75270667105852, 14 | accuracyInMeters: 0, 15 | degreesClockwiseFromMagneticNorth: 2, 16 | caption: '⭐️ M E N S A J E ⭐️\n\n' + pesan + `${packname}`, 17 | sequenceNumber: 2, 18 | timeOffset: 3, 19 | contextInfo: m, 20 | }}, {}).catch((_) => _); 21 | } 22 | m.reply(`${emoji} *𝖬𝖾𝗇𝗌𝖺𝗃𝖾 𝖤𝗇𝗏𝗂𝖺𝖽𝗈 𝖠:* ${anu.length} *Grupo/S*`); 23 | }; 24 | handler.help = ['broadcastgroup', 'bcgc']; 25 | handler.tags = ['owner']; 26 | handler.command = ['bcgc']; 27 | handler.owner = true; 28 | 29 | export default handler; 30 | -------------------------------------------------------------------------------- /plugins/owner-block-unblock.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {text, conn, usedPrefix, command}) => { 2 | const why = `${emoji} *Mal Uso Del Comando, Uso Correcto:*\n*${usedPrefix + command} @${m.sender.split('@')[0]}*`; 3 | const who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : text ? text.replace(/[^0-9]/g, '') + '@s.whatsapp.net' : false; 4 | if (!who) conn.reply(m.chat, why, m, {mentions: [m.sender]}); 5 | const res = []; 6 | switch (command) { 7 | case 'blok': case 'block': 8 | if (who) { 9 | await conn.updateBlockStatus(who, 'block').then(() => { 10 | res.push(who); 11 | }); 12 | } else conn.reply(m.chat, why, m, {mentions: [m.sender]}); 13 | break; 14 | case 'unblok': case 'unblock': 15 | if (who) { 16 | await conn.updateBlockStatus(who, 'unblock').then(() => { 17 | res.push(who); 18 | }); 19 | } else conn.reply(m.chat, why, m, {mentions: [m.sender]}); 20 | break; 21 | } 22 | if (res[0]) conn.reply(m.chat, `${done} *Exito Se Uso El Comando ${command} Para El Usuario ${res ? `${res.map((v) => '@' + v.split('@')[0])}` : ''}*`, m, {mentions: res}); 23 | }; 24 | handler.command = ['block','unblock']; 25 | handler.rowner = true; 26 | 27 | export default handler; 28 | 29 | -------------------------------------------------------------------------------- /plugins/owner-blocklist.js: -------------------------------------------------------------------------------- 1 | /* Creado por https://github.com/FG98F */ 2 | 3 | const handler = async (m, {conn}) => { 4 | await conn.fetchBlocklist().then(async (data) => { 5 | let txt = `*≡ Lista de bloqueados*\n\n*Total :* ${data.length}\n\n┌─⊷\n`; 6 | for (const i of data) { 7 | txt += `▢ @${i.split('@')[0]}\n`; 8 | } 9 | txt += '└───────────'; 10 | return conn.reply(m.chat, txt, m, {mentions: await conn.parseMention(txt)}); 11 | }).catch((err) => { 12 | console.log(err); 13 | throw 'No hay números bloqueados'; 14 | }); 15 | }; 16 | handler.help = ['blocklist']; 17 | handler.tags = ['main']; 18 | handler.command = ['blocklist', 'listblock']; 19 | handler.rowner = true; 20 | 21 | export default handler; 22 | 23 | -------------------------------------------------------------------------------- /plugins/owner-chetar.js: -------------------------------------------------------------------------------- 1 | import MessageType from '@whiskeysockets/baileys'; 2 | 3 | let handler = async (m, { conn, text }) => { 4 | let who; 5 | 6 | if (text) { 7 | who = text.trim(); 8 | if (!who.endsWith('@s.whatsapp.net')) { 9 | who += '@s.whatsapp.net'; 10 | } 11 | } 12 | 13 | if (m.isGroup) { 14 | if (!who && m.mentionedJid.length > 0) { 15 | who = m.mentionedJid[0]; 16 | } else if (!who && m.replyMessage && m.replyMessage.sender) { 17 | who = m.replyMessage.sender; 18 | } 19 | } 20 | 21 | if (!who) { 22 | who = m.sender; 23 | } 24 | 25 | let users = global.db.data.users; 26 | 27 | if (!users[who]) { 28 | users[who] = { coin: 0, exp: 0, level: 0 }; 29 | } 30 | 31 | users[who].coin = Number.MAX_SAFE_INTEGER; 32 | users[who].exp = Number.MAX_SAFE_INTEGER; 33 | users[who].level = Number.MAX_SAFE_INTEGER; 34 | 35 | await m.reply( 36 | `☁️ *¡Usuario chetado con éxito!*\n\n` + 37 | `👤 Usuario: @${who.split`@`[0]}\n` + 38 | `💸 ${moneda}: *${users[who].coin.toLocaleString()}*\n` + 39 | `✨ Experiencia: *${users[who].exp.toLocaleString()}*\n` + 40 | `🌟 Nivel: *${users[who].level.toLocaleString()}*`, 41 | null, 42 | { mentions: [who] } 43 | ); 44 | }; 45 | 46 | handler.help = ['chetar *@user*', 'chetar **']; 47 | handler.tags = ['owner']; 48 | handler.command = ['chetar']; 49 | handler.register = true; 50 | handler.rowner = true; 51 | 52 | export default handler; 53 | -------------------------------------------------------------------------------- /plugins/owner-cleanfiles.js: -------------------------------------------------------------------------------- 1 | import { promises as _0xfs } from 'fs'; 2 | import path from 'path'; 3 | 4 | const _0xdirname = path.resolve(); 5 | 6 | const _0xcleanTempFiles = async () => { 7 | const _0xdir = path.join(_0xdirname, 'plugins'); 8 | const _0xfiles = await _0xfs.readdir(_0xdir); 9 | 10 | const _0xtempImages = _0xfiles.filter(_0xfile => _0xfile.startsWith('temp_image_') && _0xfile.endsWith('.png')); 11 | const _0xtempPDFs = _0xfiles.filter(_0xfile => _0xfile.startsWith('manga_') && _0xfile.endsWith('.pdf')); 12 | 13 | const _0xallTempFiles = [..._0xtempImages, ..._0xtempPDFs]; 14 | 15 | if (_0xallTempFiles.length === 0) { 16 | return `${emoji2} No se encontraron archivos temporales para eliminar.`; 17 | } 18 | 19 | await Promise.all(_0xallTempFiles.map(async _0xfile => { 20 | const _0xfilePath = path.join(_0xdir, _0xfile); 21 | await _0xfs.unlink(_0xfilePath); 22 | })); 23 | 24 | return `${emoji} Se eliminaron ${_0xallTempFiles.length} archivos temporales correctamente.`; 25 | }; 26 | 27 | let _0xhandler = async (m, { conn, isOwner }) => { 28 | if (!isOwner) return conn.reply(m.chat, `${emoji} Solo el propietario puede usar este comando.`, m); 29 | 30 | try { 31 | const _0xresult = await _0xcleanTempFiles(); 32 | await conn.reply(m.chat, _0xresult, m); 33 | } catch (_0xerror) { 34 | await conn.reply(m.chat, `${msm} Error: ${_0xerror.message}`, m); 35 | } 36 | }; 37 | 38 | _0xhandler.help = ['cleanfiles'].map(v => v + " *"); 39 | _0xhandler.tags = ['owner']; 40 | _0xhandler.command = ['cleanfiles']; 41 | 42 | export default _0xhandler; 43 | 44 | -------------------------------------------------------------------------------- /plugins/owner-cleartmp.js: -------------------------------------------------------------------------------- 1 | import { tmpdir } from 'os' 2 | import path, { join } from 'path' 3 | import { 4 | readdirSync, 5 | statSync, 6 | unlinkSync, 7 | existsSync, 8 | readFileSync, 9 | watch 10 | } from 'fs' 11 | let handler = async (m, { conn, usedPrefix: _p, __dirname, args }) => { 12 | 13 | conn.reply(m.chat, `${emoji} Realizado, ya se ha eliminado los archivos de la carpeta tmp`, m) 14 | 15 | const tmp = [tmpdir(), join(__dirname, '../tmp')] 16 | const filename = [] 17 | tmp.forEach(dirname => readdirSync(dirname).forEach(file => filename.push(join(dirname, file)))) 18 | return filename.map(file => { 19 | const stats = statSync(file) 20 | unlinkSync(file) 21 | })} 22 | 23 | handler.help = ['cleartmp'] 24 | handler.tags = ['owner'] 25 | handler.command = ['cleartmp', 'borrartmp', 'borrarcarpetatmp', 'vaciartmp'] 26 | handler.rowner = true 27 | 28 | export default handler 29 | 30 | -------------------------------------------------------------------------------- /plugins/owner-creargc.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text }) => { 2 | if (!text) return m.reply(`${emoji} Ingresa un nombre para el grupo.`) 3 | try{ 4 | m.reply(`${emoji2} Creando grupo...`) 5 | let group = await conn.groupCreate(text, [m.sender]) 6 | let link = await conn.groupInviteCode(group.gid) 7 | m.reply('https://chat.whatsapp.com/' + url) 8 | } catch (e) { 9 | m.reply(`${msm} Ocurrió un error.`) 10 | } 11 | } 12 | handler.help = ['grupocrear '] 13 | handler.tags = ['mods'] 14 | handler.command = ['creargc', 'newgc', 'creargrupo', 'grupocrear'] 15 | handler.rowner = true 16 | handler.register = true 17 | 18 | export default handler 19 | -------------------------------------------------------------------------------- /plugins/owner-deletefile.js: -------------------------------------------------------------------------------- 1 | import { tmpdir } from 'os' 2 | import path from 'path' 3 | import { 4 | readdirSync, 5 | statSync, 6 | unlinkSync, 7 | existsSync, 8 | readFileSync, 9 | watch 10 | } from 'fs' 11 | 12 | let handler = async (m, { conn, usedPrefix: _p, __dirname, args, text }) => { 13 | if (!text) return conn.reply(m.chat, `${emoji} Ingresa la ruta y el nombre del archivo que deseas eliminar.`, m) 14 | 15 | const file = text.trim() 16 | if (!existsSync(file)) return conn.reply(m.chat, `${emoji2} Archivo no encontrado.`, m) 17 | 18 | unlinkSync(file) 19 | conn.reply(m.chat, `${done} El archivo *${file}* ha sido eliminado con éxito.`, m) 20 | } 21 | handler.tags = ['owner'] 22 | handler.help = ['deletefile'] 23 | handler.command = ['deletefile'] 24 | handler.rowner = true 25 | 26 | export default handler 27 | -------------------------------------------------------------------------------- /plugins/owner-exec2.js: -------------------------------------------------------------------------------- 1 | import cp, {exec as _exec} from 'child_process'; 2 | import {promisify} from 'util'; 3 | const exec = promisify(_exec).bind(cp); 4 | const handler = async (m, {conn, isOwner, command, text, usedPrefix, args, isROwner}) => { 5 | if (!isROwner) return; 6 | if (global.conn.user.jid != conn.user.jid) return; 7 | m.reply(`${emoji} *Ejecutando...*`); 8 | let o; 9 | try { 10 | o = await exec(command.trimStart() + ' ' + text.trimEnd()); 11 | } catch (e) { 12 | o = e; 13 | } finally { 14 | const {stdout, stderr} = o; 15 | if (stdout.trim()) m.reply(stdout); 16 | if (stderr.trim()) m.reply(stderr); 17 | } 18 | }; 19 | handler.help = ['$'] 20 | handler.tags = ['owner'] 21 | handler.customPrefix = ['$'] 22 | handler.command = new RegExp 23 | handler.rowner = true 24 | 25 | export default handler 26 | -------------------------------------------------------------------------------- /plugins/owner-get.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | import { format } from 'util' 3 | 4 | let handler = async (m, { conn, text }) => { 5 | if (m.fromMe) return 6 | if (!/^https?:\/\//.test(text)) return m.reply(`❀ Por favor, ingresa la *url* de la pagina.`) 7 | let url = text 8 | await m.react('🕒') 9 | let res = await fetch(url) 10 | if (res.headers.get('content-length') > 100 * 1024 * 1024 * 1024) { 11 | throw `Content-Length: ${res.headers.get('content-length')}` 12 | } 13 | if (!/text|json/.test(res.headers.get('content-type'))) return conn.sendFile(m.chat, url, 'file', text, m) 14 | let txt = await res.buffer() 15 | try { 16 | txt = format(JSON.parse(txt + '')) 17 | } catch (e) { 18 | txt = txt + '' 19 | } finally { 20 | m.reply(txt.slice(0, 65536) + '') 21 | await m.react('✔️') 22 | }} 23 | 24 | handler.help = ['get'] 25 | handler.tags = ['tools'] 26 | handler.command = ['fetch', 'get'] 27 | handler.rowner = true 28 | 29 | export default handler 30 | 31 | -------------------------------------------------------------------------------- /plugins/owner-join.js: -------------------------------------------------------------------------------- 1 | let linkRegex = /https:\/\/chat\.whatsapp\.com\/([0-9A-Za-z]{20,24})/i; 2 | 3 | let handler = async (m, { conn, text, isOwner }) => { 4 | if (!text) return m.reply(`${emoji} Debes enviar una invitacion para que *${botname}* se una al grupo.`); 5 | 6 | let [_, code] = text.match(linkRegex) || []; 7 | 8 | if (!code) return m.reply(`${emoji2} Enlace de invitación no válido.`); 9 | 10 | if (isOwner) { 11 | await conn.groupAcceptInvite(code) 12 | .then(res => m.reply(`${emoji} Me he unido exitosamente al grupo.`)) 13 | .catch(err => m.reply(`${msm} Error al unirme al grupo.`)); 14 | } else { 15 | let message = `${emoji} Invitación a un grupo:\n${text}\n\nPor: @${m.sender.split('@')[0]}`; 16 | await conn.sendMessage(`${suittag}` + '@s.whatsapp.net', { text: message, mentions: [m.sender] }, { quoted: m }); 17 | m.reply(`${emoji} El link del grupo ha sido enviado, gracias por tu invitacion. ฅ^•ﻌ•^ฅ`); 18 | } 19 | }; 20 | 21 | handler.help = ['invite']; 22 | handler.tags = ['owner', 'tools']; 23 | handler.command = ['invite', 'join']; 24 | 25 | export default handler; 26 | -------------------------------------------------------------------------------- /plugins/owner-leavegc.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, command }) => { 2 | let id = text ? text : m.chat 3 | let chat = global.db.data.chats[m.chat] 4 | chat.welcome = false 5 | await conn.reply(id, `${emoji} Adios a todos, el Bot se despide! (≧ω≦)ゞ`) 6 | await conn.groupLeave(id) 7 | try { 8 | chat.welcome = true 9 | } catch (e) { 10 | await m.reply(`${fg}`) 11 | return console.log(e) 12 | }} 13 | handler.command = ['salir','leavegc','salirdelgrupo','leave'] 14 | handler.group = true 15 | handler.rowner = true 16 | handler.botAdmin = true 17 | 18 | 19 | export default handler 20 | 21 | -------------------------------------------------------------------------------- /plugins/owner-let.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { conn, command, participants, text }) => { 2 | let users = participants.map(u => u.id).filter(v => v !== conn.user.jid) 3 | let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender 4 | 5 | if (!text) throw `${emoji} Ingresa un texto para dejarlo después de 2 horas.*`; 6 | m.reply(`${emoji} El texto será enviado después del tiempo estipulado.`); 7 | 8 | function espera() { 9 | conn.reply(m.chat, text, null, { forward: text.fakeObj, mentions: users } ) 10 | } 11 | setTimeout(espera, 720000); 12 | 13 | }; 14 | handler.command = ['let']; 15 | handler.rowner = true; 16 | 17 | export default handler; 18 | -------------------------------------------------------------------------------- /plugins/owner-prefix.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn, text, usedPrefix, command}) => { 2 | if (!text) throw `${emoji} No Se Encontró Ningun Prefijo, Por Favor Escriba Un Prefijo.\n> *Ejemplo: ${usedPrefix + command} !*`; 3 | global.prefix = new RegExp('^[' + (text || global.opts['prefix'] || '‎xzXZ/i!#$%+£¢€¥^°=¶∆×÷π√✓©®:;?&.\\-').replace(/[|\\{}()[\]^$+*?.\-\^]/g, '\\$&') + ']'); 4 | // await m.reply(`*❀ Prefijo Actualizado Con Éxito, Prefijo Actual: ${text}*`); 5 | conn.fakeReply(m.chat, `${done} *Prefijo Actualizado Con Éxito, Prefijo Actual: ${text}*`, '0@s.whatsapp.net', '✨ PREFIJO NUEVO ✨') 6 | }; 7 | handler.help = ['prefix'].map((v) => v + ' [prefix]'); 8 | handler.tags = ['owner']; 9 | handler.command = ['prefix']; 10 | handler.rowner = true; 11 | 12 | export default handler; 13 | -------------------------------------------------------------------------------- /plugins/owner-quitarXP.js: -------------------------------------------------------------------------------- 1 | import db from '../lib/database.js'; 2 | import MessageType from '@whiskeysockets/baileys'; 3 | 4 | let handler = async (m, { conn, text }) => { 5 | let who; 6 | if (m.isGroup) { 7 | if (m.mentionedJid.length > 0) { 8 | who = m.mentionedJid[0]; 9 | } else { 10 | const quoted = m.quoted ? m.quoted.sender : null; 11 | who = quoted ? quoted : m.chat; 12 | } 13 | } else { 14 | who = m.chat; 15 | } 16 | 17 | if (!who) return m.reply(`${emoji} Por favor, menciona al usuario o cita un mensaje.`); 18 | 19 | let txt = text.replace('@' + who.split`@`[0], '').trim(); 20 | let dmt; 21 | 22 | if (txt.toLowerCase() === 'all') { 23 | dmt = global.db.data.users[who].exp; 24 | } else { 25 | if (!txt) return m.reply(`${emoji2} Por favor, ingresa la cantidad de experiencia (XP) que deseas quitar.`); 26 | if (isNaN(txt)) return m.reply(`${emoji} Solo números son permitidos.`); 27 | 28 | dmt = parseInt(txt); 29 | } 30 | 31 | let users = global.db.data.users; 32 | 33 | if (users[who].exp < dmt) { 34 | return m.reply(`${emoji2} El usuario no tiene suficiente XP para quitar. Tiene ${users[who].exp} XP.`); 35 | } 36 | 37 | users[who].exp -= dmt; 38 | 39 | m.reply(`✨ *Quitado:* 40 | » ${dmt} \n@${who.split('@')[0]}, te han quitado ${dmt} XP`, null, { mentions: [who] }); 41 | }; 42 | 43 | handler.help = ['quitarxp *<@user>*']; 44 | handler.tags = ['owner']; 45 | handler.command = ['quitarxp', 'removexp']; 46 | handler.rowner = true; 47 | 48 | export default handler; 49 | 50 | -------------------------------------------------------------------------------- /plugins/owner-resetprefix.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn}) => { 2 | global.prefix = new RegExp('^[' + (opts['prefix'] || '‎xzXZ/i!#$%+£¢€¥^°=¶∆×÷π√✓©®:;?&.\\-').replace(/[|\\{}()[\]^$+*?.\-\^]/g, '\\$&') + ']'); 3 | //await m.reply(`✅️ *Prefijo Restablecido Con Éxito!*`); 4 | conn.fakeReply(m.chat, `${emoji} *Prefijo Restablecido Con Éxito!*`, '0@s.whatsapp.net', '✨ PREFIJO RESTABLECIDO ✨') 5 | }; 6 | handler.help = ['resetprefix']; 7 | handler.tags = ['owner']; 8 | handler.command = ['resetprefix']; 9 | handler.rowner = true; 10 | 11 | export default handler; 12 | -------------------------------------------------------------------------------- /plugins/owner-restart.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, usedPrefix, command }) => { 2 | 3 | try { 4 | m.reply('💙 Reiniciando el sistema virtual de Miku... ✨\n\n🎵 ¡El concierto continuará en un momento! 💫') 5 | setTimeout(() => { 6 | process.exit(0) 7 | }, 3000) 8 | } catch (error) { 9 | console.log(error) 10 | conn.reply(m.chat, `${error}`, m) 11 | } 12 | } 13 | 14 | handler.help = ['restart'] 15 | handler.tags = ['owner'] 16 | handler.command = ['restart', 'reiniciar'] 17 | handler.rowner = true 18 | 19 | export default handler 20 | -------------------------------------------------------------------------------- /plugins/owner-reunion.js: -------------------------------------------------------------------------------- 1 | let handler = async(m, { conn, command, text }) => { 2 | if (!text) return m.reply(`${emoji} Por favor, ingresa el motivo de la reunión.`) 3 | if (text.length < 10) return m.reply(`${emoji2} Por favor, ingresa al menos 10 caracteres.`) 4 | 5 | let texto = `${emoji2} El Owner @${m.sender.split`@`[0]} ha empezado una reunión. Entra lo más pronto al grupo de staff...\n*➪ Motivo: ${text}*` 6 | m.reply(`${emoji} Enviando mensaje de reunión a todos los owners.`) 7 | 8 | let mentions = [m.sender] 9 | 10 | for (let [jid] of global.owner.filter(([number, _, isDeveloper]) => isDeveloper && number)) { 11 | let data = (await conn.onWhatsApp(jid))[0] || {} 12 | if (data.exists) { 13 | await conn.sendMessage(data.jid, { text: texto, mentions }) 14 | } 15 | } 16 | } 17 | 18 | handler.tags = ['owner'] 19 | handler.command = handler.help = ['reunion', 'meeting'] 20 | handler.rowner = true 21 | 22 | export default handler 23 | -------------------------------------------------------------------------------- /plugins/owner-savefile.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | let handler = async (m, { text, usedPrefix, command }) => { 3 | if (!text) return m.reply(`${emoji} Ingresa la Ruta y el nombre del Archivo junto al comando.`) 4 | try { 5 | if (!m.quoted.text) return m.reply(`${emoji2} Responde al mensaje.`) 6 | let path = `${text}.js` 7 | await fs.writeFileSync(path, m.quoted.text) 8 | m.reply(`${emoji} Guardado en *${path}*.`) 9 | } catch { 10 | await m.reply(`Responde al mensaje.`) 11 | }} 12 | handler.tags = ['owner'] 13 | handler.help = ["savefile "] 14 | handler.command = ["savefile", "savejs", "savecmd"] 15 | handler.rowner = true 16 | 17 | export default handler 18 | -------------------------------------------------------------------------------- /plugins/owner-saveplugin.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | 3 | let handler = async (m, { text, usedPrefix, command }) => { 4 | if (!text) { 5 | return m.reply(`🎤💙 Por favor, ingresa el nombre del plugin virtual que quieres guardar ✨`); 6 | } 7 | 8 | if (!m.quoted || !m.quoted.text) { 9 | return m.reply(`🎵💫 Responde al mensaje con el contenido del plugin musical para guardarlo 💫🎵`); 10 | } 11 | 12 | const ruta = `plugins/${text}.js`; 13 | 14 | try { 15 | await fs.writeFileSync(ruta, m.quoted.text); 16 | m.reply(`🎶✨ Guardando plugin virtual en ${ruta} 🌟`); 17 | } catch (error) { 18 | m.reply(`🎤💙 ¡Gomen! Ocurrió un error al guardar el plugin virtual: ${error.message} ✨`); 19 | } 20 | }; 21 | 22 | handler.help = ['saveplugin']; 23 | handler.tags = ['owner']; 24 | handler.command = ["saveplugin"]; 25 | handler.owner = true; 26 | 27 | export default handler; 28 | -------------------------------------------------------------------------------- /plugins/owner-setcmd.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { text, usedPrefix, command }) => { 2 | global.db.data.sticker = global.db.data.sticker || {} 3 | if (!m.quoted) return conn.reply(m.chat, `${emoji} Responda a un sticker para agregar un comando.`, m) 4 | if (!m.quoted.fileSha256) return conn.reply(m.chat, `${emoji} Responda a un sticker para agregar un comando.`, m) 5 | if (!text) return conn.reply(m.chat, `${emoji2} Ingresa el nombre del comamdo.`, m) 6 | try { 7 | let sticker = global.db.data.sticker 8 | let hash = m.quoted.fileSha256.toString('base64') 9 | if (sticker[hash] && sticker[hash].locked) return conn.reply(m.chat, `${emoji2} No tienes permiso para cambiar este comando de Sticker.`, m) 10 | sticker[hash] = { 11 | text, 12 | mentionedJid: m.mentionedJid, 13 | creator: m.sender, 14 | at: + new Date, 15 | locked: false, 16 | } 17 | await conn.reply(m.chat, `${emoji} Comando guardado con exito.`, m) 18 | await m.react('✅') 19 | } catch { 20 | await m.react('✖️') 21 | }} 22 | handler.help = ['cmd'].map(v => 'set' + v + ' **') 23 | handler.tags = ['owner'] 24 | handler.command = ['setcmd', 'addcmd', 'cmdadd', 'cmdset'] 25 | handler.owner = true 26 | 27 | export default handler 28 | -------------------------------------------------------------------------------- /plugins/owner-setcmd_del.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn, usedPrefix, text, command}) => { 2 | let hash = text; 3 | if (m.quoted && m.quoted.fileSha256) hash = m.quoted.fileSha256.toString('hex'); 4 | if (!hash) throw `${emoji} Solo se pueden asignar textos o comandos a stickers o imagenes, para obtener el codigo asignado use el comando: ${usedPrefix}listcmd`; 5 | const sticker = global.db.data.sticker; 6 | if (sticker[hash] && sticker[hash].locked) throw `${emoji} Solo el *owner* puede realizar la eliminacion.`; 7 | delete sticker[hash]; 8 | m.reply(`${emoji} El texto/comando asignado al sticker/imagen fue eliminado de la base de datos correctamente.`); 9 | }; 10 | handler.command = ['delcmd']; 11 | handler.rowner = true; 12 | 13 | export default handler; 14 | -------------------------------------------------------------------------------- /plugins/owner-setcmd_list.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn}) => { 2 | conn.reply(m.chat, ` 3 | *< Lista de Comandos / Textos Asignados >* 4 | 5 | ${Object.entries(global.db.data.sticker).map(([key, value], index) => `*${index + 1}.-*\n*Codigo:* ${value.locked ? `*(Bloqueado)* ${key}` : key}\n*Comando/Texto* ${value.text}`).join('\n\n')} 6 | `.trim(), null, {mentions: Object.values(global.db.data.sticker).map((x) => x.mentionedJid).reduce((a, b) => [...a, ...b], [])}); 7 | }; 8 | handler.command = ['listcmd', 'cmdlist']; 9 | handler.rowner = true; 10 | 11 | export default handler; 12 | -------------------------------------------------------------------------------- /plugins/owner-setimage.js: -------------------------------------------------------------------------------- 1 | import Jimp from 'jimp'; 2 | 3 | let handler = async (m, { conn }) => { 4 | if (!m.quoted) return conn.reply(m.chat, `${emoji} Por favor, responde a una imagen para cambiar la foto de perfil.`, m); 5 | 6 | try { 7 | const media = await m.quoted.download(); 8 | if (!media) return conn.reply(m.chat, `${emoji2} No se pudo obtener la imagen.`, m); 9 | 10 | const image = await Jimp.read(media); 11 | const buffer = await image.getBufferAsync(Jimp.MIME_JPEG); 12 | 13 | await conn.updateProfilePicture(conn.user.jid, buffer); 14 | return conn.reply(m.chat, `${emoji} Foto de perfil cambiada con éxito.`, m); 15 | } catch (e) { 16 | console.error(e); 17 | return conn.reply(m.chat, `${msm} Ocurrió un error al intentar cambiar la foto de perfil.`, m); 18 | } 19 | }; 20 | 21 | handler.help = ['setimage']; 22 | handler.tags = ['owner']; 23 | handler.command = ['setpfp', 'setimage']; 24 | handler.rowner = true; 25 | 26 | export default handler; 27 | -------------------------------------------------------------------------------- /plugins/owner-setmoneda.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, isRowner }) => { 2 | if (!text) return m.reply(`${emoji} Por favor, proporciona un nombre para el bot.\n> Ejemplo: #setmoneda Coins`); 3 | 4 | global.moneda = text.trim(); 5 | 6 | m.reply(`${emoji} La moneda del bot ha sido cambiado a: ${global.moneda}`); 7 | }; 8 | 9 | handler.help = ['setmoneda']; 10 | handler.tags = ['tools']; 11 | handler.command = ['setmoneda']; 12 | handler.rowner = true; 13 | 14 | export default handler; 15 | -------------------------------------------------------------------------------- /plugins/owner-setname.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, isRowner }) => { 2 | if (!text) return m.reply(`${emoji} Por favor, proporciona un nombre para el bot.\n> Ejemplo: #setname Nombre/Texto`); 3 | 4 | const names = text.split('/'); 5 | if (names.length !== 2) return m.reply(`${emoji} Por favor, proporciona ambos nombres separados por una barra (/) en el formato: nombre1/nombre2.`); 6 | 7 | global.botname = names[0].trim(); 8 | const texto1bot = ` • Powered By ${etiqueta}`; 9 | global.textbot = `${names[1].trim()}${texto1bot}`; 10 | 11 | m.reply(`${emoji} El nombre del bot ha sido cambiado a: ${global.botname}\n\n> ${emoji2} El texto del bot ha sido cambiado a: ${global.textbot}`); 12 | }; 13 | 14 | handler.help = ['setname']; 15 | handler.tags = ['tools']; 16 | handler.command = ['setname']; 17 | handler.rowner = true; 18 | 19 | export default handler; 20 | 21 | -------------------------------------------------------------------------------- /plugins/owner-setstatus.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text }) => { 2 | if (!text) return conn.reply(m.chat, `${emoji} Por favor, ingresa la nueva biografia que deseas ponerme.`, m) 3 | try { 4 | await conn.updateProfileStatus(text).catch(_ => _) 5 | conn.reply(m.chat, `${emoji} Info Cambiada Con Exito...`, m) 6 | } catch { 7 | throw 'Well, Error Sis...' 8 | } 9 | } 10 | handler.help = ['setstatus '] 11 | handler.tags = ['owner'] 12 | handler.command = ['setstatus', 'setbio'] 13 | handler.rowner = true 14 | 15 | export default handler 16 | -------------------------------------------------------------------------------- /plugins/owner-spam2.js: -------------------------------------------------------------------------------- 1 | const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); 2 | 3 | let handler = async (m, { conn, text, usedPrefix, command }) => { 4 | const args = text.split('|').map(v => v.trim()); 5 | 6 | if (args.length < 3) { 7 | return m.reply(`${emoji} Debes ingresar el link del grupo, el mensaje y la cantidad de spam separados por "|".*\n\nEjemplo:\n${usedPrefix + command} https://chat.whatsapp.com/SSSS | Hola, ¿cómo están? | 5`); 8 | } 9 | 10 | const [groupLink, message, countStr] = args; 11 | const count = parseInt(countStr, 10); 12 | 13 | if (!groupLink.includes('chat.whatsapp.com')) { 14 | return m.reply(`${emoji2} Proporcione un enlace válido del grupo.`); 15 | } 16 | if (isNaN(count) || count <= 0) { 17 | return m.reply(`${emoji2} Especifique una cantidad válida de mensajes (mayor a 0).`); 18 | } 19 | 20 | try { 21 | const code = groupLink.split('chat.whatsapp.com/')[1]; 22 | const groupId = await conn.groupAcceptInvite(code); 23 | 24 | m.reply(`${done} Unido al grupo con éxito. Iniciando spam de ${count} mensajes...`); 25 | 26 | for (let i = 0; i < count; i++) { 27 | await conn.sendMessage(groupId, { text: message }); 28 | await delay(1000); 29 | } 30 | 31 | m.reply(`${done} Spam completado. Saliendo del grupo...`); 32 | await conn.groupLeave(groupId); 33 | } catch (error) { 34 | console.error(error); 35 | m.reply(`${msm} Error al intentar realizar la operación: ${error.message}`); 36 | } 37 | }; 38 | 39 | handler.help = ['spam2']; 40 | handler.tags = ['owner']; 41 | handler.command = ['spam2']; 42 | handler.owner = true; 43 | export default handler; 44 | -------------------------------------------------------------------------------- /plugins/owner-unbanuser.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { conn, args, text, usedPrefix, command }) => { 2 | let user; 3 | let db = global.db.data.users; 4 | if (m.quoted) { 5 | user = m.quoted.sender; 6 | } else if (args.length >= 1) { 7 | user = args[0].replace('@', '') + '@s.whatsapp.net'; 8 | } else { 9 | await conn.reply(m.chat, `${emoji} Por favor, etiqueta o coloca el número del usuario que quieres desbanear del Bot.`, m); 10 | return; 11 | } 12 | if (db[user]) { 13 | db[user].banned = false; 14 | db[user].banRazon = ''; 15 | const nametag = await conn.getName(user); 16 | const nn = conn.getName(m.sender); 17 | await conn.reply(m.chat, `${done} El usuario *${nametag}* ha sido desbaneado.`, m, { mentionedJid: [user] }); 18 | conn.reply(`${suittag}@s.whatsapp.net`, `${emoji} El usuario *${nametag}* ha sido desbaneado por *${nn}*.`, m); 19 | } else { 20 | await conn.reply(m.chat, `${emoji4} El usuario no está registrado.`, m); 21 | } 22 | }; 23 | handler.help = ['unbanuser <@tag>']; 24 | handler.command = ['unbanuser']; 25 | handler.tags = ['mods']; 26 | handler.rowner = true; 27 | 28 | export default handler; 29 | 30 | -------------------------------------------------------------------------------- /plugins/owner-update.js: -------------------------------------------------------------------------------- 1 | import { exec } from 'child_process'; 2 | 3 | let handler = async (m, { conn }) => { 4 | m.reply(`${emoji2} Actualizando el bot...`); 5 | 6 | exec('git pull', (err, stdout, stderr) => { 7 | if (err) { 8 | conn.reply(m.chat, `${msm} Error: No se pudo realizar la actualización.\nRazón: ${err.message}`, m); 9 | return; 10 | } 11 | 12 | if (stderr) { 13 | console.warn('Advertencia durante la actualización:', stderr); 14 | } 15 | 16 | if (stdout.includes('Already up to date.')) { 17 | conn.reply(m.chat, `${emoji4} El bot ya está actualizado.`, m); 18 | } else { 19 | conn.reply(m.chat, `${emoji} Actualización realizada con éxito.\n\n${stdout}`, m); 20 | } 21 | }); 22 | }; 23 | 24 | handler.help = ['update']; 25 | handler.tags = ['owner']; 26 | handler.command = ['update']; 27 | handler.rowner = true; 28 | 29 | export default handler; 30 | -------------------------------------------------------------------------------- /plugins/rg-delbirth.js: -------------------------------------------------------------------------------- 1 | import { createHash } from 'crypto'; 2 | import fetch from 'node-fetch'; 3 | 4 | const handler = async (m, { conn, command, usedPrefix, text }) => { 5 | 6 | let user = global.db.data.users[m.sender]; 7 | 8 | if (!user.birth) { 9 | return conn.reply(m.chat, `${emoji2} No tienes una fecha de nacimiento establecida que se pueda eliminar.`, m); 10 | } 11 | 12 | user.birth = ''; 13 | 14 | return conn.reply(m.chat, `${emoji} Tu fecha de nacimiento ha sido eliminada.`, m); 15 | }; 16 | 17 | handler.help = ['delbirth'] 18 | handler.tags = ['rg'] 19 | handler.command = ['delbirth'] 20 | export default handler; 21 | -------------------------------------------------------------------------------- /plugins/rg-deldescription.js: -------------------------------------------------------------------------------- 1 | import { createHash } from 'crypto'; 2 | import fetch from 'node-fetch'; 3 | 4 | const handler = async (m, { conn }) => { 5 | let user = global.db.data.users[m.sender]; 6 | 7 | if (!user.description) { 8 | return conn.reply(m.chat, `${emoji2} No tienes una descripción establecida que se pueda eliminar.`, m); 9 | } 10 | 11 | user.description = ''; 12 | 13 | return conn.reply(m.chat, `${emoji} Tu descripción ha sido eliminada.`, m); 14 | }; 15 | 16 | handler.help = ['deldescription'] 17 | handler.tags = ['rg'] 18 | handler.command = ['deldescription', 'deldesc'] 19 | export default handler; 20 | -------------------------------------------------------------------------------- /plugins/rg-delgenre.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { conn, command, usedPrefix }) => { 2 | 3 | const user = global.db.data.users[m.sender]; 4 | 5 | if (!user.genre) { 6 | return conn.reply(m.chat, `${emoji2} No tienes un género asignado.`, m) 7 | } 8 | 9 | user.genre = ''; 10 | 11 | return conn.reply(m.chat, `${emoji} Se ha eliminado tu genero.`, m) 12 | }; 13 | 14 | handler.help = ['delgenre'] 15 | handler.tags = ['rg'] 16 | handler.command = ['delgenero', 'delgenre'] 17 | export default handler; 18 | 19 | -------------------------------------------------------------------------------- /plugins/rg-setbirth.js: -------------------------------------------------------------------------------- 1 | import { createHash } from 'crypto'; 2 | import fetch from 'node-fetch'; 3 | 4 | const handler = async (m, { conn, command, usedPrefix, text }) => { 5 | 6 | let user = global.db.data.users[m.sender]; 7 | 8 | if (user.birth) { 9 | return conn.reply(m.chat, `${emoji2} Ya tienes una fecha establecida, si quieres borrar la fecha actual usa:\n> » ${usedPrefix}delbirth`, m); 10 | } 11 | 12 | if (!text) return conn.reply(m.chat, `${emoji} Debes ingresar una fecha válida para tu cumpleaños.\n\n> ✐ Ejemplo » *${usedPrefix + command} 01/01/2000* (dia/mes/año)`, m); 13 | 14 | function validarFechaNacimiento(text) { 15 | const opcionesFecha = [ 16 | /^\d{1,2}\/\d{1,2}\/\d{4}$/ // dd/mm/yyyy or m/d/yyyy 17 | ]; 18 | 19 | let esValida = opcionesFecha.some(regex => regex.test(text)); 20 | if (!esValida) return null; 21 | 22 | if (/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(text)) { 23 | const [dia, mes, año] = text.split('/'); 24 | const meses = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"]; 25 | return `${parseInt(dia)} de ${meses[parseInt(mes) - 1]} de ${año}`; 26 | } 27 | return text; 28 | } 29 | 30 | let birth = validarFechaNacimiento(text); 31 | if (!birth) { 32 | return conn.reply(m.chat, `${emoji2} Recuerda elegir una fecha de nacimiento válida.\n> Ejemplo: ${usedPrefix + command} 01/12/2024`, m); 33 | } 34 | 35 | user.birth = birth; 36 | return conn.reply(m.chat, `${emoji} Se ha establecido tu fecha de nacimiento como: *${user.birth}*!`, m); 37 | }; 38 | 39 | handler.help = ['setbirth'] 40 | handler.tags = ['rg'] 41 | handler.command = ['setbirth', 'setcumpleaños'] 42 | export default handler; 43 | -------------------------------------------------------------------------------- /plugins/rg-setdescription.js: -------------------------------------------------------------------------------- 1 | import { createHash } from 'crypto'; 2 | import fetch from 'node-fetch'; 3 | 4 | const handler = async (m, { conn, command, usedPrefix, text }) => { 5 | 6 | let user = global.db.data.users[m.sender]; 7 | 8 | if (user.description) { 9 | return conn.reply(m.chat, `${emoji2} Ya tienes una descripción establecida, si quieres borrar la descripcion actual usa:\n> » ${usedPrefix}deldescription`, m); 10 | } 11 | 12 | if (!text) return conn.reply(m.chat, `${emoji}︎ Debes especificar una descripcion valida para tu perfil.\n\n> ✐ Ejemplo » *${usedPrefix + command} Hola, uso WhatsApp!*`, m); 13 | 14 | user.description = text; 15 | 16 | return conn.reply(m.chat, `${emoji} Se ha establecido tu descripcion.\n\n> *${user.description}*`, m); 17 | }; 18 | 19 | handler.help = ['setdescription'] 20 | handler.tags = ['rg'] 21 | handler.command = ['setdescription', 'setdesc'] 22 | export default handler; 23 | -------------------------------------------------------------------------------- /plugins/rg-setgenre.js: -------------------------------------------------------------------------------- 1 | import { createHash } from 'crypto'; 2 | import fetch from 'node-fetch'; 3 | 4 | const handler = async (m, { conn, command, usedPrefix, text }) => { 5 | 6 | let user = global.db.data.users[m.sender]; 7 | 8 | if (user.genre) { 9 | return conn.reply(m.chat, `${emoji2} Ya tienes un género establecido, si quieres borrar el género actual usa:\n> » ${usedPrefix}delgenre`, m); 10 | } 11 | 12 | if (!text) return conn.reply(m.chat, `${emoji} Debes ingresar un género válido.\n> Ejemplo » *${usedPrefix + command} hombre*`, m); 13 | 14 | function asignarGenre(text) { 15 | let genre; 16 | switch (text.toLowerCase()) { 17 | case "hombre": 18 | genre = "Hombre"; 19 | break; 20 | case "mujer": 21 | genre = "Mujer"; 22 | break; 23 | default: 24 | return null; 25 | } 26 | return genre; 27 | } 28 | 29 | let genre = asignarGenre(text); 30 | if (!genre) { 31 | return conn.reply(m.chat, `${emoji2} Recuerda elegir un género válido.\n> Ejemplo: ${usedPrefix + command} hombre`, m); 32 | } 33 | 34 | user.genre = genre; 35 | 36 | return conn.reply(m.chat, `${emoji} Se ha establecido tu género como: *${user.genre}*!`, m); 37 | }; 38 | 39 | handler.help = ['setgenre'] 40 | handler.tags = ['rg'] 41 | handler.command = ['setgenero', 'setgenre'] 42 | export default handler; 43 | 44 | -------------------------------------------------------------------------------- /plugins/rg-unreg.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text }) => { 2 | 3 | let user = global.db.data.users[m.sender] 4 | 5 | user.registered = false 6 | return conn.reply(m.chat, `${emoji} Tu registro fue borrado de mi base de datos.`, m) 7 | 8 | } 9 | handler.help = ['unreg'] 10 | handler.tags = ['rg'] 11 | handler.command = ['unreg'] 12 | handler.register = true 13 | export default handler 14 | 15 | -------------------------------------------------------------------------------- /plugins/rpg-bank.js: -------------------------------------------------------------------------------- 1 | import db from '../lib/database.js' 2 | 3 | let handler = async (m, { conn, usedPrefix }) => { 4 | let who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : m.sender 5 | if (who == conn.user.jid) return m.react('🎤') 6 | if (!(who in global.db.data.users)) return m.reply(`🎤💙 El usuario no se encuentra en la base de datos del concierto virtual ✨`) 7 | 8 | let user = global.db.data.users[who] 9 | let total = (user.coin || 0) + (user.bank || 0); 10 | 11 | const texto = `💙 Información Económica del Concierto Virtual ✨ 12 | 13 | 🎵 Fanático » *${conn.getName(who)}* 14 | 💎 Notas Musicales » *${user.coin} ${moneda}* 15 | 🏦 Banco Virtual » *${user.bank} ${moneda}* 16 | ✨ Total » *${total} ${moneda}* 17 | 18 | 💙 *¡Para proteger tus notas musicales, depósitalas en el banco virtual usando #deposit!* 🎵`; 19 | 20 | await conn.reply(m.chat, texto, m) 21 | } 22 | 23 | handler.help = ['bal'] 24 | handler.tags = ['rpg'] 25 | handler.help = ['bal'] 26 | handler.tags = ['rpg'] 27 | handler.command = ['bal', 'balance', 'bank'] 28 | handler.register = true 29 | handler.group = true 30 | 31 | export default handler 32 | 33 | -------------------------------------------------------------------------------- /plugins/rpg-canjear.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text }) => { 2 | let code = text.trim().toUpperCase(); 3 | 4 | if (!code) { 5 | return conn.reply(m.chat, `${emoji} Por favor, ingrese un código para canjear.`, m); 6 | } 7 | 8 | let codesDB = global.db.data.codes || {}; 9 | let user = global.db.data.users[m.sender]; 10 | 11 | if (!codesDB[code]) { 12 | return conn.reply(m.chat, `${emoji2} Código no válido.`, m); 13 | } 14 | 15 | if (codesDB[code].claimedBy.includes(m.sender)) { 16 | return conn.reply(m.chat, `${emoji2} Ya has canjeado este código.`, m); 17 | } 18 | 19 | if (codesDB[code].claimedBy.length >= 5) { 20 | return conn.reply(m.chat, `${emoji2} Este código fue agotado completamente... Espera a que el creador ponga otro código.`, m); 21 | } 22 | 23 | user.coin += codesDB[code].coin; 24 | codesDB[code].claimedBy.push(m.sender); 25 | 26 | let remaining = 50 - codesDB[code].claimedBy.length; 27 | 28 | conn.reply(m.chat, `${emoji} Has canjeado el código con éxito. Has recibido ${codesDB[code].coin} ${moneda}.\nQuedan ${remaining} vacantes para canjear el código.`, m); 29 | } 30 | 31 | handler.help = ['canjear ']; 32 | handler.tags = ['economia']; 33 | handler.command = ['canjear']; 34 | handler.group = true; 35 | handler.register = true; 36 | 37 | export default handler; 38 | 39 | -------------------------------------------------------------------------------- /plugins/rpg-cartera.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, {conn, usedPrefix}) => { 2 | let who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : m.sender 3 | if (who == conn.user.jid) return error 4 | if (!(who in global.db.data.users)) return conn.reply(m.chat, `💙 ¡Ara ara! Este usuario no está registrado en mi base de datos virtual. ✨`, m , global.rcanal) 5 | let user = global.db.data.users[who] 6 | await m.reply(`${who == m.sender ? `💙 Tienes *${user.coin} ${moneda} 🎤* en tu cartera virtual de Miku! ✨` : `💙 El usuario @${who.split('@')[0]} tiene *${user.coin} ${moneda} 🎤* en su cartera virtual! ✨`}. `, null, { mentions: [who] })} 7 | 8 | handler.help = ['wallet'] 9 | handler.tags = ['economy'] 10 | handler.command = ['wallet', 'cartera'] 11 | handler.group = true 12 | handler.register = true 13 | 14 | export default handler 15 | 16 | -------------------------------------------------------------------------------- /plugins/rpg-codigo.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text }) => { 2 | let amount = parseInt(text.trim()); 3 | 4 | if (isNaN(amount) || amount <= 0) { 5 | return conn.reply(m.chat, `${emoji} Por favor, ingrese una cantidad válida de ${moneda}.`, m, global.rcanal); 6 | } 7 | 8 | let code = Math.random().toString(36).substring(2, 10).toUpperCase(); 9 | 10 | if (!global.db.data.codes) global.db.data.codes = {}; 11 | global.db.data.codes[code] = { coin: amount, claimedBy: [] }; 12 | 13 | conn.reply(m.chat, `${emoji} Código generado: *${code}*\nEste código puede ser canjeado por ${amount} ${moneda} y puede ser utilizado por 50 personas.`, m, global.rcanal); 14 | } 15 | 16 | handler.help = ['codigo ']; 17 | handler.tags = ['owner']; 18 | handler.command = ['codigo'] 19 | handler.rowner = true; 20 | 21 | export default handler; 22 | 23 | -------------------------------------------------------------------------------- /plugins/rpg-depositar.js: -------------------------------------------------------------------------------- 1 | import db from '../lib/database.js' 2 | 3 | let handler = async (m, { args }) => { 4 | let user = global.db.data.users[m.sender] 5 | if (!args[0]) return m.reply(`${emoji} Ingresa la cantidad de *${moneda}* que deseas Depositar.`) 6 | if ((args[0]) < 1) return m.reply(`${emoji} Ingresa una cantidad válida de *${moneda}*.`) 7 | if (args[0] == 'all') { 8 | let count = parseInt(user.coin) 9 | user.coin -= count * 1 10 | user.bank += count * 1 11 | await m.reply(`${emoji} Depositaste *${count} ${moneda}* en el banco, ya no podran robartelo.`) 12 | return !0 13 | } 14 | if (!Number(args[0])) return m.reply(`${emoji2} Debes depositar una cantidad válida.\n> Ejemplo 1 » *#d 25000*\n> Ejemplo 2 » *#d all*`) 15 | let count = parseInt(args[0]) 16 | if (!user.coin) return m.reply(`${emoji2} No tienes suficientes *${moneda}* la Cartera.`) 17 | if (user.coin < count) return m.reply(`${emoji2} Solo tienes *${user.coin} ${moneda}* en la Cartera.`) 18 | user.coin -= count * 1 19 | user.bank += count * 1 20 | await m.reply(`${emoji} Depositaste *${count} ${moneda}* en el banco, ya no podran robartelo.`)} 21 | 22 | handler.help = ['depositar'] 23 | handler.tags = ['rpg'] 24 | handler.command = ['deposit', 'depositar', 'd', 'aguardar'] 25 | handler.group = true 26 | handler.register = true 27 | 28 | export default handler 29 | -------------------------------------------------------------------------------- /plugins/rpg-retirar.js: -------------------------------------------------------------------------------- 1 | import db from '../lib/database.js' 2 | 3 | let handler = async (m, { args }) => { 4 | let user = global.db.data.users[m.sender] 5 | if (!args[0]) return m.reply(`${emoji} Ingresa la cantidad de *${moneda}* que deseas Retirar.`) 6 | if (args[0] == 'all') { 7 | let count = parseInt(user.bank) 8 | user.bank -= count * 1 9 | user.coin += count * 1 10 | await m.reply(`${emoji} Retiraste *${count} ${moneda}* del banco, ahora podras usarlo pero tambien podran robartelo.`) 11 | return !0 12 | } 13 | if (!Number(args[0])) return m.reply(`${emoji2} Debes retirar una cantidad válida.\n > Ejemplo 1 » *#retirar 25000*\n> Ejemplo 2 » *#retirar all*`) 14 | let count = parseInt(args[0]) 15 | if (!user.bank) return m.reply(`${emoji2} No tienes suficientes *${moneda}* en el Banco.`) 16 | if (user.bank < count) return m.reply(`${emoji2} Solo tienes *${user.bank} ${moneda}* en el Banco.`) 17 | user.bank -= count * 1 18 | user.coin += count * 1 19 | await m.reply(`${emoji} Retiraste *${count} ${moneda}* del banco, ahora podras usarlo pero tambien podran robartelo.`)} 20 | 21 | handler.help = ['retirar'] 22 | handler.tags = ['rpg'] 23 | handler.command = ['withdraw', 'retirar', 'with'] 24 | handler.group = true 25 | handler.register = true 26 | 27 | export default handler 28 | -------------------------------------------------------------------------------- /plugins/rpg-shop.js: -------------------------------------------------------------------------------- 1 | const xppercoin = 350; 2 | const handler = async (m, {conn, command, args}) => { 3 | let count = command.replace(/^buy/i, ''); 4 | count = count ? /all/i.test(count) ? Math.floor(global.db.data.users[m.sender].exp / xppercoin) : parseInt(count) : args[0] ? parseInt(args[0]) : 1; 5 | count = Math.max(1, count); 6 | if (global.db.data.users[m.sender].exp >= xppercoin * count) { 7 | global.db.data.users[m.sender].exp -= xppercoin * count; 8 | global.db.data.users[m.sender].coin += count; 9 | conn.reply(m.chat, ` 10 | ╔═══════⩽✰⩾═══════╗ 11 | ║ 𝐍𝐨𝐭𝐚 𝐃𝐞 𝐏𝐚𝐠𝐨 12 | ╠═══════⩽✰⩾═══════╝ 13 | ║╭──────────────┄ 14 | ║│ *Compra Nominal* : + ${count} 💸 15 | ║│ *Gastado* : -${xppercoin * count} XP 16 | ║╰──────────────┄ 17 | ╚═══════⩽✰⩾═══════╝`, m); 18 | } else conn.reply(m.chat, `${emoji2} Lo siento, no tienes suficiente *XP* para comprar *${count}* ${moneda} 💸`, m); 19 | }; 20 | handler.help = ['Buy', 'Buyall']; 21 | handler.tags = ['economy']; 22 | handler.command = ['buy', 'buyall']; 23 | handler.group = true; 24 | handler.register = true; 25 | 26 | export default handler; 27 | 28 | -------------------------------------------------------------------------------- /plugins/rpg-weekly.js: -------------------------------------------------------------------------------- 1 | const we = 5000; 2 | let handler = async (m, { conn }) => { 3 | 4 | let user = global.db.data.users[m.sender] || {}; 5 | user.weekly = user.weekly || 0; 6 | 7 | const cooldown = 604800000; 8 | 9 | if (new Date - user.weekly < cooldown) { 10 | return m.reply(`${emoji3} ¡Ya reclamaste tu regalo semanal! Vuelve en:\n *${msToTime((user.weekly + cooldown) - new Date())}*`); 11 | } 12 | 13 | let coinReward = pickRandom([1, 2, 3]); 14 | let expReward = pickRandom([100, 200, 300]); 15 | 16 | user.coin = (user.coin || 0) + coinReward; 17 | user.exp = (user.exp || 0) + expReward; 18 | 19 | m.reply(` 20 | 🎁 ¡Ha pasado una semana! ¡Disfruta de tu regalo semanal!. 21 | 22 | 💸 *${moneda}* : +${coinReward} 23 | ✨ *Experiencia* : +${expReward}`); 24 | 25 | user.weekly = new Date * 1; 26 | } 27 | 28 | handler.help = ['weekly']; 29 | handler.tags = ['rpg']; 30 | handler.command = ['semanal', 'weekly']; 31 | handler.group = true; 32 | handler.register = true; 33 | 34 | export default handler; 35 | 36 | function pickRandom(list) { 37 | return list[Math.floor(Math.random() * list.length)]; 38 | } 39 | 40 | function msToTime(duration) { 41 | var days = Math.floor(duration / (1000 * 60 * 60 * 24)); 42 | var hours = Math.floor((duration % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); 43 | var minutes = Math.floor((duration % (1000 * 60 * 60)) / (1000 * 60)); 44 | 45 | return `${days} días ${hours} horas ${minutes} minutos`; 46 | } 47 | 48 | -------------------------------------------------------------------------------- /plugins/sticker-bratvid.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import { sticker } from '../lib/sticker.js' 3 | 4 | const fetchStickerVideo = async (text) => { 5 | const response = await axios.get(`https://velyn.mom/api/maker/bratgif`, { 6 | params: { text }, 7 | responseType: 'arraybuffer' 8 | }) 9 | if (!response.data) throw new Error('Error al obtener el video de la API.') 10 | return response.data 11 | } 12 | 13 | let handler = async (m, { conn, text }) => { 14 | if (m.quoted && m.quoted.text) { 15 | text = m.quoted.text 16 | } else if (!text) { 17 | return conn.sendMessage(m.chat, { 18 | text: '💙 Por favor, responde a un mensaje o ingresa un texto para crear el Sticker.' 19 | }, { quoted: m }) 20 | } 21 | 22 | let userId = m.sender 23 | let packstickers = global.db.data.users[userId] || {} 24 | let texto1 = packstickers.text1 || global.packsticker 25 | let texto2 = packstickers.text2 || global.packsticker2 26 | 27 | try { 28 | const videoBuffer = await fetchStickerVideo(text) 29 | const stickerBuffer = await sticker(videoBuffer, null, texto1, texto2) 30 | await conn.sendMessage(m.chat, { 31 | sticker: stickerBuffer 32 | }, { quoted: m }) 33 | } catch (e) { 34 | await conn.sendMessage(m.chat, { 35 | text: `⚠ Ocurrió un error: ${e.message}` 36 | }, { quoted: m }) 37 | } 38 | } 39 | 40 | handler.help = ['bratvid '] 41 | handler.tags = ['sticker'] 42 | handler.command = ['bratvid', 'bratv'] 43 | 44 | export default handler 45 | 46 | -------------------------------------------------------------------------------- /plugins/sticker-emojimix.js: -------------------------------------------------------------------------------- 1 | import MessageType from '@whiskeysockets/baileys' 2 | import fetch from 'node-fetch' 3 | import { sticker } from '../lib/sticker.js' 4 | import fs from "fs" 5 | 6 | const fetchJson = (url, options) => new Promise(async (resolve, reject) => { 7 | fetch(url, options) 8 | .then(response => response.json()) 9 | .then(json => { 10 | resolve(json) 11 | }) 12 | .catch((err) => { 13 | reject(err) 14 | }) 15 | }) 16 | 17 | let handler = async (m, { conn, text, args, usedPrefix, command }) => { 18 | if (!args[0]) return m.reply(`📌 Ejemplo: *${usedPrefix + command}* 😎+🤑`) 19 | 20 | let [emoji, emoji2] = text.split`+` 21 | let anu = await fetchJson(`https://tenor.googleapis.com/v2/featured?key=AIzaSyAyimkuYQYF_FXVALexPuGQctUWRURdCYQ&contentfilter=high&media_filter=png_transparent&component=proactive&collection=emoji_kitchen_v5&q=${encodeURIComponent(emoji)}_${encodeURIComponent(emoji2)}`) 22 | 23 | for (let res of anu.results) { 24 | let userId = m.sender 25 | let packstickers = global.db.data.users[userId] || {} 26 | let texto1 = packstickers.text1 || global.packsticker 27 | let texto2 = packstickers.text2 || global.packsticker2 28 | 29 | let stiker = await sticker(false, res.url, texto1, texto2) 30 | conn.sendFile(m.chat, stiker, null, { asSticker: true }, m) 31 | } 32 | } 33 | 34 | handler.help = ['emojimix **'] 35 | handler.tags = ['sticker'] 36 | handler.command = ['emojimix'] 37 | handler.register = true 38 | 39 | export default handler; 40 | -------------------------------------------------------------------------------- /plugins/sticker-pfp.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender; 3 | let name = conn.getName(who); 4 | let pp = await conn.profilePictureUrl(who, 'image').catch(() => 'https://qu.ax/cAUXY.webp'); 5 | await conn.sendFile(m.chat, pp, 'profile.jpg', `*Foto de perfil virtual de ${name}* 💙`, m); 6 | } 7 | 8 | handler.help = ['pfp @user']; 9 | handler.tags = ['sticker']; 10 | handler.command = ['pfp', 'getpic']; 11 | 12 | export default handler; 13 | 14 | -------------------------------------------------------------------------------- /plugins/sticker-toimg.js: -------------------------------------------------------------------------------- 1 | import { webp2png } from '../lib/webp2mp4.js' 2 | 3 | let handler = async (m, { conn, usedPrefix, command }) => { 4 | const notStickerMessage = `${emoji} Debes citar un sticker para convertir a imagen.` 5 | const q = m.quoted || m 6 | const mime = q.mediaType || '' 7 | if (!/sticker/.test(mime)) return m.reply(notStickerMessage) 8 | const media = await q.download() 9 | let out = await webp2png(media).catch(_ => null) || Buffer.alloc(0) 10 | await conn.sendFile(m.chat, out, 'output.png', null, m) 11 | } 12 | 13 | handler.help = ['toimg (reply)'] 14 | handler.tags = ['sticker'] 15 | handler.command = ['toimg', 'img', 'jpg'] 16 | 17 | export default handler 18 | 19 | -------------------------------------------------------------------------------- /plugins/sticker-wm.js: -------------------------------------------------------------------------------- 1 | import { addExif } from '../lib/sticker.js'; 2 | import { sticker } from '../lib/sticker.js'; 3 | import fetch from 'node-fetch'; 4 | import axios from 'axios'; 5 | 6 | let handler = async (m, { conn, text, usedPrefix, command }) => { 7 | if (!m.quoted) return m.reply(`${emoji} Por favor, responde a un sticker con el comando *${usedPrefix + command}* seguido del nuevo nombre.\nEjemplo: *${usedPrefix + command} Nuevo Nombre*`); 8 | 9 | const sticker = await m.quoted.download(); 10 | if (!sticker) return m.reply(`${emoji2} No se pudo descargar el sticker.`); 11 | 12 | const textoParts = text.split(/[\u2022|]/).map(part => part.trim()); 13 | const userId = m.sender; 14 | let packstickers = global.db.data.users[userId] || {}; 15 | let texto1 = textoParts[0] || packstickers.text1 || global.packsticker; 16 | let texto2 = textoParts[1] || packstickers.text2 || global.packsticker2; 17 | 18 | const exif = await addExif(sticker, texto1, texto2); 19 | 20 | await conn.sendMessage(m.chat, { sticker: exif }, { quoted: m }); 21 | }; 22 | 23 | handler.help = ['wm']; 24 | handler.tags = ['tools']; 25 | handler.command = ['take', 'robar', 'wm']; 26 | handler.register = true; 27 | 28 | export default handler; 29 | 30 | -------------------------------------------------------------------------------- /plugins/stickers-ttp_attp.js: -------------------------------------------------------------------------------- 1 | import { sticker } from '../lib/sticker.js' 2 | import fetch from 'node-fetch' 3 | import axios from 'axios' 4 | 5 | let handler = async (m, { conn, text, args, usedPrefix, command }) => { 6 | if (!text) { 7 | if (m.quoted && m.quoted.text) { 8 | text = m.quoted.text 9 | } else { 10 | return m.reply(`💙 Por Favor, Ingresa Un Texto Para Realizar Tu Sticker.`) 11 | } 12 | } 13 | 14 | let teks = encodeURI(text) 15 | let userId = m.sender 16 | let packstickers = global.db.data.users[userId] || {} 17 | let texto1 = packstickers.text1 || global.packsticker 18 | let texto2 = packstickers.text2 || global.packsticker2 19 | 20 | if (command == 'attp') { 21 | let stiker = await sticker(null, `https://api.fgmods.xyz/api/maker/attp?text=${teks}&apikey=dylux`, texto1, texto2) 22 | conn.sendFile(m.chat, stiker, 'sticker.webp', '', m, true) 23 | } 24 | 25 | if (command == 'ttp') { 26 | let stiker = await sticker(null, `https://api.fgmods.xyz/api/maker/ttp?text=${teks}&apikey=dylux`, texto1, texto2) 27 | conn.sendFile(m.chat, stiker, 'sticker.webp', '', m, true) 28 | } 29 | } 30 | 31 | handler.tags = ['sticker'] 32 | handler.help = ['ttp', 'attp'] 33 | handler.command = ['ttp', 'attp'] 34 | 35 | export default handler 36 | 37 | -------------------------------------------------------------------------------- /plugins/tools-cal.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text }) => { 2 | let id = m.chat 3 | conn.math = conn.math ? conn.math : {} 4 | if (id in conn.math) { 5 | clearTimeout(conn.math[id][3]) 6 | delete conn.math[id] 7 | m.reply('🎵 Cancelando cálculo musical... 🎵 ') 8 | } 9 | let val = text 10 | .replace(/[^0-9\-\/+*×÷πEe()piPI/]/g, '') 11 | .replace(/×/g, '*') 12 | .replace(/÷/g, '/') 13 | .replace(/π|pi/gi, 'Math.PI') 14 | .replace(/e/gi, 'Math.E') 15 | .replace(/\/+/g, '/') 16 | .replace(/\++/g, '+') 17 | .replace(/-+/g, '-') 18 | let format = val 19 | .replace(/Math\.PI/g, 'π') 20 | .replace(/Math\.E/g, 'e') 21 | .replace(/\//g, '÷') 22 | .replace(/\*×/g, '×') 23 | try { 24 | console.log(val) 25 | let result = (new Function('return ' + val))() 26 | if (!result) throw result 27 | m.reply(`💙 *${format}* = _${result}_ 🎵`) 28 | } catch (e) { 29 | if (e == undefined) return m.reply(`💙 ¡Ingresa la ecuación musical que quieres calcular! 💙\n\n✨ Símbolos compatibles: -, +, *, /, ×, ÷, π, e, (, ) ✨`) 30 | return m.reply(`🎵 Formato incorrecto en tu partitura matemática 🎵\n\n🎶 Solo puedes usar números 0-9 y los símbolos: -, +, *, /, ×, ÷, π, e, (, ) 🎶`) 31 | } 32 | } 33 | handler.help = ['cal **'] 34 | handler.tags = ['tools'] 35 | handler.command = ['cal', 'calc', 'calcular', 'calculadora'] 36 | handler.exp = 5 37 | handler.register = true 38 | 39 | export default handler 40 | 41 | -------------------------------------------------------------------------------- /plugins/tools-detectar.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import path from 'path' 3 | 4 | var handler = async (m, { usedPrefix, command }) => { 5 | try { 6 | await m.react('🕒') 7 | conn.sendPresenceUpdate('composing', m.chat) 8 | 9 | const pluginsDir = './plugins' 10 | 11 | const files = fs.readdirSync(pluginsDir).filter(file => file.endsWith('.js')) 12 | 13 | let response = `💙 *Revisión de Syntax Errors:*\n\n` 14 | let hasErrors = false 15 | 16 | for (const file of files) { 17 | try { 18 | await import(path.resolve(pluginsDir, file)) 19 | } catch (error) { 20 | hasErrors = true 21 | const stackLines = error.stack.split('\n') 22 | 23 | const errorLineMatch = stackLines[0].match(/:(\d+):\d+/) 24 | const errorLine = errorLineMatch ? errorLineMatch[1] : 'Desconocido' 25 | 26 | response += `⚠︎ *Error en:* ${file}\n\n> ● Mensaje: ${error.message}\n> ● Número de línea: ${errorLine}\n\n` 27 | } 28 | } 29 | 30 | if (!hasErrors) { 31 | response += '💙 ¡Todo está en orden! No se detectaron errores de sintaxis' 32 | } 33 | 34 | await conn.reply(m.chat, response, m) 35 | await m.react('✅') 36 | } catch (err) { 37 | await m.react('✖️') 38 | await conn.reply(m.chat, `⚠︎ Ocurrió un error: ${err.message}`, m) 39 | } 40 | } 41 | 42 | handler.command = ['detectarsyntax', 'detectar'] 43 | handler.help = ['detectarsyntax'] 44 | handler.tags = ['tools'] 45 | handler.rowner = true 46 | 47 | export default handler 48 | 49 | -------------------------------------------------------------------------------- /plugins/tools-fake.js: -------------------------------------------------------------------------------- 1 | var handler = async (m, { conn, text, usedPrefix, command }) => { 2 | 3 | if (!text) return m.reply(`${emoji} *Ejemplo de uso*\n\n!${command} Hola @${m.sender.split`@`[0]} Buenas`, null, { mentions: [m.sender] }) 4 | let cm = copy(m) 5 | let who 6 | 7 | if (text.includes('@0')) who = '0@s.whatsapp.net' 8 | else if (m.isGroup) who = cm.participant = m.mentionedJid[0] 9 | else who = m.chat 10 | 11 | if (!who) return m.reply(`${emoji} *Ejemplo de uso*\n\n!${command}* Hola @${m.sender.split`@`[0]} Buenas`, null, { mentions: [m.sender] }) 12 | cm.key.fromMe = false 13 | 14 | cm.message[m.mtype] = copy(m.msg) 15 | let sp = '@' + who.split`@`[0] 16 | let [fake, ...real] = text.split(sp) 17 | 18 | conn.fakeReply(m.chat, real.join(sp).trimStart(), who, fake.trimEnd(), m.isGroup ? m.chat : false, { contextInfo: { mentionedJid: conn.parseMention(real.join(sp).trim())}}) 19 | 20 | } 21 | handler.help = ['fake'] 22 | handler.tags = ['tools'] 23 | handler.command = ['fitnah', 'fakereply', 'fake'] 24 | handler.register = true 25 | handler.group = true 26 | 27 | export default handler 28 | 29 | function copy(obj) { 30 | return JSON.parse(JSON.stringify(obj)) 31 | } 32 | -------------------------------------------------------------------------------- /plugins/tools-ip.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | let handler = async (m, { conn, text }) => { 4 | 5 | let bot = '💙 Buscando espere un momento....' 6 | conn.reply(m.chat, bot, m) 7 | if (!text) return conn.reply(m.chat, `${emoji} Por favor, ingresa una *IP*.`, m, global.rcanal) 8 | 9 | axios.get(`http://ip-api.com/json/${text}?fields=status,message,country,countryCode,region,regionName,city,district,zip,lat,lon,timezone,isp,org,as,mobile,hosting,query`).then ((res) => { 10 | const data = res.data 11 | 12 | if (String(data.status) !== "success") { 13 | throw new Error(data.message || "Falló") 14 | } 15 | let ipsearch = ` 16 | ☁️ *I N F O - I P* ☁️ 17 | 18 | IP : ${data.query} 19 | País : ${data.country} 20 | Código de País : ${data.countryCode} 21 | Provincia : ${data.regionName} 22 | Código de Provincia : ${data.region} 23 | Ciudad : ${data.city} 24 | Distrito : ${data.district} 25 | Código Postal : ${res.data.zip} 26 | Zona Horaria : ${data.timezone} 27 | ISP : ${data.isp} 28 | Organización : ${data.org} 29 | AS : ${data.as} 30 | Mobile : ${data.mobile ? "Si" : "No"} 31 | Hosting : ${data.hosting ? "Si" : "No"} 32 | `.trim() 33 | 34 | conn.reply(m.chat, ipsearch, m) 35 | }) 36 | } 37 | 38 | handler.help = ['ip '] 39 | handler.tags = ['owner'] 40 | handler.command = ['ip'] 41 | 42 | export default handler 43 | 44 | -------------------------------------------------------------------------------- /plugins/tools-letra.js: -------------------------------------------------------------------------------- 1 | function handler(m, { text }) { 2 | if (!text) return conn.reply(m.chat, `${emoji} Por favor, ingresa el texto que quieres transformar.`, m, global.rcanal) 3 | 4 | let teks = text ? text : m.quoted && m.quoted.text ? m.quoted.text : m.text 5 | m.reply(teks.replace(/[a-z]/gi, v => { 6 | return { 7 | 'a': 'ᥲ', 8 | 'b': 'ᑲ', 9 | 'c': 'ᥴ', 10 | 'd': 'ძ', 11 | 'e': 'ᥱ', 12 | 'f': '𝖿', 13 | 'g': 'g', 14 | 'h': 'һ', 15 | 'i': 'і', 16 | 'j': 'ȷ', 17 | 'k': 'k', 18 | 'l': 'ᥣ', 19 | 'm': 'm', 20 | 'n': 'ᥒ', 21 | 'o': '᥆', 22 | 'p': '⍴', 23 | 'q': '𝗊', 24 | 'r': 'r', 25 | 's': 's', 26 | 't': '𝗍', 27 | 'u': 'ᥙ', 28 | 'v': '᥎', 29 | 'w': 'ᥕ', 30 | 'x': '᥊', 31 | 'y': 'ᥡ', 32 | 'z': 'z' 33 | }[v.toLowerCase()] || v }))} 34 | 35 | handler.help = ['letra **'] 36 | handler.tags = ['fun'] 37 | handler.command = ['letra'] 38 | handler.register = true 39 | 40 | export default handler 41 | 42 | -------------------------------------------------------------------------------- /plugins/tools-readviewonce.js: -------------------------------------------------------------------------------- 1 | let { downloadContentFromMessage } = (await import('@whiskeysockets/baileys')); 2 | 3 | let handler = async (m, { conn }) => { 4 | if (!m.quoted) return conn.reply(m.chat, `💙 Responde a una imagen ViewOnce.`, m, global.rcanal) 5 | if (!m?.quoted || !m?.quoted?.viewOnce) return conn.reply(m.chat, `💙 Responde a una imagen ViewOnce.`, m, global.rcanal) 6 | let buffer = await m.quoted.download(false); 7 | if (/videoMessage/.test(m.quoted.mtype)) { 8 | return conn.sendFile(m.chat, buffer, 'media.mp4', m.quoted.caption || '', m) 9 | } else if (/imageMessage/.test(m.quoted.mtype)) { 10 | return conn.sendFile(m.chat, buffer, 'media.jpg', m.quoted?.caption || '', m) 11 | }} 12 | handler.help = ['ver'] 13 | handler.tags = ['tools'] 14 | handler.command = ['readviewonce', 'read', 'readvo'] 15 | handler.register = true 16 | 17 | export default handler 18 | 19 | -------------------------------------------------------------------------------- /plugins/tools-say.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args }) => { 2 | if (!args.length) return conn.sendMessage(m.chat, { text: `${emoji} Por favor, escribe el texto que deseas repetir.` }); 3 | let message = args.join(' '); 4 | 5 | let invisibleChar = '\u200B'; 6 | let finalMessage = invisibleChar + message; 7 | 8 | let mentions = [...message.matchAll(/@(\d+)/g)].map(v => v[1] + '@s.whatsapp.net'); 9 | if (mentions.length) { 10 | conn.sendMessage(m.chat, { text: finalMessage, mentions }); 11 | } else { 12 | conn.sendMessage(m.chat, { text: finalMessage }); 13 | } 14 | }; 15 | handler.command = ['say', 'decir'] 16 | handler.tag = ['tools']; 17 | handler.group = true; 18 | export default handler; 19 | 20 | -------------------------------------------------------------------------------- /plugins/tools-shazam.js: -------------------------------------------------------------------------------- 1 | import acrcloud from 'acrcloud' 2 | 3 | let acr = new acrcloud({ 4 | host: 'identify-eu-west-1.acrcloud.com', 5 | access_key: 'c33c767d683f78bd17d4bd4991955d81', 6 | access_secret: 'bvgaIAEtADBTbLwiPGYlxupWqkNGIjT7J9Ag2vIu' 7 | }) 8 | let handler = async (m, { conn, usedPrefix, command }) => { 9 | let q = m.quoted ? m.quoted : m 10 | let mime = (q.msg || q).mimetype || q.mediaType || '' 11 | if (/video|audio/.test(mime)) { 12 | let buffer = await q.download() 13 | let { status, metadata } = await acr.identify(buffer) 14 | if (status.code !== 0) throw status.msg 15 | let { title, artists, album, genres, release_date } = metadata.music[0] 16 | let txt = '╭─⬣「 *Whatmusic Tools* 」⬣\n' 17 | txt += `│ ≡◦ *🍭 Titulo ∙* ${title}${artists ? `\n│ ≡◦ *👤 Artista ∙* ${artists.map(v => v.name).join(', ')}` : ''}` 18 | txt += `${album ? `\n│ ≡◦ *📚 Album ∙* ${album.name}` : ''}${genres ? `\n│ ≡◦ *🪴 Genero ∙* ${genres.map(v => v.name).join(', ')}` : ''}\n` 19 | txt += `│ ≡◦ *🕜 Fecha de lanzamiento ∙* ${release_date}\n` 20 | txt += `╰─⬣` 21 | conn.reply(m.chat, txt, m) 22 | } else return conn.reply(m.chat, `${emoji} Etiqueta un audio o video de poca duración con el comando *${usedPrefix + command}* para ver que música contiene.`, m, global.rcanal) 23 | } 24 | handler.help = ['whatmusic