├── lib ├── .file ├── tictactoe.d.ts ├── logs.js ├── levelling.js ├── uploadFile.js ├── import.js ├── uploadImage.js ├── database.js ├── gdrive.js ├── cloudDBAdapter.js ├── canvas.js ├── queque.js ├── webp2mp4.js └── converter.js ├── tmp └── .file ├── plugins ├── _ranks.js ├── _welcome.js ├── img-image.js ├── main-grupos.js ├── pruebascomandos.js ├── dl-spotifysearch.js ├── downloader-Twitter.js ├── downloader-tiktok.js ├── YerTX2 ├── serbot-stop.js ├── fun-afk.js ├── rg-myns.js ├── main-infototal.js ├── _userPrem.js ├── owner-getdb.js ├── group-banchat.js ├── group-tag.js ├── owner-getsesion.js ├── group-unbanchat.js ├── _fototeta.js ├── group-totag.js ├── owner-restart.js ├── owner-otag.js ├── tools-reenvia.js ├── owner-update.js ├── tools-qrcode.js ├── img-waifu.js ├── img-megumin.js ├── img-ppcouple.js ├── img-shinobu.js ├── info-speedtest.js ├── maker-sadcat.js ├── main-creator.js ├── owner-salir.js ├── owner-join.js ├── _premium.js ├── rg-unreg.js ├── owner-savefile.js ├── cmd-list.js ├── img-neko.js ├── main-ping.js ├── tools-ssweb.js ├── sticker-scat.js ├── rpg-chetarki.js ├── serbot-token.js ├── rpg-ki.js ├── fun-ship.js ├── group-kick.js ├── _antiBot.js ├── tools-base64.js ├── owner-exec2.js ├── _antiArab.js ├── tools-tomp3.js ├── rpg-bank.js ├── group-poll.js ├── nsfw-hentai.js ├── downloader-likee.js ├── _getmsg.js ├── dl-apk.js ├── downloader-pinterest.js ├── downloader-fb.js ├── group-link.js ├── fun-_afk.js ├── downloader-ig.js ├── serach-google.js ├── nsfw-rule34.js ├── owner-banlist.js ├── downloader-mediafire.js ├── nable-nsfw.js ├── nable-document.js ├── group-config.js ├── group-staff.js ├── main-runtime.js ├── nable-antiLink.js ├── tools-tovid.js ├── nsfw-xvideosdl.js ├── group-tagall.js ├── nable-welcome.js ├── maker-tweet.js ├── sticker-wm.js ├── downloader-gitclone.js ├── tools-fake.js ├── game-acertijo_resp.js ├── group-antiBot.js ├── _fakeReply.js ├── rpg-minar.js ├── sticker-smeme.js ├── group-invite.js ├── tools-igstalk.js ├── downloader-spotifydl.js ├── img-animes.js ├── rpg-shop.js ├── rpg-claim.js ├── tools-readviewonce.js ├── rpg-retirar.js ├── _Buttons.js ├── _cmdWithMedia.js ├── main-script.js ├── owner-addprem.js ├── rpg-depositarbankSonGoku.js ├── downloader-GDriveDl.js ├── rpg-darxp.js ├── search-tweet.js ├── _antilink.js ├── tools-getmessage.js ├── prueba-age.js ├── searchAppStore.js ├── tools-tts.js ├── _antichannel.js ├── youtube-ytsearch.js ├── group-promote.js ├── main-menu1.js ├── rg-perfil.js ├── main-desarrolladores.js ├── main-comunidad.js ├── buscador-playstore.js ├── nsfw-hentaisearch.js ├── sticker-dado.js ├── _allfake.js ├── tools-whatmusic.js ├── sticker-qc.js ├── fun-simi.js ├── IPdoxx.js ├── owner-ds.js ├── rpg-levelup.js ├── tools-ibb.js ├── dll-ytmp3.js ├── dl-play.js ├── bebot-delsesion.js ├── tools-tourl.js ├── main-infobot.js ├── downloader-tiktokuser.js ├── rpg-darcoins.js ├── buscador-pornhub.js ├── owner-exec.js ├── owner restablecerDatos.js ├── sticker-sticker.js ├── tools-hd.js ├── dl-mega.js ├── dl-ytmpp4.js ├── serbot-bots.js ├── main-cuentas.js ├── descarga-tiktok.js ├── rpg-lb.js ├── nsfw-nsfw.js ├── fun-personalidad.js ├── applemusicsearch.js ├── owner-dsowner.js ├── rg-reg.js ├── _Audios.js ├── dl-ytmp4doc.js └── applemusicdetail.js ├── GokuJadiBot └── GokuJadiBot ├── goku ├── ... ├── ayuda.mp3 ├── dios.mp3 ├── gey.mp3 ├── hdpta.mp3 ├── jaja.mp3 ├── lala.mp3 ├── negra.mp3 ├── sad.mp3 ├── callate.mp3 ├── motivar.mp3 ├── peruano.mp3 ├── elcorazon.mp3 ├── mondongo.mp3 ├── bebitofiufiu.mp3 ├── calculadora.mp3 ├── cayo la ley.mp3 ├── tengo novia.mp3 ├── que me importa.mp3 ├── super albañil.mp3 ├── viva venezuela.mp3 └── se unió usando el enlace de invitación del este grupo.mp3 ├── views ├── img │ ├── dark │ │ ├── .file │ │ ├── balloon_centered_normal.9.png │ │ ├── balloon_centered_shadow.9.png │ │ ├── balloon_incoming_frame.9.png │ │ ├── balloon_incoming_normal.9.png │ │ ├── balloon_outgoing_frame.9.png │ │ ├── balloon_outgoing_normal.9.png │ │ ├── balloon_centered_pressed.9.png │ │ ├── balloon_incoming_pressed.9.png │ │ ├── balloon_outgoing_pressed.9.png │ │ ├── balloon_incoming_normal_ext.9.png │ │ ├── balloon_incoming_normal_stkr.9.png │ │ ├── balloon_incoming_pressed_ext.9.png │ │ ├── balloon_outgoing_normal_ext.9.png │ │ ├── balloon_outgoing_normal_stkr.9.png │ │ ├── balloon_outgoing_pressed_ext.9.png │ │ ├── balloon_live_location_incoming_frame.9.png │ │ └── balloon_live_location_outgoing_frame.9.png │ └── light │ │ ├── .file │ │ ├── balloon_incoming_frame.9.png │ │ ├── balloon_outgoing_frame.9.png │ │ ├── balloon_centered_normal.9.png │ │ ├── balloon_centered_pressed.9.png │ │ ├── balloon_centered_shadow.9.png │ │ ├── balloon_incoming_normal.9.png │ │ ├── balloon_incoming_pressed.9.png │ │ ├── balloon_outgoing_normal.9.png │ │ ├── balloon_outgoing_pressed.9.png │ │ ├── balloon_incoming_normal_ext.9.png │ │ ├── balloon_outgoing_normal_ext.9.png │ │ ├── balloon_incoming_normal_stkr.9.png │ │ ├── balloon_incoming_pressed_ext.9.png │ │ ├── balloon_outgoing_normal_stkr.9.png │ │ ├── balloon_outgoing_pressed_ext.9.png │ │ ├── balloon_live_location_incoming_frame.9.png │ │ └── balloon_live_location_outgoing_frame.9.png ├── style.css ├── index.js └── index.html ├── Procfile ├── storage ├── databases │ └── database.json.tmp └── img │ ├── catalogo.png │ ├── miniurl.jpg │ └── avatar_contact.png ├── .gitignore ├── start.sh ├── app.json ├── Dockerfile ├── test.js ├── server.js └── index.js /lib/.file: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tmp/.file: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /plugins/_ranks.js: -------------------------------------------------------------------------------- 1 | . -------------------------------------------------------------------------------- /plugins/_welcome.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /plugins/img-image.js: -------------------------------------------------------------------------------- 1 | .. -------------------------------------------------------------------------------- /plugins/main-grupos.js: -------------------------------------------------------------------------------- 1 | Ñ -------------------------------------------------------------------------------- /GokuJadiBot/GokuJadiBot: -------------------------------------------------------------------------------- 1 | Hla -------------------------------------------------------------------------------- /goku/...: -------------------------------------------------------------------------------- 1 | Menu de audio 2 | -------------------------------------------------------------------------------- /plugins/pruebascomandos.js: -------------------------------------------------------------------------------- 1 | // -------------------------------------------------------------------------------- /views/img/dark/.file: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /views/img/light/.file: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node . --server 2 | -------------------------------------------------------------------------------- /plugins/dl-spotifysearch.js: -------------------------------------------------------------------------------- 1 | // -------------------------------------------------------------------------------- /plugins/downloader-Twitter.js: -------------------------------------------------------------------------------- 1 | // -------------------------------------------------------------------------------- /plugins/downloader-tiktok.js: -------------------------------------------------------------------------------- 1 | . -------------------------------------------------------------------------------- /storage/databases/database.json.tmp: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /views/style.css: -------------------------------------------------------------------------------- 1 | span.msg { 2 | } 3 | 4 | -------------------------------------------------------------------------------- /plugins/YerTX2: -------------------------------------------------------------------------------- 1 | Hola 🇦🇱 gracias por usar al bot 2 | -------------------------------------------------------------------------------- /goku/ayuda.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/ayuda.mp3 -------------------------------------------------------------------------------- /goku/dios.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/dios.mp3 -------------------------------------------------------------------------------- /goku/gey.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/gey.mp3 -------------------------------------------------------------------------------- /goku/hdpta.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/hdpta.mp3 -------------------------------------------------------------------------------- /goku/jaja.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/jaja.mp3 -------------------------------------------------------------------------------- /goku/lala.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/lala.mp3 -------------------------------------------------------------------------------- /goku/negra.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/negra.mp3 -------------------------------------------------------------------------------- /goku/sad.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/sad.mp3 -------------------------------------------------------------------------------- /goku/callate.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/callate.mp3 -------------------------------------------------------------------------------- /goku/motivar.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/motivar.mp3 -------------------------------------------------------------------------------- /goku/peruano.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/peruano.mp3 -------------------------------------------------------------------------------- /goku/elcorazon.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/elcorazon.mp3 -------------------------------------------------------------------------------- /goku/mondongo.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/mondongo.mp3 -------------------------------------------------------------------------------- /goku/bebitofiufiu.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/bebitofiufiu.mp3 -------------------------------------------------------------------------------- /goku/calculadora.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/calculadora.mp3 -------------------------------------------------------------------------------- /goku/cayo la ley.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/cayo la ley.mp3 -------------------------------------------------------------------------------- /goku/tengo novia.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/tengo novia.mp3 -------------------------------------------------------------------------------- /goku/que me importa.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/que me importa.mp3 -------------------------------------------------------------------------------- /goku/super albañil.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/super albañil.mp3 -------------------------------------------------------------------------------- /goku/viva venezuela.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/viva venezuela.mp3 -------------------------------------------------------------------------------- /storage/img/catalogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/storage/img/catalogo.png -------------------------------------------------------------------------------- /storage/img/miniurl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/storage/img/miniurl.jpg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | tmp/* 2 | !tmp/.file 3 | node_modules/ 4 | session/ 5 | database.json 6 | package-lock.json 7 | .git/ -------------------------------------------------------------------------------- /storage/img/avatar_contact.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/storage/img/avatar_contact.png -------------------------------------------------------------------------------- /views/img/dark/balloon_centered_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_centered_normal.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_centered_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_centered_shadow.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_incoming_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_incoming_frame.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_incoming_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_incoming_normal.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_outgoing_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_outgoing_frame.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_outgoing_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_outgoing_normal.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_incoming_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_incoming_frame.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_outgoing_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_outgoing_frame.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_centered_pressed.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_centered_pressed.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_incoming_pressed.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_incoming_pressed.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_outgoing_pressed.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_outgoing_pressed.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_centered_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_centered_normal.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_centered_pressed.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_centered_pressed.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_centered_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_centered_shadow.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_incoming_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_incoming_normal.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_incoming_pressed.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_incoming_pressed.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_outgoing_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_outgoing_normal.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_outgoing_pressed.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_outgoing_pressed.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_incoming_normal_ext.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_incoming_normal_ext.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_incoming_normal_stkr.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_incoming_normal_stkr.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_incoming_pressed_ext.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_incoming_pressed_ext.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_outgoing_normal_ext.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_outgoing_normal_ext.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_outgoing_normal_stkr.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_outgoing_normal_stkr.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_outgoing_pressed_ext.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_outgoing_pressed_ext.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_incoming_normal_ext.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_incoming_normal_ext.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_outgoing_normal_ext.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_outgoing_normal_ext.9.png -------------------------------------------------------------------------------- /start.sh: -------------------------------------------------------------------------------- 1 | #!bin/bash 2 | GREEN='\033[0;32m' 3 | while : 4 | do 5 | echo "" 6 | npm install && npm start 7 | sleep 1 8 | 9 | done 10 | -------------------------------------------------------------------------------- /views/img/light/balloon_incoming_normal_stkr.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_incoming_normal_stkr.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_incoming_pressed_ext.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_incoming_pressed_ext.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_outgoing_normal_stkr.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_outgoing_normal_stkr.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_outgoing_pressed_ext.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_outgoing_pressed_ext.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_live_location_incoming_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_live_location_incoming_frame.9.png -------------------------------------------------------------------------------- /views/img/dark/balloon_live_location_outgoing_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/dark/balloon_live_location_outgoing_frame.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_live_location_incoming_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_live_location_incoming_frame.9.png -------------------------------------------------------------------------------- /views/img/light/balloon_live_location_outgoing_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/views/img/light/balloon_live_location_outgoing_frame.9.png -------------------------------------------------------------------------------- /goku/se unió usando el enlace de invitación del este grupo.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YerTX2/SonGOKU/HEAD/goku/se unió usando el enlace de invitación del este grupo.mp3 -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ai Hoshino", 3 | "description": "Simple WhatsApp Bot Multi Device", 4 | "repository": "https://github.com/StarlightsTeam/Ai-Hoshino", 5 | "logo": "https://i.ibb.co/wrnYz0L/file.jpg", 6 | "keywords": ["bot", "whatsapp", "whatsapp-bot", "Hoshino Ai", "Ai Hoshino", "Oshi No Ko"] 7 | } -------------------------------------------------------------------------------- /views/index.js: -------------------------------------------------------------------------------- 1 | window.onload = () => { 2 | let chat = document.querySelector('div.container-fluid') 3 | function addMsg(obj) { 4 | let html = document.createElement('span') 5 | html.className = 'msg' 6 | html.innerHTML = obj 7 | chat.appendChild(html) 8 | } 9 | 10 | window.onclick = () => addMsg(12) 11 | } 12 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:lts-buster 2 | 3 | RUN apt-get update && \ 4 | apt-get install -y \ 5 | ffmpeg \ 6 | imagemagick \ 7 | webp && \ 8 | apt-get upgrade -y && \ 9 | rm -rf /var/lib/apt/lists/* 10 | 11 | COPY package.json . 12 | 13 | RUN npm install && npm install qrcode-terminal 14 | 15 | COPY . . 16 | 17 | EXPOSE 5000 18 | 19 | CMD ["node", "index.js", "--server"] 20 | 21 | -------------------------------------------------------------------------------- /plugins/serbot-stop.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | if (global.conn.user.jid === conn.user.jid) { 3 | } else { 4 | await conn.reply(m.chat, `Adiós Ai :(`, m, rcanal) 5 | conn.ws.close() 6 | } 7 | } 8 | handler.help = ['stop'] 9 | handler.tags = ['serbot'] 10 | handler.command = ['stop', 'stopbot', 'stopbebot'] 11 | handler.owner = true 12 | 13 | export default handler -------------------------------------------------------------------------------- /plugins/fun-afk.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { text, conn }) => { 2 | let user = db.data.users[m.sender] 3 | user.afk = + new Date 4 | user.afkReason = text 5 | await m.reply(`🌀 Estas en *AFK*, Motivo *${text ? ': ' + text : ''}*`) 6 | } 7 | handler.help = ['afk '] 8 | handler.tags = ['game'] 9 | handler.command = ['afk'] 10 | handler.group = false 11 | 12 | export default handler -------------------------------------------------------------------------------- /plugins/rg-myns.js: -------------------------------------------------------------------------------- 1 | import { createHash } from 'crypto' 2 | 3 | let handler = async function (m, { conn, text, usedPrefix }) { 4 | let sn = createHash('md5').update(m.sender).digest('hex') 5 | await conn.reply(m.chat, `${sn}`, m, rcanal) 6 | } 7 | handler.help = ['sn'] 8 | handler.tags = ['rg'] 9 | handler.command = ['nserie', 'sn', 'mysn'] 10 | handler.register = true 11 | export default handler 12 | -------------------------------------------------------------------------------- /plugins/main-infototal.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, `*✅ Total de Funciones del bot* : ${totalf}`,m) 6 | } 7 | 8 | handler.help = ['totalfunciones'] 9 | handler.tags = ['main'] 10 | handler.command = ['totalfunciones'] 11 | handler.register = true 12 | export default handler 13 | -------------------------------------------------------------------------------- /plugins/_userPrem.js: -------------------------------------------------------------------------------- 1 | let handler = m => m 2 | export async function all(m) { 3 | let user = global.db.data.users[m.sender] 4 | if (m.chat.endsWith('broadcast')) return 5 | if (user.premiumTime != 0 && user.prem) { 6 | if (new Date() * 1 >= user.premiumTime) { 7 | await m.reply(`Premium expirado`) 8 | user.premiumTime = 0 9 | user.prem = false 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /plugins/owner-getdb.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | let handler = async (m, { conn, text }) => { 3 | let db = await fs.readFileSync('./database.json') 4 | return await conn.sendMessage(m.chat, { document: db, mimetype: 'application/json', fileName: 'database.json' }, { quoted: m }) 5 | } 6 | handler.help = ['getdb'] 7 | handler.tags = ['owner'] 8 | handler.command = /^(getdb)$/i 9 | 10 | handler.rowner = true 11 | 12 | export default handler -------------------------------------------------------------------------------- /plugins/group-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, 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 -------------------------------------------------------------------------------- /plugins/group-tag.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, participants}) => { 2 | let users = participants.map(u => u.id).filter(v => v !== conn.user.jid) 3 | if (!m.quoted) return m.reply(`🌀 Responde a un mensaje.`) 4 | conn.sendMessage(m.chat, { forward: m.quoted.fakeObj, mentions: users } ) 5 | } 6 | handler.help = ['tag'] 7 | handler.tags = ['group'] 8 | handler.command = /^(tag)$/i 9 | handler.admin = true 10 | handler.group = true 11 | 12 | export default handler -------------------------------------------------------------------------------- /plugins/owner-getsesion.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | let handler = async (m, { conn, text }) => { 3 | let sessions = await fs.readFileSync('./sessions/creds.json') 4 | return await conn.sendMessage(m.chat, { document: sessions, mimetype: 'application/json', fileName: 'creds.json' }, { quoted: m }) 5 | } 6 | handler.help = ['getsesion'] 7 | handler.tags = ['owner'] 8 | handler.command = /^(getsesion)$/i 9 | 10 | handler.rowner = true 11 | 12 | export default handler -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /plugins/group-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, 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 -------------------------------------------------------------------------------- /plugins/_fototeta.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, usedPrefix, command}) => { 2 | await conn.reply(m.chat,`*Padre nuestro, que estás en los Cielos, santificado sea tu nombre, venga tu Reino, hágase tu voluntad así en la tierra como en el cielo. y perdónanos nuestras deudas así como nosotros perdonamos a nuestros deudores, y no nos dejes caer en la tentación, mas líbranos del mal.*`, m) 3 | } 4 | handler.customPrefix = /^(Fototeta|fototeta)$/i 5 | handler.command = new RegExp 6 | export default handler 7 | -------------------------------------------------------------------------------- /plugins/group-totag.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, participants}) => { 2 | 3 | let users = participants.map(u => u.id).filter(v => v !== conn.user.jid) 4 | if (!m.quoted) return m.reply(`🚩 Responde a un mensaje.`) 5 | conn.sendMessage(m.chat, { forward: m.quoted.fakeObj, mentions: users } ) 6 | } 7 | 8 | handler.help = ['tag'] 9 | handler.tags = ['group'] 10 | handler.command = /^(totag|tag)$/i 11 | 12 | handler.admin = true 13 | handler.group = true 14 | 15 | export default handler -------------------------------------------------------------------------------- /plugins/owner-restart.js: -------------------------------------------------------------------------------- 1 | import { spawn } from 'child_process' 2 | let handler = async (m, { conn, isROwner, text }) => { 3 | if (!process.send) return m.react('✖️') 4 | if (conn.user.jid == conn.user.jid) { 5 | await m.reply('🚩 Reiniciando Bot...') 6 | process.send('reset') 7 | } else return m.react('✖️') 8 | } 9 | 10 | handler.help = ['restart'] 11 | handler.tags = ['owner'] 12 | handler.command = ['restart','reiniciar'] 13 | 14 | handler.rowner = true 15 | 16 | export default handler -------------------------------------------------------------------------------- /plugins/owner-otag.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, participants}) => { 2 | 3 | let users = participants.map(u => u.id).filter(v => v !== conn.user.jid) 4 | if (!m.quoted) return m.reply(`🚩 Responde a un mensaje.`) 5 | conn.sendMessage(m.chat, { forward: m.quoted.fakeObj, mentions: users } ) 6 | } 7 | 8 | handler.help = ['otag'] 9 | handler.tags = ['group'] 10 | handler.command = /^(otag|tag2)$/i 11 | 12 | handler.rowner = true 13 | handler.group = true 14 | 15 | export default handler -------------------------------------------------------------------------------- /plugins/tools-reenvia.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, participants, isAdmin, isOwner, usedPrefix, command}) => { 2 | try { 3 | if (!m.quoted) return conn.reply(m.chat, `✅ Responde a un mensaje para poder usar el comando coreectamente.`, m, rcanal) 4 | await conn.sendMessage(m.chat, { forward: m.quoted.fakeObj }, { quoted: m }) 5 | } catch { 6 | await m.react('✖️') 7 | }} 8 | handler.help = ['reenviar'] 9 | handler.tags = ['tools'] 10 | handler.command = ['reenviar'] 11 | 12 | export default handler 13 | -------------------------------------------------------------------------------- /plugins/owner-update.js: -------------------------------------------------------------------------------- 1 | import { execSync } from 'child_process' 2 | let handler = async (m, { conn, text }) => { 3 | await m.react('🕓') 4 | if (conn.user.jid == conn.user.jid) { 5 | let stdout = execSync('git pull' + (m.fromMe && text ? ' ' + text : '')) 6 | await conn.reply(m.chat, stdout.toString(), m) 7 | await m.react('✅') 8 | }} 9 | handler.help = ['update'] 10 | handler.tags = ['owner'] 11 | handler.command = ['update', 'actualizar', 'fix', 'fixed'] 12 | handler.rowner = true 13 | 14 | export default handler -------------------------------------------------------------------------------- /plugins/tools-qrcode.js: -------------------------------------------------------------------------------- 1 | import { toDataURL } from 'qrcode' 2 | 3 | let handler = async (m, { conn, text }) => { 4 | 5 | if (!text) return conn.reply(m.chat, `🚩 Ingresa un texto junto al comando.`, m, rcanal) 6 | conn.sendFile(m.chat, await toDataURL(text.slice(0, 2048), { scale: 8 }), 'qrcode.png', listo, m, null, rcanal) 7 | } 8 | handler.help = ['qrcode **'] 9 | handler.tags = ['tools'] 10 | handler.command = ['qrcode'] 11 | //handler.limit = 1 12 | handler.register = true 13 | 14 | export default handler -------------------------------------------------------------------------------- /plugins/img-waifu.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | let handler = async (m, { conn, usedPrefix, command }) => { 4 | try { 5 | let res = await fetch('https://api.waifu.pics/sfw/waifu') 6 | if (!res.ok) return 7 | let json = await res.json() 8 | if (!json.url) return 9 | await conn.sendFile(m.chat, json.url, 'thumbnail.jpg', null, m) 10 | } catch { 11 | }} 12 | handler.help = ['waifu'] 13 | handler.tags = ['img'] 14 | handler.command = ['waifu'] 15 | handler.register = true 16 | //handler.limit = 1 17 | export default handler -------------------------------------------------------------------------------- /plugins/img-megumin.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | let handler = async (m, { conn, usedPrefix, command }) => { 4 | try { 5 | let res = await fetch('https://api.waifu.pics/sfw/megumin') 6 | if (!res.ok) return 7 | let json = await res.json() 8 | if (!json.url) return 9 | await conn.sendFile(m.chat, json.url, 'thumbnail.jpg', null, m) 10 | } catch { 11 | }} 12 | handler.help = ['megumin'] 13 | handler.tags = ['img'] 14 | handler.command = ['megumin'] 15 | handler.register = true 16 | //handler.limit = 1 17 | export default handler -------------------------------------------------------------------------------- /plugins/img-ppcouple.js: -------------------------------------------------------------------------------- 1 | import Scraper from "@SumiFX/Scraper" 2 | 3 | let handler = async (m, { conn, text, usedPrefix, command }) => { 4 | try { 5 | let { women, man } = await Scraper.ppcouple("xd") 6 | await conn.sendFile(m.chat, women, 'thumbnail.jpg', `🐢 Chica`, m) 7 | await conn.sendFile(m.chat, man, 'thumbnail.jpg', `😺 Chico`, m) 8 | } catch { 9 | }} 10 | handler.help = ['ppcouple'] 11 | handler.tags = ['img'] 12 | handler.command = ['ppcouple', 'par'] 13 | handler.register = true 14 | //handler.limit = 1 15 | export default handler -------------------------------------------------------------------------------- /plugins/img-shinobu.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | let handler = async (m, { conn, usedPrefix, command }) => { 4 | try { 5 | let res = await fetch('https://api.waifu.pics/sfw/shinobu') 6 | if (!res.ok) return 7 | let json = await res.json() 8 | if (!json.url) return 9 | await conn.sendFile(m.chat, json.url, 'thumbnail.jpg', null, m) 10 | } catch { 11 | }} 12 | handler.help = ['shinobu'] 13 | handler.tags = ['img'] 14 | handler.command = ['shinobu'] 15 | handler.register = true 16 | //handler.limit = 1 17 | export default handler -------------------------------------------------------------------------------- /plugins/info-speedtest.js: -------------------------------------------------------------------------------- 1 | import cp from 'child_process'; 2 | import { promisify } from 'util'; 3 | 4 | const exec = promisify(cp.exec); 5 | 6 | const handler = async (m) => { 7 | try { 8 | const { stdout } = await exec('python3 speed.py'); 9 | if (stdout.trim()) m.reply(stdout); 10 | } catch (e) { 11 | m.reply('Hubo un error al ejecutar el test de velocidad.'); 12 | } 13 | }; 14 | 15 | handler.help = ['speedtest']; 16 | handler.tags = ['info']; 17 | handler.command = /^(speedtest|stest)$/i; 18 | 19 | export default handler; -------------------------------------------------------------------------------- /plugins/maker-sadcat.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, args, usedPrefix, command }) => { 2 | let response = args.join(' ').split('|') 3 | if (!text) return m.reply(`🔍 Ingresa un texto junto al comando.`) 4 | try { 5 | let res = `https://api.popcat.xyz/sadcat?text=${text}` 6 | await conn.sendFile(m.chat, res, 'thumbnail.jpg', null, m) 7 | } catch { 8 | }} 9 | handler.help = ['sadcat '] 10 | handler.tags = ['logo'] 11 | handler.command = ['sadcat', 'catsad'] 12 | //handler.limit = 1 13 | handler.register = true 14 | export default handler -------------------------------------------------------------------------------- /plugins/main-creator.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, usedPrefix, isOwner }) => { 2 | let vcard = `BEGIN:VCARD\nVERSION:3.0\nN:YerTX2;;\nFN:YerTX2 \nORG:YerTX2 🌟\nTITLE:\nitem1.TEL;waid=51907376960:51907376960\nitem1.X-ABLabel:YerTX2 🌟\nX-WA-BIZ-DESCRIPTION:\nX-WA-BIZ-NAME:YerTX2 🌟\nEND:VCARD` 3 | await conn.sendMessage(m.chat, { contacts: { displayName: 'YerTX2.xyz⁩', contacts: [{ vcard }] }}, {quoted: m}) 4 | } 5 | handler.help = ['owner'] 6 | handler.tags = ['main'] 7 | handler.command = ['owner', 'creator', 'creador', 'dueño'] 8 | 9 | export default handler 10 | -------------------------------------------------------------------------------- /plugins/owner-salir.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, command }) => { 2 | let id = text ? text : m.chat 3 | let pp = 'https://telegra.ph/file/f971feff8db773b6b3633.mp4' 4 | await conn.sendMessage(m.chat, { video: { url: pp }, gifPlayback: true, caption: '*Adios a todos, el Bot se despide! (≧ω≦)ゞ*', mentions: [m.sender] }, { quoted: m }) 5 | await conn.groupLeave(id)} 6 | handler.help = ['salir'] 7 | handler.tags = ['owner'] 8 | handler.command = /^(salir|out|leavegc|leave|salirdelgrupo)$/i 9 | handler.group = true 10 | handler.rowner = true 11 | 12 | export default handler -------------------------------------------------------------------------------- /plugins/owner-join.js: -------------------------------------------------------------------------------- 1 | let linkRegex = /chat.whatsapp.com\/([0-9A-Za-z]{20,24})( [0-9]{1,3})?/i 2 | 3 | let handler = async (m, { conn, text, isOwner, usedPrefix, command }) => { 4 | 5 | if (!text) return m.reply(`🔍 Ingresa el enlace del Grupo.`) 6 | let [_, code] = text.match(linkRegex) || [] 7 | if (!code) return m.reply('Enlace invalido.') 8 | let res = await conn.groupAcceptInvite(code) 9 | m.reply(`✅ Me uní correctamente al Grupo *${res}*`) 10 | } 11 | handler.help = ['join '] 12 | handler.tags = ['owner'] 13 | handler.command = ['join', 'entrar'] 14 | handler.owner = true 15 | 16 | export default handler -------------------------------------------------------------------------------- /plugins/_premium.js: -------------------------------------------------------------------------------- 1 | let handler = m => m 2 | export async function all(m) { 3 | let user = global.db.data.users[m.sender] 4 | if (m.chat.endsWith('broadcast')) return 5 | if (user.premiumTime != 0 && user.premium) { 6 | if (new Date() * 1 >= user.premiumTime) { 7 | await m.reply(`🚩 @${m.sender.split`@`[0]} se terminó tu tiempo como usuario *Premium.*`, false, { mentions: [m.sender] }) 8 | user.premiumTime = 0 9 | user.premium = false 10 | }}} 11 | //handler.help = ['premium '] 12 | //handler.tags = ['owner'] 13 | //handler.command = ['premium', 'darpremium'] 14 | //handler.owner = true 15 | 16 | export default handler 17 | -------------------------------------------------------------------------------- /plugins/rg-unreg.js: -------------------------------------------------------------------------------- 1 | import { createHash } from 'crypto' 2 | let handler = async function (m, { conn, args, usedPrefix}) { 3 | if (!args[0]) return m.reply(`🔍 Ingresa tu número de serie junto al comando.`) 4 | let user = global.db.data.users[m.sender] 5 | let sn = createHash('md5').update(m.sender).digest('hex') 6 | if (args[0] !== sn) return m.reply('❌ Número de serie incorrecto') 7 | user.registered = false 8 | m.reply(`✅ Registro eliminado con éxito.`) 9 | } 10 | handler.help = ['unreg'] 11 | handler.tags = ['rg'] 12 | 13 | handler.command = ['unreg'] 14 | handler.register = true 15 | 16 | export default handler 17 | -------------------------------------------------------------------------------- /plugins/owner-savefile.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | let handler = async (m, { text, usedPrefix, command }) => { 3 | if (!text) return m.reply(`🍭 Ingresa la Ruta y el nombre del Archivo junto al comando.`) 4 | try { 5 | if (!m.quoted.text) return m.reply(`Responde al mensaje.`) 6 | let path = `${text}.js` 7 | await fs.writeFileSync(path, m.quoted.text) 8 | m.reply(`🍭 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 | 16 | handler.rowner = true 17 | export default handler -------------------------------------------------------------------------------- /plugins/cmd-list.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | conn.reply(m.chat, ` 3 | *LISTA DE COMANDOS* 4 | 5 | *Info:* Si esta en *negrita* esta bloqueado 6 | 7 | ────────────────── 8 | ${Object.entries(global.db.data.sticker).map(([key, value], index) => `${index + 1}. ${value.locked ? `(bloqueado) ${key}` : key} : ${value.text}`).join('\n')} 9 | 10 | `.trim(), null, { 11 | mentions: Object.values(global.db.data.sticker).map(x => x.mentionedJid).reduce((a, b) => [...a, ...b], []) 12 | }) 13 | } 14 | 15 | handler.help = ['listcmd'] 16 | handler.tags = ['main'] 17 | handler.command = ['listcmd'] 18 | 19 | export default handler 20 | -------------------------------------------------------------------------------- /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)} -------------------------------------------------------------------------------- /plugins/img-neko.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | let handler = async (m, { conn, command }) => { 3 | let ne = await (await fetch('https://raw.githubusercontent.com/ArugaZ/grabbed-results/main/random/anime/neko.txt')).text() 4 | let nek = ne.split('\n') 5 | let neko = pickRandom(nek) 6 | conn.sendFile(m.chat, neko, 'error.jpg', `Uwu 🥺`, m) 7 | //conn.sendButton(m.chat, 'Uwu 🥺', wm, neko, [['SIGUIENTE IMAGEN', `/${command}`]], null, null, m) 8 | } 9 | handler.command = /^(neko)$/i 10 | handler.tags = ['img'] 11 | handler.help = ['neko'] 12 | export default handler 13 | function pickRandom(list) { 14 | return list[Math.floor(Math.random() * list.length)] 15 | } -------------------------------------------------------------------------------- /plugins/main-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 latensi = speed() - timestamp; 7 | exec(`neofetch --stdout`, (error, stdout, stderr) => { 8 | let child = stdout.toString("utf-8"); 9 | let ssd = child.replace(/Memory:/, "Ram:"); 10 | m.reply('*`☁️ Mi Velocidad es de:`*' + ` ${latensi.toFixed(4)} _ms_`); 11 | }); 12 | } 13 | handler.help = ['ping'] 14 | handler.tags = ['main'] 15 | handler.command = ['ping', 'speed', 'p'] 16 | 17 | export default handler 18 | -------------------------------------------------------------------------------- /plugins/tools-ssweb.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | let handler = async (m, { conn, command, args }) => { 3 | if (!args[0]) return conn.reply(m.chat, '🧃 Ingresa el enlace de la página.', m, rcanal) 4 | await m.react('⌛') 5 | try { 6 | let ss = await (await fetch(`https://image.thum.io/get/fullpage/${args[0]}`)).buffer() 7 | conn.sendFile(m.chat, ss, 'error.png', listo, m, null, rcanal) 8 | await m.react('✅') 9 | } catch { 10 | await m.react('✖️') 11 | }} 12 | handler.help = ['ss', 'ssweb'].map(v => v + ' **') 13 | handler.tags = ['tools'] 14 | handler.command = /^ss(web)?f?$/i 15 | handler.register = true 16 | //handler.limit = 1 17 | export default handler 18 | -------------------------------------------------------------------------------- /plugins/sticker-scat.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | import { sticker } from '../lib/sticker.js' 3 | 4 | let handler = async (m, { 5 | conn 6 | }) => { 7 | let res = await fetch('https://nekos.life/api/v2/img/meow') 8 | let json = await res.json() 9 | let stiker = await sticker(null, json.url, global.packname, global.author) 10 | if (stiker) return conn.sendFile(m.chat, stiker, 'sticker.gif', '', m, false, { 11 | asSticker: true 12 | }) 13 | throw stiker.toString() 14 | } 15 | handler.help = ['scat'] 16 | handler.tags = ['sticker'] 17 | handler.command = ["scat", "stickercat", "cats"] 18 | handler.register = true 19 | export default handler -------------------------------------------------------------------------------- /plugins/rpg-chetarki.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, isOwner }) => { 2 | if (!isOwner) { 3 | return m.reply('❌ Este comando solo está disponible para los propietarios.'); 4 | } 5 | 6 | let users = global.db.data.users; 7 | if (users[m.sender]) { 8 | users[m.sender].limit = Infinity; 9 | await m.reply('¡Ahora tienes *KI infinito*! 🎉'); 10 | } else { 11 | await m.reply('❌ No se pudo encontrar al usuario en la base de datos.'); 12 | } 13 | }; 14 | 15 | handler.help = ['chetarki']; 16 | handler.tags = ['rpg']; 17 | handler.command = ['chetarki']; 18 | handler.register = true; 19 | handler.owner = true; 20 | 21 | export default handler; 22 | -------------------------------------------------------------------------------- /plugins/serbot-token.js: -------------------------------------------------------------------------------- 1 | import fs from "fs" 2 | async function handler(m, {usedPrefix}) { 3 | const user = m.sender.split("@")[0] 4 | if (fs.existsSync("./serbot/" + user + "/creds.json")) { 5 | let token = Buffer.from(fs.readFileSync("./serbot/" + user + "/creds.json"), "utf-8").toString("base64") 6 | await m.reply(`✨ No compartas tu Token con nadie.\n📫 Tu Token es:`) 7 | await m.reply(token) 8 | } else { 9 | await m.reply(`✨ No tienes un Token activo.`) 10 | } 11 | } 12 | handler.command = ['token'] 13 | handler.help = ['token'] 14 | handler.tags = ['serbot'] 15 | handler.registrado = true 16 | handler.private = false 17 | export default handler 18 | -------------------------------------------------------------------------------- /plugins/rpg-ki.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, 'El usuario no se encuentra en mi base de Datos.', m) 5 | let user = global.db.data.users[who] 6 | await m.reply(`${who == m.sender ? `Tienes *${user.limit} ⚡ KI* en tu Cartera` : `El usuario @${who.split('@')[0]} tiene *${user.limit} ⚡ KI* en su Cartera`}. `, null, { mentions: [who] }) 7 | } 8 | 9 | handler.help = ['ki'] 10 | handler.tags = ['rpg'] 11 | handler.command = ['ki'] 12 | handler.register = true 13 | export default handler 14 | -------------------------------------------------------------------------------- /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 de la persona que te gusta*`, m) 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*`, m) 8 | let love = `❤️ *${text1}* tu oportunidad de estar con *${text2}* es de *${Math.floor(Math.random() * 100)}%* 👩🏻‍❤️‍👨🏻` 9 | 10 | m.reply(love, null, { mentions: conn.parseMention(love) }) 11 | 12 | } 13 | handler.help = ['%amor'] 14 | handler.tags = ['game'] 15 | handler.command = /^(%amor)$/i 16 | 17 | handler.register = true 18 | 19 | export default handler 20 | -------------------------------------------------------------------------------- /plugins/group-kick.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, participants, usedPrefix, command, isROwner }) => { 2 | 3 | let kickte = `Menciona al usuario que deseas eliminar.` 4 | 5 | if (!m.mentionedJid[0] && !m.quoted) return m.reply(kickte, m.chat, { mentions: conn.parseMention(kickte)}) 6 | let user = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted.sender 7 | let owr = m.chat.split`-`[0] 8 | await conn.groupParticipantsUpdate(m.chat, [user], 'remove') 9 | m.reply(`✅ Usuario eliminado.`) 10 | } 11 | 12 | handler.help = ['kick @user'] 13 | handler.tags = ['group'] 14 | handler.command = ['kick', 'expulsar'] 15 | handler.admin = true 16 | handler.group = true 17 | handler.botAdmin = true 18 | 19 | export default handler -------------------------------------------------------------------------------- /plugins/_antiBot.js: -------------------------------------------------------------------------------- 1 | import { areJidsSameUser } from '@whiskeysockets/baileys' 2 | 3 | export async function before(m, { participants, conn }) { 4 | if (m.isGroup) { 5 | let chat = global.db.data.chats[m.chat] 6 | 7 | if (!chat.antiBot) { 8 | return 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 this.groupLeave(m.chat) 21 | }, 5000) 22 | } 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /plugins/tools-base64.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { args }) => { 2 | if (m.quoted && m.quoted.text) { 3 | if (/^enc(rypt)?$/i.test(args[0])) m.reply(Buffer.from(m.quoted.text, 'utf-8').toString('base64')) 4 | else if (/^dec(rypt)?$/i.test(args[0])) m.reply(Buffer.from(m.quoted.text, 'base64').toString('utf-8')) 5 | } else if (args.length >= 2) { 6 | if (/^enc(rypt)?$/i.test(args[0])) m.reply(Buffer.from(args.slice(1).join(' '), 'utf-8').toString('base64')) 7 | else if (/^dec(rypt)?$/i.test(args[0])) m.reply(Buffer.from(args.slice(1).join(' '), 'base64').toString('utf-8')) 8 | } else throw false 9 | } 10 | handler.tags = ['tools'] 11 | handler.help = ['base64 '] 12 | handler.command = /^base64$/i 13 | export default handler -------------------------------------------------------------------------------- /plugins/owner-exec2.js: -------------------------------------------------------------------------------- 1 | import cp, { exec as _exec } from 'child_process' 2 | import { promisify } from 'util' 3 | let exec = promisify(_exec).bind(cp) 4 | let handler = async (m, { conn, isOwner, command, text }) => { 5 | if (conn.user.jid != conn.user.jid) return 6 | m.reply('🍭 Ejecutando...') 7 | let o 8 | try { 9 | o = await exec(command.trimStart() + ' ' + text.trimEnd()) 10 | } catch (e) { 11 | o = e 12 | } finally { 13 | let { stdout, stderr } = o 14 | if (stdout.trim()) m.reply(stdout) 15 | if (stderr.trim()) m.reply(stderr) 16 | } 17 | } 18 | handler.help = ['$'] 19 | handler.tags = ['advanced'] 20 | handler.customPrefix = /^[$] / 21 | handler.command = new RegExp 22 | handler.rowner = true 23 | export default handler -------------------------------------------------------------------------------- /plugins/_antiArab.js: -------------------------------------------------------------------------------- 1 | let handler = m => m 2 | 3 | handler.before = async function (m, {conn, isAdmin, isBotAdmin, isOwner} ) { 4 | if (!m.isGroup) return !1 5 | let chat = global.db.data.chats[m.chat] 6 | 7 | if (isBotAdmin && chat.onlyLatinos && !isAdmin && !isOwner) { 8 | let forbidPrefixes = ["212", "265", "234", "258", "263", "93", "967", "92", "234", "91", "254", "213"] 9 | 10 | for (let prefix of forbidPrefixes) { 11 | if (m.sender.startsWith(prefix)) { 12 | m.reply('🚩 En este grupo solo se permite personas de habla hispana.', m.sender) 13 | await conn.groupParticipantsUpdate(m.chat, [m.sender], 'remove') 14 | return false 15 | } 16 | } 17 | } 18 | 19 | return true 20 | } 21 | 22 | export default handler -------------------------------------------------------------------------------- /plugins/tools-tomp3.js: -------------------------------------------------------------------------------- 1 | import { toAudio } from '../lib/converter.js' 2 | 3 | let handler = async (m, { conn, usedPrefix, command }) => { 4 | let q = m.quoted ? m.quoted : m 5 | let mime = (m.quoted ? m.quoted : m.msg).mimetype || '' 6 | if (!/video|audio/.test(mime)) throw `✅ Responde al *Video* o *Nota de Voz* que desea convertir a mp3.` 7 | try { 8 | let media = await q.download?.() 9 | if (!media) return null 10 | let audio = await toAudio(media, 'mp4') 11 | if (!audio.data) return null 12 | await conn.sendFile(m.chat, audio.data, 'audio.mp3', '', m, null, { mimetype: 'audio/mp4' }) 13 | } catch { 14 | }} 15 | handler.help = ['tomp3'] 16 | handler.tags = ['tools'] 17 | handler.command = ['tomp3', 'toaudio'] 18 | handler.register = true 19 | 20 | export default handler 21 | -------------------------------------------------------------------------------- /plugins/rpg-bank.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 m.react('✖️') 4 | if (!(who in global.db.data.users)) return m.reply(`*El usuario no se encuentra en mi base de datos*`) 5 | 6 | let user = global.db.data.users[who] 7 | 8 | if (user.bank === undefined) user.bank = 0; 9 | 10 | await m.reply(`${who == m.sender ? `Tienes *${user.bank} Ki⚡* en el Banco` : `El usuario @${who.split('@')[0]} tiene *${user.bank} ki ⚡* en el Banco`}`, null, { mentions: [who] }) 11 | } 12 | 13 | handler.help = ['bank'] 14 | handler.tags = ['rpg'] 15 | handler.command = ['bank', 'banco'] 16 | handler.register = true 17 | export default handler -------------------------------------------------------------------------------- /plugins/group-poll.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, usedPrefix, command, participants }) => { 2 | text = text.split(`|`) 3 | if (!text || text.length == 1) return conn.reply(m.chat, `🚩 Ingresa la pregunta y opciones.\n\n*Ejemplo:*\n*${usedPrefix + command}*Ella te ama si o no?|si|no`, m, rcanal) 4 | if (text.length > 1 && text.length < 3) return m.reply(`Mínimo *2* opciones.`) 5 | if (text.length > 13) return m.reply(`Máximo *12* opciones`) 6 | let array = [] 7 | text.slice(1).forEach(function(i) { array.push(i) }) 8 | await conn.sendPoll(m.chat, text[0], array) 9 | } 10 | handler.tags = ['group'] 11 | handler.help = ['encuesta **'] 12 | handler.command = ['encuesta', 'poll'] 13 | handler.group = true 14 | handler.register = true 15 | 16 | export default handler 17 | -------------------------------------------------------------------------------- /plugins/nsfw-hentai.js: -------------------------------------------------------------------------------- 1 | import { googleImage, pinterest } from '@bochilteam/scraper' 2 | 3 | let handler = async (m, { conn, text, usedPrefix, command }) => { 4 | if (!global.db.data.chats[m.chat].nsfw) return conn.reply(m.chat, `🚩 El grupo no admite contenido *Nsfw.*\n\n> Para activarlo un *Administrador* debe usar el comando */nsfw on*`, m, rcanal) 5 | 6 | await m.react('🕓') 7 | try { 8 | let res = await (await googleImage('Imagen ' + 'hentai')).getRandom() 9 | await conn.sendFile(m.chat, json.url, 'thumbnail.jpg', `*» Hentai*`, m, null, rcanal) 10 | await m.react('✅') 11 | } catch { 12 | await m.react('✖️') 13 | }} 14 | handler.help = ['hentai'] 15 | handler.tags = ['nsfw'] 16 | handler.command = ['hentai'] 17 | handler.group = true 18 | handler.register = true 19 | handler.limit = 10 20 | export default handler -------------------------------------------------------------------------------- /plugins/downloader-likee.js: -------------------------------------------------------------------------------- 1 | //Para Usuarios De Likee 🙃 2 | import fetch from 'node-fetch' 3 | 4 | let handler = async (m, { conn, text }) => { 5 | if (!text) return conn.reply(m.chat, '🚩 Ingrese la url de un video de *Likee*.', m, rcanal) 6 | await m.react('🕓') 7 | try { 8 | let app = await fetch(`https://apis-starlights-team.koyeb.app/starlight/like-downloader?url=${text}`, { headers: { 'Content-Type': 'application/json' }}) 9 | let json = await app.json() 10 | let video = json.links['no watermark'] 11 | await conn.sendFile(m.chat, video, 'samu.mp4', `${json.caption}`, m, null, rcanal) 12 | await m.react('✅') 13 | } catch { 14 | await m.react('✖️') 15 | }} 16 | handler.help = ['likeedl **'] 17 | handler.tags = ['downloader'] 18 | handler.command = /^(likeedl)$/i 19 | handler.register = true 20 | export default handler -------------------------------------------------------------------------------- /plugins/_getmsg.js: -------------------------------------------------------------------------------- 1 | 2 | export async function all(m) { 3 | if (!m.chat.endsWith('.net') || m.fromMe || m.key.remoteJid.endsWith('status@broadcast')) return 4 | if (global.db.data.chats[m.chat].isBanned) return 5 | if (global.db.data.users[m.sender].banned) return 6 | if (m.isBaileys) return 7 | let msgs = global.db.data.msgs 8 | if (!(m.text in msgs)) return 9 | let _m = this.serializeM(JSON.parse(JSON.stringify(msgs[m.text]), (_, v) => { 10 | if ( 11 | v !== null && 12 | typeof v === 'object' && 13 | 'type' in v && 14 | v.type === 'Buffer' && 15 | 'data' in v && 16 | Array.isArray(v.data)) { 17 | return Buffer.from(v.data) 18 | } 19 | return v 20 | })) 21 | await _m.copyNForward(m.chat, true) 22 | } 23 | -------------------------------------------------------------------------------- /plugins/dl-apk.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | let handler = async (m, { conn, text }) => { 4 | if (!text) { 5 | return m.reply("❀ Ingresa el nomnbre de la app que quieres buscar") 6 | } 7 | 8 | try { 9 | let api = await fetch(`https://api.giftedtech.my.id/api/download/apkdl?apikey=gifted&appName=${text}`) 10 | let json = await api.json() 11 | let { appname, appicon, developer, download_url, mimetype } = json.result 12 | let txt = `- *Nombre* : ${appname} 13 | - *Creador* : ${developer}` 14 | 15 | await conn.sendFile(m.chat, appicon, 'HasumiBotFreeCodes.jpg', txt, m) 16 | await conn.sendMessage(m.chat, { document: { url: download_url }, mimetype: mimetype, fileName: appname + '.apk', caption: null }, {quoted: m}) 17 | } catch (error) { 18 | console.error(error) 19 | }} 20 | 21 | handler.command = /^(apk)$/i 22 | 23 | export default handler -------------------------------------------------------------------------------- /plugins/downloader-pinterest.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | let handler = async (m, { conn, text, usedPrefix, command }) => { 4 | try { 5 | if (!text) throw m.reply(`🔍Ingresa el enlace del *Vídeo* o *Imagen* de Pinterest que deseas descargar.`) 6 | let res = await axios.get(`https://api-starlights-team.koyeb.app/api/pindl?url=${text}`) 7 | let { type, url: sms } = res.data 8 | if (type === 'image') { 9 | await conn.sendMessage(m.chat, { image: { url: sms }, quoted: m }) 10 | } else if (type === 'video') { 11 | await conn.sendMessage(m.chat, { video: { url: sms }, quoted: m }) 12 | } else { 13 | throw m.reply(`Error`) 14 | }} catch (error) { 15 | }} 16 | handler.tags = ['downloader'] 17 | handler.help = ['pindl '] 18 | handler.command = /^(pindl)$/i 19 | //handler.register = true 20 | handler.group = true 21 | handler.limit = 1 22 | export default handler -------------------------------------------------------------------------------- /plugins/downloader-fb.js: -------------------------------------------------------------------------------- 1 | import Starlights from '@StarlightsTeam/Scraper' 2 | 3 | let handler = async (m, { conn, args, usedPrefix, command }) => { 4 | if (!args || !args[0]) return conn.reply(m.chat, '🚩 Ingresa el enlace del vídeo de Facebook junto al comando.\n\n`Ejemplo:`\n' + `> *${usedPrefix + command}* https://www.facebook.com/official.trash.gang/videos/873759786348039/?mibextid=rS40aB7S9Ucbxw6v`, m, rcanal) 5 | await m.react('🕓') 6 | try { 7 | let { dl_url } = await Starlights.fbdl(args[0]) 8 | await conn.sendFile(m.chat, dl_url, 'fbdl.mp4', listo, m, null, rcanal) 9 | await m.react('✅') 10 | } catch { 11 | await m.react('✖️') 12 | }} 13 | handler.help = ['fb **'] 14 | handler.tags = ['downloader'] 15 | handler.command = /^(facebook|fb|facebookdl|fbdl)$/i 16 | //handler.limit = 1 17 | handler.group = true 18 | handler.limit = 2 19 | export default handler -------------------------------------------------------------------------------- /plugins/group-link.js: -------------------------------------------------------------------------------- 1 | import { areJidsSameUser } from '@whiskeysockets/baileys' 2 | let handler = async (m, { conn, args }) => { 3 | let group = m.chat 4 | if (/^[0-9]{5,16}-?[0-9]+@g\.us$/.test(args[0])) group = args[0] 5 | let groupMetadata = await conn.groupMetadata(group) 6 | if (!groupMetadata) return m.react('✖️') 7 | if (!('participants' in groupMetadata)) return m.react('✖️') 8 | let me = groupMetadata.participants.find(user => areJidsSameUser(user.id, conn.user.id)) 9 | if (!me) return m.reply('*🌀 No estoy en ese grupo :(*') 10 | if (!me.admin) return m.reply('*🌀 No soy administradora*') 11 | m.reply('https://chat.whatsapp.com/' + await conn.groupInviteCode(group)) 12 | } 13 | handler.help = ['link'] 14 | handler.tags = ['group'] 15 | handler.command = ['link', 'linkgroup'] 16 | handler.group = true 17 | export default handler 18 | -------------------------------------------------------------------------------- /plugins/fun-_afk.js: -------------------------------------------------------------------------------- 1 | export async function before(m) { 2 | let user = global.db.data.users[m.sender] 3 | if (user.afk > 0) { 4 | await m.reply(`🌀 Dejaste de estar *AFK* despues de *${(new Date - user.afk).toTimeString()}.*`) 5 | user.afk = 0 6 | user.afkReason = '' 7 | } 8 | let jids = [...new Set([...(m.mentionedJid || []), ...(m.quoted ? [m.quoted.sender] : [])])] 9 | for (let jid of jids) { 10 | let user = global.db.data.users[jid] 11 | if (!user) 12 | continue 13 | let afkTime = user.afk 14 | if (!afkTime || afkTime < 0) 15 | continue 16 | let reason = user.afkReason || '' 17 | await m.reply(`🌀 El usuario que intentas etiquetar esta *AFK* por la razón *${reason ? reason : '...'}* durante *${(new Date - afkTime).toTimeString()}*.`) 18 | } 19 | return true 20 | } -------------------------------------------------------------------------------- /plugins/downloader-ig.js: -------------------------------------------------------------------------------- 1 | import Starlights from '@StarlightsTeam/Scraper' 2 | 3 | let handler = async (m, { conn, args, usedPrefix, command }) => { 4 | if (!args[0]) return conn.reply(m.chat, '🚩 Ingresa el enlace del vídeo de Instagram junto al comando.\n\n`Ejemplo:`\n' + `> *${usedPrefix + command}* https://www.instagram.com/p/C60xXk3J-sb/?igsh=YzljYTk1ODg3Zg==`, m, rcanal) 5 | await m.react('🕓') 6 | try { 7 | let { dl_url } = await Starlights.igdl(args[0]) 8 | await conn.sendFile(m.chat, dl_url, 'igdl.mp4', listo, m, null, rcanal) 9 | await m.react('✅') 10 | } catch { 11 | await m.react('✖️') 12 | }} 13 | handler.help = ['instagram **'] 14 | handler.tags = ['downloader'] 15 | handler.command = /^(instagramdl|instagram|igdl|ig|instagramdl2|instagram2|igdl2|ig2|instagramdl3|instagram3|igdl3|ig3)$/i 16 | //handler.limit = 1 17 | handler.register = true 18 | export default handler -------------------------------------------------------------------------------- /plugins/serach-google.js: -------------------------------------------------------------------------------- 1 | import {googleIt} from '@bochilteam/scraper' 2 | import google from 'google-it' 3 | import axios from 'axios' 4 | let handler = async (m, { conn, command, args, usedPrefix }) => { 5 | const fetch = (await import('node-fetch')).default; 6 | const text = args.join` ` 7 | if (!text) return conn.reply(m.chat, '🔍 Ingresa lo que deseas buscar en Google.', m) 8 | const url = 'https://google.com/search?q=' + encodeURIComponent(text) 9 | google({'query': text}).then(res => { 10 | let teks = `*🔎 Resultado de* : ${text}\n\n` 11 | for (let g of res) { 12 | teks += `*🔍 Titulo ∙* ${g.title}\n*📚 Info ∙* ${g.snippet}\n*⛓ Url ∙* ${g.link}\n\n` 13 | } 14 | conn.reply(m.chat, teks, m) 15 | }) 16 | } 17 | handler.help = ['google '] 18 | handler.tags = ['tools', 'search'] 19 | handler.command = /^googlef?$/i 20 | handler.register = true 21 | export default handler 22 | -------------------------------------------------------------------------------- /plugins/nsfw-rule34.js: -------------------------------------------------------------------------------- 1 | import Starlights from "@StarlightsTeam/Scraper" 2 | 3 | let handler = async (m, { conn, text, usedPrefix, command }) => { 4 | if (!global.db.data.chats[m.chat].nsfw) return conn.reply(m.chat, `🚩 El grupo no admite contenido *Nsfw.*\n\n> Para activarlo un *Administrador* debe usar el comando */nsfw on*`, m, rcanal) 5 | if (!text) return m.reply('🚩 Ingresa el nombre de la imágen que estas buscando.') 6 | await m.react('🕓') 7 | try { 8 | let { dl_url } = await Starlights.rule34(text) 9 | await conn.sendFile(m.chat, dl_url, 'thumbnail.jpg', `*» Resultado* : ${text}`, m, null, rcanal) 10 | await m.react('✅') 11 | } catch { 12 | await m.react('✖️') 13 | }} 14 | handler.help = ['rule34 **'] 15 | handler.tags = ['nsfw'] 16 | handler.command = ['rule34', 'r34'] 17 | handler.register = true 18 | //handler.limit = 20 19 | handler.group = true 20 | export default handler -------------------------------------------------------------------------------- /plugins/owner-banlist.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, isOwner }) => { 2 | let chats = Object.entries(global.db.data.chats).filter(chat => chat[1].isBanned) 3 | let users = Object.entries(global.db.data.users).filter(user => user[1].banned) 4 | let 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 | handler.help = ['banlist'] 17 | handler.tags = ['owner'] 18 | handler.command = /^banlist(ned)?|ban(ned)?list|daftarban(ned)?$/i 19 | handler.rowner = true 20 | export default handler -------------------------------------------------------------------------------- /plugins/downloader-mediafire.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch'; 2 | 3 | let HS = async (m, { conn, text }) => { 4 | if (!text) return conn.reply(m.chat, `❀ Ingresa un link de mediafire`, m) 5 | 6 | try { 7 | let api = await fetch(`https://restapi.apibotwa.biz.id/api/mediafire?url=${text}`) 8 | let json = await api.json() 9 | let { filename, type, size, uploaded, ext, mimetype, download:dl_url } = json.data.response 10 | m.reply(`*${filename}* 11 | 12 | - *Tipo :* ${type} 13 | - *Tamaño :* ${size} 14 | - *Creado :* ${uploaded}`) 15 | await conn.sendFile(m.chat, dl_url, filename, null, m, null, { mimetype: ext, asDocument: true }) 16 | 17 | } catch (error) { 18 | console.error(error) 19 | }} 20 | 21 | HS.command = ['mediafire', 'mf'] 22 | HS.help = ['mediafire', 'mf'] 23 | HS.tags = ["Descargas de archivos"] 24 | HS.premium = false 25 | HS.group = true 26 | HS.limit = 15 27 | 28 | 29 | export default HS 30 | 31 | -------------------------------------------------------------------------------- /plugins/nable-nsfw.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args, usedPrefix, command }) => { 2 | let chat = global.db.data.chats[m.chat] || {} 3 | if (args[0] === 'on') { 4 | if (chat.nsfw) return conn.reply(m.chat, 'Nsfw ya esta Activado.', m) 5 | chat.nsfw = true 6 | await conn.reply(m.chat, '🔞 Nsfw activado para este Grupo.', m) 7 | } else if (args[0] === 'off') { 8 | if (!chat.nsfw) return conn.reply(m.chat, 'Nsfw ya esta Desactivado.', m) 9 | chat.nsfw = false 10 | await conn.reply(m.chat, '🔞 Nsfw desactivado para este Grupo.', m) 11 | } else { 12 | await conn.reply(m.chat, `*Configurar Nsfw*. Escriba on para activar y off para Desactivar.`, m) 13 | } 14 | } 15 | handler.help = ['nsfw '] 16 | handler.tags = ['nable'] 17 | handler.command = ['nsfw'] 18 | handler.use = ['on/off'] 19 | handler.group = true 20 | handler.admin = true 21 | 22 | export default handler -------------------------------------------------------------------------------- /plugins/nable-document.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args, usedPrefix, command }) => { 2 | let user = global.db.data.users[m.sender] 3 | if (args[0] === 'on') { 4 | if (user.useDocument) return conn.reply(m.chat, 'Document ya esta Activado.', m) 5 | user.useDocument = true 6 | await conn.reply(m.chat, '📄 Document activado para este Usuario.', m) 7 | } else if (args[0] === 'off') { 8 | if (!user.useDocument) return conn.reply(m.chat, 'Document ya esta Desactivado.', m) 9 | user.useDocument = false 10 | await conn.reply(m.chat, '📄 Document desactivado para este Usuario.', m) 11 | } else { 12 | await conn.reply(m.chat, `*Configurar Document*. Escriba on para activar y off para Desactivar.`, m) 13 | } 14 | } 15 | handler.help = ['document '] 16 | handler.tags = ['nable'] 17 | handler.command = ['document'] 18 | handler.use = ['on/off'] 19 | 20 | export default handler -------------------------------------------------------------------------------- /plugins/group-config.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, {conn, args, usedPrefix, command}) => { 2 | let isClose = { 3 | // Switch Case Like :v 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 | throw ` 13 | 14 | *╭─ ❖ ── ✦ ── ✧ ── ❖ ──┓* 15 | *┠┉↯ ${usedPrefix + command} abrir* 16 | *┠┉↯ ${usedPrefix + command} cerrar* 17 | *╰─ ❖ ── ✦ ── ✧ ── ❖ ──┛* 18 | `.trim(); 19 | await conn.groupSettingUpdate(m.chat, isClose); 20 | { 21 | m.reply("🏳️ grupo configurado correctamente"); 22 | } 23 | }; 24 | handler.help = ["group open / close", "grupo abrir / cerrar"]; 25 | handler.tags = ["group"]; 26 | handler.command = /^(group|grupo)$/i; 27 | handler.admin = true; 28 | handler.botAdmin = true; 29 | export default handler; 30 | -------------------------------------------------------------------------------- /plugins/group-staff.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, participants, groupMetadata, args }) => { 2 | const pp = await conn.profilePictureUrl(m.chat, 'image').catch(_ => null) || './src/avatar_contact.png' 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 | ┌─⊷ *ADMINS* 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 -------------------------------------------------------------------------------- /plugins/main-runtime.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args, usedPrefix, command }) => { 2 | 3 | let _muptime 4 | if (process.send) { 5 | process.send('uptime') 6 | _muptime = await new Promise(resolve => { 7 | process.once('message', resolve) 8 | setTimeout(resolve, 1000) 9 | }) * 1000 10 | } 11 | let muptime = clockString(_muptime) 12 | conn.reply(m.chat, `*⏳ He estado activa durante :* ${muptime}`, m) 13 | } 14 | handler.help = ['runtime'] 15 | handler.tags = ['main'] 16 | handler.command = ['runtime', 'uptime'] 17 | export default handler 18 | 19 | function clockString(ms) { 20 | let d = isNaN(ms) ? '--' : Math.floor(ms / 86400000) 21 | let h = isNaN(ms) ? '--' : Math.floor(ms / 3600000) % 24 22 | let m = isNaN(ms) ? '--' : Math.floor(ms / 60000) % 60 23 | let s = isNaN(ms) ? '--' : Math.floor(ms / 1000) % 60 24 | return [d, 'd ', h, 'h ', m, 'm ', s, 's '].map(v => v.toString().padStart(2, 0)).join('') 25 | } -------------------------------------------------------------------------------- /plugins/nable-antiLink.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args, usedPrefix, command }) => { 2 | let chat = global.db.data.chats[m.chat] || {} 3 | if (args[0] === 'on') { 4 | if (chat.antiLink) return conn.reply(m.chat, 'antiLink ya esta Activado.', m) 5 | chat.antiLink = true 6 | await conn.reply(m.chat, '✅ Anti-Link activado para este Grupo.', m) 7 | } else if (args[0] === 'off') { 8 | if (!chat.antiLink) return conn.reply(m.chat, 'Anti-Link ya esta Desactivado.', m) 9 | chat.antiLink = false 10 | await conn.reply(m.chat, '❌ Anti-Link desactivado para este Grupo.', m) 11 | } else { 12 | await conn.reply(m.chat, `*Configurar Anti-Link*. Escriba on para activar y off para Desactivar.`, m) 13 | } 14 | } 15 | handler.help = ['antilink '] 16 | handler.tags = ['nable'] 17 | handler.command = ['antiLink', 'antilink'] 18 | handler.use = ['on/off'] 19 | handler.group = true 20 | handler.admin = true 21 | 22 | export default handler -------------------------------------------------------------------------------- /plugins/tools-tovid.js: -------------------------------------------------------------------------------- 1 | import { webp2mp4 } from '../lib/webp2mp4.js' 2 | import { ffmpeg } from '../lib/converter.js' 3 | let handler = async (m, { conn }) => { 4 | if (!m.quoted) return conn.reply('🌀 Responde a un *Sticker Animado.*') 5 | let mime = m.quoted.mimetype || '' 6 | if (!/webp|audio/.test(mime)) return conn.reply('🌀 Responde a un *Sticker Animado.*') 7 | try { 8 | let media = await m.quoted.download() 9 | let out = Buffer.alloc(0) 10 | if (/webp/.test(mime)) { 11 | out = await webp2mp4(media) 12 | } else if (/audio/.test(mime)) { 13 | out = await ffmpeg(media, [ 14 | '-filter_complex', 'color', 15 | '-pix_fmt', 'yuv420p', 16 | '-crf', '51', 17 | '-c:a', 'copy', 18 | '-shortest' 19 | ], 'mp3', 'mp4') 20 | } 21 | await conn.sendFile(m.chat, out, 'thumbnail.jpg', null , m) 22 | } catch { 23 | }} 24 | handler.help = ['tovid '] 25 | handler.tags = ['sticker', 'tools'] 26 | handler.command = ['tovideo', 'tovid'] 27 | handler.register = true 28 | 29 | export default handler -------------------------------------------------------------------------------- /plugins/nsfw-xvideosdl.js: -------------------------------------------------------------------------------- 1 | import Starlights from '@StarlightsTeam/Scraper' 2 | 3 | let handler = async (m, { conn, args, command, usedPrefix }) => { 4 | if (!global.db.data.chats[m.chat].nsfw) return conn.reply(m.chat, `🚩 El grupo no admite contenido *Nsfw.*\n\n> Para activarlo un *Administrador* debe usar el comando */nsfw on*`, m, rcanal) 5 | if (!args[0]) return conn.reply(m.chat, `🚩 Ingresa el enlace del vídeo de Xvideos*`, m, rcanal) 6 | 7 | let user = global.db.data.users[m.sender] 8 | await m.react('🕓') 9 | try { 10 | let { title, dl_url } = await Starlights.xvideosdl(args[0]) 11 | await conn.sendFile(m.chat, dl_url, title + '.mp4', `*» Título* : ${title}`, m, false, { asDocument: user.useDocument }) 12 | await m.react('✅') 13 | } catch { 14 | await m.react('✖️') 15 | }} 16 | handler.help = ['xvideosdl **'] 17 | handler.tags=['+18',] 18 | handler.command = ['xvideosdl'] 19 | //handler.limit = 200 20 | handler.register = true 21 | handler.group = true 22 | export default handler -------------------------------------------------------------------------------- /plugins/group-tagall.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {isOwner, isAdmin, conn, text, participants, args, command}) => { 2 | if (!(isAdmin || isOwner)) { 3 | global.dfail('admin', m, conn); 4 | throw false; 5 | var sum = member.length; 6 | } else { 7 | var sum = 0; 8 | const total = 0; 9 | var member = 0; 10 | } 11 | const pesan = args.join` `; 12 | const oi = `${pesan}`; 13 | let teks = `*Son - Goku✨*\n\n *Integrantes : ${participants.length}* ${oi}\n\n┌──⭓ Ya revivan\n`; 14 | for (const mem of participants) { 15 | teks += `🐉 @${mem.id.split('@')[0]}\n`; 16 | } 17 | teks += `└───────⭓ 18 | 19 | SonGoku Invocar `; 20 | conn.sendMessage(m.chat, {text: teks, mentions: participants.map((a) => a.id)} ); 21 | }; 22 | handler.help = ['tagall ', 'invocar ']; 23 | handler.tags = ['group']; 24 | handler.command = /^(tagall|invocar|marcar|todos|invocación|ta)$/i; 25 | handler.admin = true; 26 | handler.group = true; 27 | export default handler; 28 | -------------------------------------------------------------------------------- /plugins/nable-welcome.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args, usedPrefix, command }) => { 2 | let chat = global.db.data.chats[m.chat] || {} 3 | if (args[0] === 'on') { 4 | if (chat.welcome) return conn.reply(m.chat, 'La bienvenida ya esta Activada.', m) 5 | chat.welcome = true 6 | await conn.reply(m.chat, '🐉 Bienvenida activado para este Grupo.', m) 7 | } else if (args[0] === 'off') { 8 | if (!chat.welcome) return conn.reply(m.chat, 'La bienvenida ya esta Desactivada.', m) 9 | chat.welcome = true 10 | await conn.reply(m.chat, '🐉 Bienvenida desactivada para este Grupo.', m) 11 | } else { 12 | await conn.reply(m.chat, `*Configurar Bienvenida*. Escriba on para activar y off para Desactivar.`, m) 13 | } 14 | } 15 | 16 | handler.help = ['welcome '] 17 | handler.tags = ['nable'] 18 | handler.command = ['welcome', 'bienvenida'] 19 | handler.use = ['on/off'] 20 | handler.group = true 21 | handler.admin = true 22 | 23 | export default handler 24 | -------------------------------------------------------------------------------- /plugins/maker-tweet.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, command, usedPrefix }) => { 2 | if (!text) return m.reply(`🔍 Ingresa lo que deseas comentar en Twitter.`) 3 | const avatar = await conn.profilePictureUrl(m.sender, 'image').catch(_ => './src/avatar_contact.png') 4 | const displayName = conn.getName(m.sender) 5 | const username = m.sender.split('@')[0] 6 | const replies = '69' 7 | const retweets = '69' 8 | const theme = 'dark' 9 | const url = `https://some-random-api.com/canvas/misc/tweet?displayname=${encodeURIComponent(displayName)}&username=${encodeURIComponent(username)}&avatar=${encodeURIComponent(avatar)}&comment=${encodeURIComponent(text)}&replies=${encodeURIComponent(replies)}&retweets=${encodeURIComponent(retweets)}&theme=${encodeURIComponent(theme)}` 10 | conn.sendFile(m.chat, url, 'tweet.png', '*Gracias por comentar*', m) 11 | } 12 | handler.help = ['tweet '] 13 | handler.tags = ['logo'] 14 | handler.command = ['tweet'] 15 | handler.register = true 16 | export default handler -------------------------------------------------------------------------------- /plugins/sticker-wm.js: -------------------------------------------------------------------------------- 1 | import { addExif } from '../lib/sticker.js' 2 | let handler = async (m, { conn, text }) => { 3 | if (!m.quoted) return m.reply(`🔍 Responde al Sticker.`) 4 | let stiker = false 5 | try { 6 | let [packname, ...author] = text.split('|') 7 | author = (author || []).join('|') 8 | let mime = m.quoted.mimetype || '' 9 | if (!/webp/.test(mime)) return m.reply(`🌀 Responde al Sticker.`) 10 | let img = await m.quoted.download() 11 | if (!img) return m.reply(`🌀 Responde al Sticker.`) 12 | stiker = await addExif(img, packname || '', author || '') 13 | } catch (e) { 14 | console.error(e) 15 | if (Buffer.isBuffer(e)) stiker = e 16 | } finally { 17 | if (stiker) conn.sendFile(m.chat, stiker, 'wm.webp', '', m) 18 | else return m.reply(`🌀 Responde al Sticker.`) 19 | } 20 | } 21 | handler.help = ['wm |'] 22 | handler.tags = ['sticker'] 23 | handler.command = ['take', 'robar', 'wm'] 24 | handler.register = true 25 | export default handler -------------------------------------------------------------------------------- /plugins/downloader-gitclone.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | const regex = /(?:https|git)(?::\/\/|@)github\.com[\/:]([^\/:]+)\/(.+)/i 3 | let handler = async (m, { conn, args, usedPrefix, command }) => { 4 | if (!args[0]) return m.reply('🔍 Ingresa el enlace del vídeo de Instagram junto al comando.\n\n`Ejemplo:`\n' + `> *${usedPrefix + command}* https://github.com/YerTX2/SonGOKU`) 5 | try { 6 | if (!regex.test(args[0])) return `La Url es invalida.` 7 | let [_, user, repo] = args[0].match(regex) || [] 8 | repo = repo.replace(/.git$/, '') 9 | let url = `https://api.github.com/repos/${user}/${repo}/zipball` 10 | let filename = (await fetch(url, { method: 'HEAD' })).headers.get('content-disposition').match(/attachment; filename=(.*)/)[1] 11 | await conn.sendFile(m.chat, url, filename, null, m) 12 | } catch { 13 | }} 14 | handler.help = ['gitclone '] 15 | handler.tags = ["Descargas de archivos"] 16 | handler.command = ['gitclone'] 17 | handler.register = true 18 | //handler.limit = 1 19 | export default handler -------------------------------------------------------------------------------- /plugins/tools-fake.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, usedPrefix, command }) => { 2 | let txt = `🌟 Ejemplos de uso.\n\n${usedPrefix + command} ¿quién soy? *@user* eres mi putita` 3 | if (!text) return m.reply(txt) 4 | let cm = copy(m) 5 | let who 6 | if (text.includes('@0')) who = '0@s.whatsapp.net' 7 | else if (m.isGroup) who = cm.participant = m.mentionedJid[0] 8 | else who = m.chat 9 | if (!who) return m.reply(txt) 10 | cm.key.fromMe = false 11 | cm.message[m.mtype] = copy(m.msg) 12 | let sp = '@' + who.split`@`[0] 13 | let [fake, ...real] = text.split(sp) 14 | conn.fakeReply(m.chat, real.join(sp).trimStart(), who, fake.trimEnd(), m.isGroup ? m.chat : false, { 15 | contextInfo: { 16 | mentionedJid: conn.parseMention(real.join(sp).trim()) 17 | }})} 18 | handler.help = ['fake '] 19 | handler.tags = ['tools'] 20 | handler.command = /^(fake)$/ 21 | handler.register = true 22 | 23 | export default handler 24 | 25 | function copy(obj) { 26 | return JSON.parse(JSON.stringify(obj)) 27 | } 28 | -------------------------------------------------------------------------------- /plugins/game-acertijo_resp.js: -------------------------------------------------------------------------------- 1 | import similarity from 'similarity' 2 | const threshold = 0.72 3 | let handler = m => m 4 | handler.before = async function (m) { 5 | let id = m.chat 6 | if (!m.quoted || !m.quoted.fromMe || !m.quoted.isBaileys || !/^ⷮ/i.test(m.quoted.text)) return !0 7 | this.tekateki = this.tekateki ? this.tekateki : {} 8 | if (!(id in this.tekateki)) return m.reply('Ese acertijo ya ha terminado!') 9 | if (m.quoted.id == this.tekateki[id][0].id) { 10 | let json = JSON.parse(JSON.stringify(this.tekateki[id][1])) 11 | if (m.text.toLowerCase() == json.response.toLowerCase().trim()) { 12 | global.db.data.users[m.sender].exp += this.tekateki[id][2] 13 | m.reply(`*Respuesta correcta!*\n+${this.tekateki[id][2]} Exp`) 14 | clearTimeout(this.tekateki[id][3]) 15 | delete this.tekateki[id] 16 | } else if (similarity(m.text.toLowerCase(), json.response.toLowerCase().trim()) >= threshold) m.reply(`Casi lo logras!`) 17 | else m.reply('Respuesta incorrecta!')} 18 | return !0 19 | } 20 | handler.exp = 0 21 | export default handler -------------------------------------------------------------------------------- /plugins/group-antiBot.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args, usedPrefix, command }) => { 2 | let chat = global.db.data.chats[m.chat] || {}; 3 | if (args[0] === 'on') { 4 | if (chat.antiBot) return conn.reply(m.chat, 'AntiBot ya está activado.', m, rcanal) 5 | chat.antiBot = true 6 | await conn.reply(m.chat, '🚩 AntiBot activado para este grupo.', m, rcanal) 7 | } else if (args[0] === 'off') { 8 | if (!chat.antiBot) return conn.reply(m.chat, 'AntiBot ya está desactivado.', m, rcanal) 9 | chat.antiBot = false 10 | await conn.reply(m.chat, '🚩 AntiBot desactivado para este grupo.', m, rcanal) 11 | } else { 12 | await conn.reply(m.chat, `*Configurar AntiBot*. Escriba "on" para activar y "off" para desactivar.`, m, rcanal) 13 | } 14 | } 15 | handler.help = ['antibot **'] 16 | handler.tags = ['group'] 17 | handler.command = ['antibot'] 18 | handler.use = ['on/off'] 19 | handler.group = true 20 | handler.admin = true 21 | 22 | export default handler -------------------------------------------------------------------------------- /plugins/_fakeReply.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | export async function before(m, { conn }) { 4 | let img = await (await fetch(`https://tinyurl.com/299lyvo5`)).buffer() 5 | 6 | global.rcanal = { 7 | contextInfo: { 8 | isForwarded: true, 9 | forwardedNewsletterMessageInfo: { 10 | newsletterJid: "120363314192605628@newsletter", 11 | serverMessageId: 100, 12 | newsletterName: namechannel, 13 | }, 14 | }, 15 | } 16 | 17 | global.adReply = { 18 | contextInfo: { 19 | forwardingScore: 9999, 20 | isForwarded: false, 21 | externalAdReply: { 22 | showAdAttribution: true, 23 | title: botname, 24 | body: textbot, 25 | mediaUrl: null, 26 | description: null, 27 | previewType: "PHOTO", 28 | thumbnailUrl: img, 29 | thumbnail: img, 30 | sourceUrl: canal, 31 | mediaType: 1, 32 | renderLargerThumbnail: true 33 | } 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /plugins/rpg-minar.js: -------------------------------------------------------------------------------- 1 | const cooldowns = {} 2 | 3 | let handler = async (m, { conn }) => { 4 | 5 | let amount = Math.floor(Math.random() * 20) 6 | const tiempoEspera = 5 * 60 // 5 minutos 7 | if (cooldowns[m.sender] && Date.now() - cooldowns[m.sender] < tiempoEspera * 1000) { 8 | const tiempoRestante = segundosAHMS(Math.ceil((cooldowns[m.sender] + tiempoEspera * 1000 - Date.now()) / 1000)) 9 | m.reply(`🕜 Espera *${tiempoRestante}* para volver a Minar.`) 10 | return 11 | } 12 | 13 | global.db.data.users[m.sender].limit += amount 14 | await m.reply(`Genial! minaste *${amount} ⚡ Ki*`) 15 | cooldowns[m.sender] = Date.now() 16 | } 17 | handler.help = ['minar'] 18 | handler.tags = ['rpg'] 19 | handler.command = ['minar', 'miming', 'mine'] 20 | handler.register = true 21 | export default handler 22 | 23 | function segundosAHMS(segundos) { 24 | const minutos = Math.floor((segundos % 3600) / 60) 25 | const segundosRestantes = segundos % 60 26 | return `${minutos} minutos y ${segundosRestantes} segundos` 27 | } -------------------------------------------------------------------------------- /plugins/sticker-smeme.js: -------------------------------------------------------------------------------- 1 | import uploadImage from '../lib/uploadImage.js' 2 | import { sticker } from '../lib/sticker.js' 3 | let handler = async (m, { conn, text, usedPrefix, command }) => { 4 | let [atas, bawah] = text.split`|` 5 | let q = m.quoted ? m.quoted : m 6 | let mime = (q.msg || q).mimetype || '' 7 | if (!mime) return m.reply(`🔍 Responde a una imagen e ingresa un texto junto al comando.`) 8 | if (!/image\/(jpe?g|png)/.test(mime)) throw `Error` 9 | let img = await q.download() 10 | let url = await uploadImage(img) 11 | let meme = `https://api.memegen.link/images/custom/${encodeURIComponent(atas ? atas : '')}/${encodeURIComponent(bawah ? bawah : '')}.png?background=${url}` 12 | let stiker = await sticker(false, meme, global.packname, global.author) 13 | if (stiker) await conn.sendFile(m.chat, stiker, '', author, m, '', { asSticker: 1 }) 14 | } 15 | handler.help = ['smeme '] 16 | handler.tags = ['sticker'] 17 | handler.command = ["smeme"] 18 | handler.register = true 19 | export default handler -------------------------------------------------------------------------------- /plugins/group-invite.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args, text, usedPrefix, command }) => { 2 | if (!text) return conn.reply(m.chat, `🚩 Ingrese el número al que quiere enviar una invitación al grupo.\n\n*Ejemplo:*\n*${usedPrefix + command}* 5218261275256`, m, rcanal) 3 | if (text.includes('+')) return conn.reply(`🚩 Ingrese el número todo junto sin el *+*`, m, rcanal) 4 | if (isNaN(text)) return conn.reply(m.chat, `*Ingrese sólo números más su código de país sin espacios*' 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', `🚩 *INVITACIÓN A GRUPO*\n\nUn usuario te invitó a unirte a este grupo \n\n${link}`, m, {mentions: [m.sender]}) 9 | m.reply(`Se envió un enlace de invitación al usuario.`) 10 | 11 | } 12 | handler.help = ['invite *<521>*'] 13 | handler.tags = ['group'] 14 | handler.command = ['invite','invitar'] 15 | handler.group = true 16 | handler.admin = false 17 | handler.botAdmin = true 18 | 19 | export default handler -------------------------------------------------------------------------------- /plugins/tools-igstalk.js: -------------------------------------------------------------------------------- 1 | import Scraper from "@SumiFX/Scraper" 2 | 3 | let handler = async (m, { conn, text, usedPrefix, command }) => { 4 | if (!text) return m.reply('🔍 Ingresa el nombre de usuario de Instagram.\n\n`Ejemplo:`\n' + `> *${usedPrefix + command}* luisitocomunica`) 5 | 6 | try { 7 | let { username, name, post, followers, following, bio, thumbnail, url } = await Scraper.igstalk(text) 8 | let txt = `╭─⬣「 *Instagram Stalk* 」⬣\n` 9 | txt += `│ ≡◦ *🔍 Username ∙* ${username}\n` 10 | txt += `│ ≡◦ *🪴 Nombre ∙* ${name}\n` 11 | txt += `│ ≡◦ *⚖ Posts ∙* ${post}\n` 12 | txt += `│ ≡◦ *👥 Seguidores ∙* ${followers}\n` 13 | txt += `│ ≡◦ *👤 Seguidos ∙* ${following}\n` 14 | txt += `│ ≡◦ *✍ Bio∙* ${bio}\n` 15 | txt += `│ ≡◦ *⛓ Url∙* ${url}\n` 16 | txt += `╰─⬣` 17 | await conn.sendFile(m.chat, thumbnail, 'thumbnail.jpg', txt, m) 18 | } catch { 19 | }} 20 | handler.help = ['igstalk '] 21 | handler.tags = ['tools'] 22 | handler.command = ['igstalk'] 23 | handler.register = true 24 | export default handler -------------------------------------------------------------------------------- /plugins/downloader-spotifydl.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch'; 2 | 3 | let handler = async (m, { conn, usedPrefix, command, args }) => { 4 | if (!args[0]) return m.reply(`Ingresa un enlace de Spotify`) 5 | 6 | try { 7 | let api = await fetch(`https://deliriussapi-oficial.vercel.app/download/spotifydlv2?url=${args[0]}`) 8 | let json = await api.json() 9 | let { data } = json 10 | let { title, artist, image, cover, url, album, duration, publish, popularity, preview, download } = data 11 | 12 | let JT = `*Titulo:* ${title} 13 | *autor:* ${artist} 14 | *Album :* ${album} 15 | *Duracion :* ${duration} 16 | *Publicado :* ${publish} 17 | *Popularidad :* ${popularity}` 18 | 19 | 20 | await conn.sendFile(m.chat, image, `HasumiBotFreeCodes.jpeg`, JT, m); 21 | await conn.sendFile(m.chat, download, 'hasumiBotFreeCodes.mp3', null, m) 22 | 23 | } catch (error) { 24 | console.error(error) 25 | }} 26 | 27 | 28 | handler.command = /^(spotifydl)$/i 29 | handler.tags = ['downloader'] 30 | handler.limit = 10 31 | handler.help = ['spotifydl'] 32 | 33 | export default handler -------------------------------------------------------------------------------- /plugins/img-animes.js: -------------------------------------------------------------------------------- 1 | /* 2 | AVISO : si vas a usar la api ( https://raw.githubusercontent.com/davidprospero123/api-anime/main/BOT-JSON/anime-${command}.json ) dejale creditos al curly, digo digo, curi 3 | */ 4 | 5 | import axios from "axios" 6 | 7 | let handler = async (m, {command, conn, usedPrefix}) => { 8 | let res = (await axios.get(`https://raw.githubusercontent.com/davidprospero123/api-anime/main/BOT-JSON/anime-${command}.json`)).data 9 | let haha = await res[Math.floor(res.length * Math.random())] 10 | conn.sendFile(m.chat, haha, 'error.jpg', `*${command}*`, m, null, rcanal) 11 | } 12 | 13 | handler.command = handler.help = ['alisa', 'aihoshino', 'remcham', 'akira', 'akiyama', 'anna', 'asuna', 'ayuzawa', 'boruto', 'chiho', 'chitoge', 'deidara', 'erza', 'elaina', 'eba', 'emilia', 'hestia', 'hinata', 'inori', 'isuzu', 'itachi', 'itori', 'kaga', 'kagura', 'kaori', 'keneki', 'kotori', 'kurumitokisaki', 'madara', 'mikasa', 'miku', 'minato', 'naruto', 'nezuko', 'sagiri', 'sasuke', 'sakura'] 14 | handler.tags = ['anime'] 15 | 16 | export default handler 17 | -------------------------------------------------------------------------------- /views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Web 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 |
26 |
27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /plugins/rpg-shop.js: -------------------------------------------------------------------------------- 1 | const xpperlimit = 450 2 | let handler = async (m, { conn, command, args }) => { 3 | let count = command.replace(/^buycoins/i, '') 4 | count = count ? /all/i.test(count) ? Math.floor(global.db.data.users[m.sender].exp / xpperlimit) : parseInt(count) : args[0] ? parseInt(args[0]) : 1 5 | count = Math.max(1, count) 6 | if (global.db.data.users[m.sender].exp >= xpperlimit * count) { 7 | global.db.data.users[m.sender].exp -= xpperlimit * count 8 | global.db.data.users[m.sender].limit += count 9 | conn.reply(m.chat, `╭────═[ *R P G - S H O P* ]═─────⋆ 10 | │╭───────────────··· 11 | ││✯ *Compra* : + ${count} KI⚡ 12 | ││✯ *Costo* : -${xpperlimit * count} 💫 XP 13 | │╰────────────────··· 14 | ╰───────────═┅═──────────`, m, rcanal) 15 | } else conn.reply(m.chat, `🚩 Lo siento, no tienes suficientes *✨ XP* para comprar *${count} KI⚡.*`, m, rcanal) 16 | } 17 | handler.help = ['buyki','comprarki', 'buyall'] 18 | handler.tags = ['rpg'] 19 | handler.command = ['buyki','comprarki', 'buyall'] 20 | handler.register = true 21 | 22 | export default handler -------------------------------------------------------------------------------- /plugins/rpg-claim.js: -------------------------------------------------------------------------------- 1 | const cooldowns = {} 2 | 3 | let handler = async (m) => { 4 | let user = global.db.data.users[m.sender] 5 | const tiempoEspera = 24 * 60 * 60 // 24 horas 6 | if (cooldowns[m.sender] && Date.now() - cooldowns[m.sender] < tiempoEspera * 1000) { 7 | const tiempoRestante = segundosAHMS(Math.ceil((cooldowns[m.sender] + tiempoEspera * 1000 - Date.now()) / 1000)) 8 | m.reply(`🕜 Espera *${tiempoRestante}* para volver a Reclamar.`) 9 | return 10 | } 11 | 12 | let claim = `Felicidades ✨, reclamaste *30 ⚡ ki*.` 13 | user.limit += 30 14 | await m.reply(claim) 15 | cooldowns[m.sender] = Date.now() 16 | } 17 | handler.help = ['claim'] 18 | handler.tags = ['rpg'] 19 | handler.command = ['daily', 'claim'] 20 | handler.register = true 21 | 22 | export default handler 23 | 24 | function segundosAHMS(segundos) { 25 | const horas = Math.floor(segundos / 3600) 26 | const minutos = Math.floor((segundos % 3600) / 60) 27 | const segundosRestantes = segundos % 60 28 | return `${horas} horas, ${minutos} minutos y ${segundosRestantes} segundos` 29 | } -------------------------------------------------------------------------------- /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) 5 | if (m.quoted.mtype !== 'viewOnceMessageV2') return conn.reply(m.chat, `🌀 Responde a una imagen ViewOnce.`, m) 6 | let msg = m.quoted.message 7 | let type = Object.keys(msg)[0] 8 | let media = await downloadContentFromMessage(msg[type], type == 'imageMessage' ? 'image' : 'video') 9 | let buffer = Buffer.from([]) 10 | for await (const chunk of media) { 11 | buffer = Buffer.concat([buffer, chunk]) 12 | } 13 | if (/video/.test(type)) { 14 | return conn.sendFile(m.chat, buffer, 'media.mp4', msg[type].caption || '', m) 15 | } else if (/image/.test(type)) { 16 | return conn.sendFile(m.chat, buffer, 'media.jpg', msg[type].caption || '', m) 17 | }} 18 | handler.help = ['ver'] 19 | handler.tags = ['tools'] 20 | handler.command = ['readviewonce', 'read', 'ver', 'readvo'] 21 | //handler.limit = 1 22 | handler.register = true 23 | 24 | export default handler 25 | -------------------------------------------------------------------------------- /plugins/rpg-retirar.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { args }) => { 2 | let user = global.db.data.users[m.sender]; 3 | if (!args[0]) return m.reply('🚩 Ingresa la cantidad de *KI ⚡* que deseas retirar.'); 4 | if (args[0].toLowerCase() === 'all') { 5 | if (user.bank < 1) return m.reply('🚩 No tienes *KI ⚡* en el Banco para retirar.'); 6 | let count = user.bank; 7 | user.bank = 0; 8 | user.limit += count; 9 | await m.reply(`🚩 Retiraste *${count} KI ⚡* del Banco.`); 10 | return !0; 11 | } 12 | if (isNaN(args[0]) || Number(args[0]) < 1) { 13 | return m.reply('🚩 Ingresa una cantidad válida de *KI ⚡*.'); 14 | } 15 | let count = parseInt(args[0]); 16 | if (user.bank < count) return m.reply(`🚩 Solo tienes *${user.bank} KI ⚡* en el Banco.`); 17 | user.bank -= count; 18 | user.limit += count; 19 | await m.reply(`🚩 Retiraste *${count} KI ⚡* del Banco.`); 20 | }; 21 | 22 | handler.help = ['retirar']; 23 | handler.tags = ['rpg']; 24 | handler.command = ['withdraw', 'retirar', 'wd']; 25 | handler.register = true; 26 | export default handler; -------------------------------------------------------------------------------- /plugins/_Buttons.js: -------------------------------------------------------------------------------- 1 | const { proto, generateWAMessage, areJidsSameUser } = (await import('@whiskeysockets/baileys')).default 2 | 3 | async function before(m, chatUpdate) { 4 | if (m.isBaileys) return 5 | if (!m.message) return 6 | if(m.mtype === "interactiveResponseMessage" && m.quoted.fromMe) appenTextMessage(JSON.parse(m.msg.nativeFlowResponseMessage.paramsJson).id, chatUpdate) 7 | 8 | async function appenTextMessage(text, chatUpdate) { 9 | let messages = await generateWAMessage(m.chat, { text: text, mentions: m.mentionedJid }, { 10 | userJid: conn.user.id, 11 | quoted: m.quoted && m.quoted.fakeObj 12 | }) 13 | messages.key.fromMe = areJidsSameUser(m.sender, conn.user.id) 14 | messages.key.id = m.key.id 15 | messages.pushName = m.pushName 16 | if (m.isGroup) messages.participant = m.sender 17 | let msg = { 18 | ...chatUpdate, 19 | messages: [proto.WebMessageInfo.fromObject(messages)], 20 | type: 'append' 21 | } 22 | conn.ev.emit('messages.upsert', msg) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | let res = await fetch('https://api.github.com/repos/YerTX2/SonGOKU') 6 | let json = await res.json() 7 | try { 8 | let txt = '`- 乂 S C R I P T - M A I N`\n\n' 9 | txt += ` • *Nombre* : ${json.name}\n` 10 | txt += ` • *Visitas* : ${json.watchers_count}\n` 11 | txt += ` • *Peso* : ${(json.size / 1024).toFixed(2)} MB\n` 12 | txt += ` • *Actualizado* : ${moment(json.updated_at).format('DD/MM/YY - HH:mm:ss')}\n` 13 | txt += ` • *Url* : ${json.html_url}\n` 14 | txt += ` • *Forks* : ${json.forks_count}\n` 15 | txt += ` • *Stars* : ${json.stargazers_count}\n\n` 16 | txt += `> 🚩 *${textbot}*` 17 | let img = await (await fetch(`https://tinyurl.com/247ebo9v`)).buffer() 18 | 19 | await conn.sendAi(m.chat, botname, textbot, txt, img, img, canal, m) 20 | } catch { 21 | await m.react('✖️') 22 | }} 23 | handler.help = ['script'] 24 | handler.tags = ['main'] 25 | handler.command = ['script', 'sc'] 26 | handler.register = true 27 | export default handler 28 | -------------------------------------------------------------------------------- /plugins/owner-addprem.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, usedPrefix, command }) => { 2 | let who 3 | if (m.isGroup) who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : false 4 | else who = m.chat 5 | let user = db.data.users[who] 6 | if (!who) return m.reply(`Etiqueta o menciona a alguien`) 7 | let txt = text.replace('@' + who.split`@`[0], '').trim() 8 | if (!txt) return m.reply(`Agrega el número de días que el usuario sera *Premium*`) 9 | if (isNaN(txt)) return m.reply(`Solo números!\n\*Ejemplo*\n${usedPrefix + command} @${m.sender.split`@`[0]} 7`) 10 | global.prems.push(`${who.split`@`[0]}`) 11 | var jumlahHari = 86400000 * txt 12 | var now = new Date() * 1 13 | if (now < user.premiumTime) user.premiumTime += jumlahHari 14 | else user.premiumTime = now + jumlahHari 15 | user.premium = true 16 | m.reply(`*» Nombre* : ${user.name}\n*» Tiempo* :${txt} Días`) 17 | } 18 | handler.help = ['addprem *@user*'] 19 | handler.tags = ['owner'] 20 | handler.command = /^(addprem|addpremium)$/i 21 | 22 | handler.group = true 23 | handler.rowner = true 24 | 25 | export default handler -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import path, { dirname } from 'path' 3 | import assert from 'assert' 4 | import { spawn } from 'child_process' 5 | import syntaxError from 'syntax-error' 6 | import { fileURLToPath } from 'url' 7 | import { createRequire } from 'module' 8 | 9 | const __filename = fileURLToPath(import.meta.url) 10 | const __dirname = dirname(__filename) 11 | const require = createRequire(__dirname) 12 | 13 | let folders = ['.', ...Object.keys(require(path.join(__dirname, './package.json')).directories)] 14 | let files = [] 15 | for (let folder of folders) 16 | for (let file of fs.readdirSync(folder).filter(v => v.endsWith('.js'))) 17 | files.push(path.resolve(path.join(folder, file))) 18 | for (let file of files) { 19 | if (file == __filename) continue 20 | console.error('Checking', file) 21 | const error = syntaxError(fs.readFileSync(file, 'utf8'), file, { 22 | sourceType: 'module', 23 | allowReturnOutsideFunction: true, 24 | allowAwaitOutsideFunction: true 25 | }) 26 | if (error) assert.ok(error.length < 1, file + '\n\n' + error) 27 | assert.ok(file) 28 | console.log('Done', file) 29 | } -------------------------------------------------------------------------------- /plugins/rpg-depositarbankSonGoku.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { args }) => { 2 | let user = global.db.data.users[m.sender]; 3 | if (!args[0]) return m.reply('🚩 Ingresa la cantidad de *⚡ Ki* que deseas depositar.'); 4 | 5 | if (args[0].toLowerCase() === 'all') { 6 | 7 | if (user.limit < 1) return m.reply('🚩 No tienes *⚡ Ki* para depositar.'); 8 | let count = user.limit; 9 | user.limit = 0; 10 | user.bank += count; 11 | await m.reply(`Depositaste *${count} ⚡ Ki* al Banco.`); 12 | return !0; 13 | } 14 | 15 | if (isNaN(args[0]) || Number(args[0]) < 1) { 16 | return m.reply('🚩 Ingresa una cantidad válida de *⚡ Ki*.'); 17 | } 18 | 19 | let count = parseInt(args[0]); 20 | if (user.limit < count) return m.reply(`🚩 Solo tienes *${user.limit} ⚡ Ki* en la Cartera.`); 21 | 22 | user.limit -= count; 23 | user.bank += count; 24 | await m.reply(`Depositaste *${count} ⚡ Ki* al Banco.`); 25 | }; 26 | 27 | handler.help = ['depositar']; 28 | handler.tags = ['rpg']; 29 | handler.command = ['deposit', 'depositar', 'dep', 'd']; 30 | handler.register = true; 31 | export default handler; -------------------------------------------------------------------------------- /plugins/downloader-GDriveDl.js: -------------------------------------------------------------------------------- 1 | import Scraper from '@SumiFX/Scraper' 2 | 3 | let handler = async (m, { conn, args, usedPrefix, command }) => { 4 | if (!args[0]) return m.reply('🌀 Ingresa el enlace del archivo de Mediafire junto al comando.\n\n`Ejemplo:`\n' + `> *${usedPrefix + command}* https://drive.google.com/file/u/0/d/1-AV4MoowegNw6eS8bCZdwqn84_SPfQM0/view?usp=drivesdk&pli=1`) 5 | 6 | try { 7 | let { title, size, type, dl_url } = await Scraper.GDriveDl(args[0]) 8 | if (size.includes('GB') || size.replace(' MB', '') > 1000) { return await m.reply('El archivo pesa mas de 1000 MB, se canceló la Descarga.')} 9 | let txt = `╭─⬣「 *GDrive Download* 」⬣\n` 10 | txt += `│ ≡◦ *🔍 Nombre ∙* ${title}\n` 11 | txt += `│ ≡◦ *📚 MimeType ∙* ${type}\n` 12 | txt += `│ ≡◦ *⚖ Peso ∙* ${size}\n` 13 | txt += `╰─⬣` 14 | await m.reply(txt) 15 | await conn.sendMessage(m.chat, { document: { url: dl_url }, fileName: title, mimetype: type }, { quoted: m }) 16 | } catch { 17 | }} 18 | handler.help = ['gdrive '] 19 | handler.tags = ["Descargas de archivos"] 20 | handler.command = ['gdrive'] 21 | handler.register = true 22 | handler.limit = 500 23 | export default handler 24 | -------------------------------------------------------------------------------- /plugins/rpg-darxp.js: -------------------------------------------------------------------------------- 1 | import db from '../lib/database.js' 2 | 3 | import MessageType from '@whiskeysockets/baileys' 4 | let impuesto = 0.02 5 | let handler = async (m, { conn, text }) => { 6 | let who 7 | if (m.isGroup) who = m.mentionedJid[0] 8 | else who = m.chat 9 | if (!who) throw '🚩 Menciona al usuario con *@user.*' 10 | let txt = text.replace('@' + who.split`@`[0], '').trim() 11 | if (!txt) throw '🚩 Ingrese la cantidad de *💫 XP* que quiere transferir.' 12 | if (isNaN(txt)) throw 'Sólo números.' 13 | let xp = parseInt(txt) 14 | let exp = xp 15 | let imt = Math.ceil(xp * impuesto) 16 | exp += imt 17 | if (exp < 1) throw '🚩 Mínimo es 1 💫 XP.*' 18 | let users = global.db.data.users 19 | if (exp > users[m.sender].exp) throw '*💫 XP* insuficiente para transferir.' 20 | users[m.sender].exp -= exp 21 | users[who].exp += xp 22 | 23 | await m.reply(`*${-xp}* 💫XP 24 | Impuesto 2% : *${-imt}* 💫 XP 25 | Total gastado: *${-exp} 💫 XP*`) 26 | conn.fakeReply(m.chat, `*+${xp} 💫XP.*`, who, m.text) 27 | } 28 | handler.help = ['darxp *@user *'] 29 | handler.tags = ['rpg'] 30 | handler.command = ['darxp'] 31 | handler.register = true 32 | 33 | export default handler -------------------------------------------------------------------------------- /plugins/search-tweet.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | let handler = async (m, { conn, text }) => { 4 | if (!text) return conn.reply(m.chat, '🧃 Ingrese el texto del post que deseas buscar.', m, rcanal) 5 | await m.react('⌛') 6 | try { 7 | let json = await axios.get(`https://apis-starlights-team.koyeb.app/starlight/Twitter-Posts?text=${text}`, { headers: { 'Content-Type': 'application/json' }}) 8 | let result = json.data.result 9 | if (!result || !result.length) return conn.reply(m.chat, `No se encontraron resultados.`, m, rcanal) 10 | 11 | let txt = '`- T W I T T E R - S E A R C H`' 12 | result.forEach(({ user, post, profile, user_link }, index) => { 13 | txt += `\n\n` 14 | txt += ` *💌 Nro* : ${index + 1}\n` 15 | txt += ` *👥 User* : ${user}\n` 16 | txt += ` *🗓️ Publicacion* : ${post}\n` 17 | txt += ` *🪪 Perfil* : ${profile}\n` 18 | txt += ` *🏷️ Link* : ${user_link}` 19 | }) 20 | await conn.reply(m.chat, txt, m, rcanal) 21 | await m.react('✅') 22 | } catch { 23 | await m.react('✖️') 24 | }} 25 | handler.help = ['tweetposts **'] 26 | handler.tags = ['search'] 27 | handler.command = ['twittersearch'] 28 | handler.register = true 29 | 30 | export default handler 31 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /plugins/_antilink.js: -------------------------------------------------------------------------------- 1 | const linkRegex = /chat.whatsapp.com\/(?:invite\/)?([0-9A-Za-z]{20,24})/i 2 | 3 | export async function before(m, {conn, isAdmin, isBotAdmin }) { 4 | if (m.isBaileys && m.fromMe) 5 | return !0 6 | if (!m.isGroup) return !1 7 | let chat = global.db.data.chats[m.chat] 8 | let bot = global.db.data.settings[this.user.jid] || {} 9 | const isGroupLink = linkRegex.exec(m.text) 10 | 11 | if (chat.antiLink && isGroupLink && !isAdmin) { 12 | if (isBotAdmin) { 13 | const linkThisGroup = `https://chat.whatsapp.com/${await this.groupInviteCode(m.chat)}` 14 | if (m.text.includes(linkThisGroup)) return !0 15 | } 16 | await conn.reply(m.chat, `*≡ Enlace Detectado*\n\nNo permitimos enlaces de otros grupos, lo siento *@${m.sender.split('@')[0]}* serás expulsado del grupo ${isBotAdmin ? '' : '\n\nNo soy admin así que no te puedo expulsar :"v'}`, null, { mentions: [m.sender] } ) 17 | if (isBotAdmin && chat.antiLink) { 18 | await conn.sendMessage(m.chat, { delete: m.key }) 19 | await conn.groupParticipantsUpdate(m.chat, [m.sender], 'remove') 20 | } else if (!chat.antiLink) return //m.reply('') 21 | } 22 | return !0 23 | } -------------------------------------------------------------------------------- /plugins/tools-getmessage.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch'; 2 | 3 | let handler = async (m, { conn, text, args }) => { 4 | 5 | let correo = args[0]; 6 | 7 | if (!correo) { 8 | await m.reply('Por favor, proporciona el correo electrónico generado con el comando getemail.'); 9 | return; 10 | } 11 | 12 | let url = `https://api.cafirexos.com/api/tempmail/getmessages?mail=${correo}`; 13 | 14 | try { 15 | let response = await fetch(url); 16 | let json = await response.json(); 17 | 18 | if (Array.isArray(json) && json.length > 0) { 19 | let mensajes = json.map(msg => `De: ${msg.sender}\nAsunto: ${msg.subject}\nMensaje: ${msg.body}`).join('\n\n'); 20 | await m.reply(mensajes); 21 | } else if (Array.isArray(json) && json.length === 0) { 22 | await m.reply('No hay mensajes en este momento.'); 23 | } else { 24 | await m.reply('Formato de respuesta inesperado.'); 25 | } 26 | } catch (error) { 27 | await m.reply('Error obteniendo los mensajes: ' + error.message); 28 | } 29 | }; 30 | 31 | handler.help = ['getmessage']; 32 | handler.tags = ['search']; 33 | handler.command = ['getmessage']; 34 | handler.register = true; 35 | 36 | export default handler; -------------------------------------------------------------------------------- /plugins/prueba-age.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | - `PLUGIN BRAT STICKER` 4 | - By Kenisawa 5 | 6 | */ 7 | 8 | import fs from 'fs' 9 | import WSF from "wa-sticker-formatter"; 10 | var handler = async (m, { 11 | conn, 12 | args, 13 | text, 14 | usedPrefix, 15 | command 16 | }) => { 17 | let ps = text ? text : m.quoted && m.quoted.text ? m.quoted.text : m.quoted && m.quoted.caption ? m.quoted.caption : m.quoted && m.quoted.description ? m.quoted.description : '' 18 | if (!ps) throw m.reply(`*• Ejemplo :* ${usedPrefix + command} *[texto]*`) 19 | 20 | let res = `https://mxmxk-helper.hf.space/brat?text=${ps}` 21 | 22 | try { 23 | async function sticker(img, url, packname, author, categories = [""]) { 24 | 25 | const stickerMetadata = { 26 | type: "full", 27 | pack: packname, 28 | author, 29 | categories, 30 | }; 31 | return await new WSF.Sticker(img ? img : url, stickerMetadata).build(); 32 | } 33 | 34 | var stikerp = await sticker(res, { ps }) 35 | await conn.sendFile(m.chat, stikerp, 'atmin.webp', '', m) 36 | } catch (e) { 37 | console.log(e) 38 | await m.reply(eror) 39 | } 40 | } 41 | 42 | handler.help = ['brat']; 43 | handler.tags = ['sticker']; 44 | handler.command = /^(brat)$/i; 45 | 46 | export default handler; -------------------------------------------------------------------------------- /plugins/searchAppStore.js: -------------------------------------------------------------------------------- 1 | /// 2 | import fetch from 'node-fetch' 3 | 4 | let handler = async (m, { conn, text }) => { 5 | if (!text) return m.reply(` *Ingresa el nombre de una aplicacion*\n *Ejemplo: /appstore Tiktok *`) 6 | 7 | try { 8 | let api = await fetch(`https://deliriussapi-oficial.vercel.app/search/appstore?q=${encodeURIComponent(text)}`) 9 | let json = await api.json() 10 | 11 | let JT = ' AppStore - Search '; 12 | json.forEach((app, index) => { 13 | JT += `\n\n══════════════════════`; 14 | JT += `\n☁️ *Nro :* ${index + 1}` 15 | JT += `\n⚜️ *Titulo:* ${app.title}` 16 | JT += `\n👨‍💻 *Desarrollador:* ${app.developer}` 17 | JT += `\n📱 *Genero:* ${app.genre.join(', ')}` 18 | JT += `\n📆 *Fecha de lanzamiento:* ${app.released}` 19 | JT += `\n🚀 *Ultima Actualizacion:* ${app.updated}` 20 | JT += `\n📚 *Version:* ${app.version}` 21 | JT += `\n📊 *Tamaño:* ${app.size}` 22 | JT += `\n⭐ *Puntuacion:* ${app.score} ( ${app.reviews} )` 23 | JT += `\n🔗 *Link:* [ ${app.title} ]( ${app.url} )` 24 | }) 25 | 26 | m.reply(JT) 27 | } catch (error) { 28 | console.error(error) 29 | }} 30 | 31 | handler.help = ['google '] 32 | handler.tags = ['tools', 'search'] 33 | handler.command = /^(appstore)$/i 34 | 35 | export default handler 36 | -------------------------------------------------------------------------------- /plugins/tools-tts.js: -------------------------------------------------------------------------------- 1 | import gtts from 'node-gtts' 2 | import { readFileSync, unlinkSync } from 'fs' 3 | import { join } from 'path' 4 | const defaultLang = 'es' 5 | let 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 { res = await tts(text, lang) } 15 | catch (e) { 16 | m.reply(e + '') 17 | text = args.join(' ') 18 | if (!text) return m.reply(`🌟 Ingresa un texto junto al comando.`) 19 | res = await tts(text, defaultLang) 20 | } finally { 21 | if (res) conn.sendFile(m.chat, res, 'tts.opus', null, m, true) 22 | }} 23 | handler.help = ['tts '] 24 | handler.tags = ['tools'] 25 | handler.command = /^g?tts$/i 26 | //handler.limit = 1 27 | handler.register = true 28 | export default handler 29 | 30 | function tts(text, lang = 'es') { 31 | console.log(lang, text) 32 | return new Promise((resolve, reject) => { 33 | try { 34 | let tts = gtts(lang) 35 | let filePath = join(global.__dirname(import.meta.url), '../tmp', (1 * new Date) + '.wav') 36 | tts.save(filePath, text, () => { 37 | resolve(readFileSync(filePath)) 38 | unlinkSync(filePath) 39 | }) 40 | } catch (e) { reject(e) } 41 | })} -------------------------------------------------------------------------------- /plugins/_antichannel.js : -------------------------------------------------------------------------------- 1 | const linkRegex = /chat.whatsapp.com\/(?:invite\/)?([0-9A-Za-z]{20,24})/i 2 | 3 | export async function before(m, { conn, isAdmin, isBotAdmin }) { 4 | if (m.isBaileys && m.fromMe) 5 | return !0 6 | if (!m.isGroup) return !1 7 | let chat = global.db.data.chats[m.chat] 8 | let bot = global.db.data.settings[this.user.jid] || {} 9 | 10 | 11 | const isChannelLink = linkRegex.exec(m.text) && m.text.includes('chat.whatsapp.com') 12 | 13 | if (chat.antiLink && isChannelLink && !isAdmin) { 14 | if (isBotAdmin) { 15 | 16 | const linkThisChannel = `https://chat.whatsapp.com/${await this.channelInviteCode(m.chat)}` 17 | if (m.text.includes(linkThisChannel)) return !0 18 | } 19 | await conn.reply(m.chat, `*≡ Enlace Detectado*\n\nNo permitimos enlaces de otros canales, lo siento *@${m.sender.split('@')[0]}* serás expulsado del grupo ${isBotAdmin ? '' : '\n\nNo soy admin así que no te puedo expulsar :"v'}`, null, { mentions: [m.sender] }) 20 | if (isBotAdmin && chat.antiLink) { 21 | await conn.sendMessage(m.chat, { delete: m.key }) 22 | await conn.groupParticipantsUpdate(m.chat, [m.sender], 'remove') 23 | } else if (!chat.antiLink) return //m.reply('') 24 | } 25 | return !0 26 | } 27 | -------------------------------------------------------------------------------- /plugins/youtube-ytsearch.js: -------------------------------------------------------------------------------- 1 | import Starlights from "@StarlightsTeam/Scraper" 2 | 3 | let handler = async (m, { conn, usedPrefix, command, text }) => { 4 | if (!text) return conn.reply(m.chat, '🚩 Ingresa el título de un video o canción de YouTube.\n\n`Ejemplo:`\n' + `> *${usedPrefix + command}* Gemini Aaliyah - If Only`, m, rcanal) 5 | await m.react('🕓') 6 | try { 7 | let results = await Starlights.ytsearch(text) 8 | if (!results || !results.length) return conn.reply(m.chat, `No se encontraron resultados.`, m, rcanal) 9 | let img = await (await fetch(`${results[0].thumbnail}`)).buffer() 10 | let txt = '`乂 Y O U T U B E - S E A R C H`' 11 | results.forEach((video, index) => { 12 | txt += `\n\n` 13 | txt += ` ✩ *Nro* : ${index + 1}\n` 14 | txt += ` ✩ *Titulo* : ${video.title}\n` 15 | txt += ` ✩ *Duración* : ${video.duration}\n` 16 | txt += ` ✩ *Publicado* : ${video.published}\n` 17 | txt += ` ✩ *Autor* : ${video.author}\n` 18 | txt += ` ✩ *Url* : ${video.url}` 19 | }) 20 | await conn.sendFile(m.chat, img, 'thumbnail.jpg', txt, m, null, rcanal) 21 | await m.react('✅') 22 | } catch { 23 | await m.react('✖️') 24 | }} 25 | handler.help = ['ytsearch '] 26 | handler.tags = ['search'] 27 | handler.command = ["ytsearch"]; 28 | export default handler; -------------------------------------------------------------------------------- /plugins/group-promote.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, {conn, usedPrefix, text}) => { 2 | if (isNaN(text) && !text.match(/@/g)) { 3 | } else if (isNaN(text)) { 4 | var number = text.split`@`[1]; 5 | } else if (!isNaN(text)) { 6 | var number = text; 7 | } 8 | 9 | if (!text && !m.quoted) 10 | return conn.reply( 11 | m.chat, 12 | '🚩 Use el comandó correctamente\n\n`Ejemplo :`\n\n> . promote @daniel', 13 | m 14 | ); 15 | if (number.length > 13 || (number.length < 11 && number.length > 0)) 16 | return conn.reply(m.chat, `_. ᩭ✎El número ingresado es incorrecto, por favor ingrese el número correcto_`, m); 17 | 18 | try { 19 | if (text) { 20 | var user = number + "@s.whatsapp.net"; 21 | } else if (m.quoted.sender) { 22 | var user = m.quoted.sender; 23 | } else if (m.mentionedJid) { 24 | var user = number + "@s.whatsapp.net"; 25 | } 26 | } catch (e) { 27 | } finally { 28 | conn.groupParticipantsUpdate(m.chat, [user], "promote"); 29 | conn.reply(m.chat, `🚩 ordenes recibidas`, m); 30 | } 31 | }; 32 | handler.help = ["*593xxx*", "*@usuario*", "*responder chat*"].map((v) => "promote " + v); 33 | handler.tags = ["group"]; 34 | handler.command = /^(promote|daradmin|darpoder)$/i; 35 | handler.group = true; 36 | handler.admin = true; 37 | handler.botAdmin = true; 38 | handler.fail = null; 39 | export default handler; 40 | -------------------------------------------------------------------------------- /plugins/main-menu1.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { text, conn, usedPrefix, command }) => { 2 | let texto = ` 3 | 4 | _¡Bienvenido a SonGoku! Este bot te ofrece herramientas útiles, entretenimiento y acceso a diversas funciones desde tu WhatsApp._ 5 | 6 | Opciones disponibles 7 | *Menú Completo*: Muestra todos los comandos del bot. 8 | *Subbot*: _Genera un código para que te conviertas en subbot de SonGoku._ 9 | *INFO BOT*: _Información sobre los desarrolladores, grupos y canales oficiales._ 10 | 11 | ` 12 | await conn.sendMessage(m.chat, { 13 | image: { url: 'https://tinyurl.com/2azetyjh' }, 14 | caption: texto, 15 | footer: botname + ` | collaboration with I'm Fz ~`, 16 | buttons: [ 17 | { 18 | buttonId: `.menucompleto`, 19 | buttonText: { 20 | displayText: 'MENU COMPLETO', 21 | }, 22 | }, 23 | { 24 | buttonId: `.serbot`, 25 | buttonText: { 26 | displayText: 'SERBOT', 27 | }, 28 | }, 29 | { 30 | buttonId: `.cuentas`, 31 | buttonText: { 32 | displayText: 'INFO BOT', 33 | }, 34 | }, 35 | ], 36 | viewOnce: true, 37 | headerType: 4, 38 | }, { quoted: m }); 39 | } 40 | handler.command = ['menu'] 41 | handler.help = ['menu'] 42 | handler.tags = ['main'] 43 | export default handler -------------------------------------------------------------------------------- /plugins/rg-perfil.js: -------------------------------------------------------------------------------- 1 | import { canLevelUp, xpRange } from '../lib/levelling.js' 2 | import PhoneNumber from 'awesome-phonenumber' 3 | 4 | let handler = async (m, { conn, usedPrefix, command }) => { 5 | let who = m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender 6 | let user = global.db.data.users[who] 7 | let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './src/avatar_contact.png') 8 | let { exp, limit, name, registered, regTime, age, level } = user 9 | let { min, xp, max } = xpRange(level, global.multiplier) 10 | let username = conn.getName(who) 11 | let prem = global.prems.includes(who.split`@`[0]) 12 | 13 | let txt = `╭─⬣「 *User Perfil* 」⬣\n` 14 | txt += `│ ≡◦ *📝🪴 Nombre ∙* ${name}\n` 15 | txt += `│ ≡◦ *🌀 Edad ∙* ${age} años\n` 16 | txt += `│ ≡◦ *📞 Numero ∙* ${PhoneNumber('+' + who.replace('@s.whatsapp.net', '')).getNumber('international')}\n` 17 | txt += `│ ≡◦ *⚡Ki ∙* ${limit}\n` 18 | txt += `│ ≡◦ *💫 Experiencia ∙* Total ${exp} ( *${user.exp - min}/${xp}* )\n` 19 | txt += `│ ≡◦ *👑 Premium ∙* ${prem ? 'Si' : 'No'}\n` 20 | txt += `╰─⬣` 21 | 22 | await conn.sendFile(m.chat, pp, 'thumbnail.jpg', txt, m) 23 | } 24 | 25 | handler.help = ['perfil', 'perfil @user'] 26 | handler.tags = ['rpg'] 27 | handler.command = ['perfil', 'profile'] 28 | handler.register = true 29 | 30 | export default handler -------------------------------------------------------------------------------- /plugins/main-desarrolladores.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { conn }) => { 2 | let gifUrl = "https://qu.ax/JgmPo.mp4"; 3 | 4 | let text = ` 5 | ╭────────⚔──────╮ 6 | DESARROLLADORES 7 | ╰────────⚔──────╯ 8 | 9 | 🔹 **SOBRE EL BOT:** 10 | Son Goku Bot es una herramienta creada con el objetivo de mejorar la interacción y experiencia de los usuarios en diversas plataformas, ofreciendo funcionalidades avanzadas y soporte constante. 11 | 12 | 🔹 **CONTACTO DE LOS DESARROLLADORES:** 13 | ╭─────────────────────────╮ 14 | │🏆 **Son Goku Bot - Equipo Oficial** 15 | │ 16 | │📌 **Tesis**: [+52 243 126 8546] 17 | │📌 **Matías-Crypto**: [+54 9 221 502-2907] 18 | │📌 **YerTX2**: [+51 907 376 960] 19 | ╰─────────────────────────╯ 20 | 21 | 🔹 **AGRADECIMIENTOS:** 22 | Un agradecimiento especial a todos los colaboradores y usuarios que hacen posible la constante evolución de Son Goku Bot. 23 | 24 | 🔹 **¿DUDAS O SUGERENCIAS?** 25 | No dudes en contactar a cualquiera de los desarrolladores para resolver dudas, enviar sugerencias o reportar problemas. 26 | 27 | `.trim(); 28 | 29 | 30 | await conn.sendMessage( 31 | m.chat, 32 | { 33 | video: { url: gifUrl }, 34 | gifPlayback: true, 35 | caption: text, 36 | mentions: [m.sender], 37 | }, 38 | { quoted: m } 39 | ); 40 | }; 41 | 42 | handler.command = /^(desarrolladores)$/i; 43 | export default handler; -------------------------------------------------------------------------------- /plugins/main-comunidad.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { conn }) => { 2 | let gifUrl = "https://qu.ax/jrfeN.mp4"; 3 | 4 | let text = ` 5 | ──────── ⚔ ──────── 6 | **COMUNIDAD** 7 | ──────── ⚔ ──────── 8 | 9 | **SON GOKU BOT** 10 | • ,👥➤ **Grupo de WhatsApp de la comunidad de SonGoku** 11 | Únete para compartir y resolver dudas con otros usuarios. 12 | ➤[https://chat.whatsapp.com/COGynlbC2SVHx72LaLPsVG] 13 | 14 | • 📢 ➤ **Canal de SonGoku** 15 | Recibe actualizaciones, noticias y lanzamientos del bot. 16 | ➤[https://whatsapp.com/channel/0029Vaj67qQJUM2Wa5Ey3y1v] 17 | • 💬 ➤ **Grupo de WhatsApp activo** 18 | Chatea con usuarios en tiempo real y sé parte de la conversación y usa al bot que esta de uso libre. 19 | ➤[https://chat.whatsapp.com/C8r8cpPHjoI2by0TSwMqfp] 20 | 21 | ──────── ⚔ ──────── 22 | 🔍 **¿Sabías que...?** 23 | - El bot SonGoku es actualizado regularmente para mejorar su desempeño. 24 | - Puedes sugerir mejoras o reportar errores directamente en los grupos. 25 | - Nuestra comunidad sigue creciendo y cuenta con soporte activo. 26 | - 27 | `.trim(); 28 | 29 | 30 | await conn.sendMessage( 31 | m.chat, 32 | { 33 | video: { url: gifUrl }, 34 | gifPlayback: true, 35 | caption: text, 36 | mentions: [m.sender], 37 | }, 38 | { quoted: m } 39 | ); 40 | }; 41 | 42 | handler.command = /^(comunidad)$/i; 43 | export default handler; -------------------------------------------------------------------------------- /plugins/buscador-playstore.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch'; 2 | import translate from '@vitalets/google-translate-api'; 3 | const handler = async (m, {conn, text, args}) => { 4 | if (!args[0]) throw `*[❗] 𝙸𝙽𝙶𝚁𝙴𝙴𝚂𝙴 𝙴𝙻 𝙽𝙾𝙼𝙱𝚁𝙴 𝙳𝙴 𝙻𝙰 𝙰𝙿𝙺 𝚀𝚄𝙴 𝚀𝚄𝙸𝙴𝚁𝙰 𝙱𝚄𝚂𝙲𝙰𝚁*`; 5 | try { 6 | const enc = encodeURIComponent(text); 7 | const json = await fetch(`https://latam-api.vercel.app/api/playstore?apikey=Diego-Ofc&q=${enc}`); 8 | const gPlay = await json.json(); 9 | 10 | const shadowgod = await translate(`${gPlay.descripcion}`, {to: 'es', autoCorrect: true}); 11 | if (!gPlay.titulo) return m.reply(`[ ! ] Sin resultados`); 12 | conn.sendMessage(m.chat, {image: {url: gPlay.imagen}, caption: `🔍 Resultado: ${gPlay.titulo} 13 | 🧬 Identificador: ${gPlay.id} 14 | ⛓️ Link: ${gPlay.link} 15 | 🖼️ Imagen: ${gPlay.imagen} 16 | ✍️ Desarrollador: ${gPlay.desarrollador} 17 | 📜 Descripcion: ${shadowgod.text} 18 | 💲 Moneda: ${gPlay.moneda} 19 | 🎭 Gratis?: ${gPlay.gratis} 20 | 💸 Precio: ${gPlay.precio} 21 | 📈 Puntuacion: ${gPlay.puntuacion}`}, {quoted: m}); 22 | } catch { 23 | await m.reply('*[❗𝐈𝐍𝐅𝐎❗] 𝙴𝚁𝚁𝙾𝚁, 𝙿𝙾𝚁 𝙵𝙰𝚅𝙾𝚁 𝚅𝚄𝙴𝙻𝚅𝙰 𝙰 𝙸𝙽𝚃𝙴𝙽𝚃𝙰𝚁𝙻𝙾*'); 24 | } 25 | }; 26 | handler.help = ['playstore ']; 27 | handler.tags = ['downloader'] 28 | handler.command = /^(playstore)$/i; 29 | export default handler; 30 | -------------------------------------------------------------------------------- /plugins/nsfw-hentaisearch.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, usedPrefix, command, args }) => { 2 | if (!global.db.data.chats[m.chat].nsfw) throw `🚫 𝙽𝚘 𝙴𝚜𝚝𝚊 𝙰𝚌𝚝𝚒𝚟𝚊𝚍𝚘 𝙴𝚕 𝙽𝚂𝙵𝚆 𝙴𝚗 𝙴𝚜𝚝𝚎 𝙶𝚛𝚞𝚙𝚘\n\n 𝙰𝚌𝚝𝚒𝚟𝚊𝚕𝚘 𝚄𝚜𝚊𝚗𝚍𝚘 \n*${usedPrefix}𝙴𝚗𝚊𝚋𝚕𝚎 𝚗𝚜𝚏𝚠` 3 | let user = global.db.data.users[m.sender].age 4 | if (user < 17) throw m.reply(`❎ 𝙽𝚎𝚌𝚎𝚜𝚒𝚝𝚊𝚜 𝚃𝚎𝚗𝚎𝚛 +𝟷𝟾 𝙿𝚊𝚛𝚊 𝚄𝚜𝚊𝚛 𝙴𝚜𝚝𝚎 𝙲𝚘𝚖𝚊𝚗𝚍𝚘`) 5 | 6 | if (!text) return m.reply(`*𝙸𝚗𝚐𝚛𝚎𝚜𝚊 𝙴𝚕 𝚃𝚎𝚡𝚝𝚘 𝙳𝚎 𝙰𝚕𝚐𝚞𝚗 𝙷𝚎𝚗𝚝𝚊𝚒 𝚀𝚞𝚎 𝚀𝚞𝚒𝚎𝚛𝚊𝚜 𝙱𝚞𝚜𝚌𝚊𝚛*`) 7 | try { 8 | m.reply(global.wait) 9 | let res = await fetch(`https://api.lolhuman.xyz/api/nhentaisearch?apikey=${lolkeysapi}&query=${text}`) 10 | let json = await res.json() 11 | let aa = json.result[0].id 12 | let aa2 = json.result[0].title_native 13 | let res2 = await fetch(`https://api.lolhuman.xyz/api/nhentaipdf/${aa}?apikey=${lolkeysapi}`) 14 | let json2 = await res2.json() 15 | let aa3 = json2.result 16 | await conn.sendMessage(m.chat, { document: { url: aa3 }, mimetype: 'application/pdf', fileName: `${aa2}.pdf` }, { quoted: m }) 17 | } catch { 18 | throw `𝙾𝚌𝚞𝚛𝚛𝚒𝚘 𝚄𝚗 𝙴𝚛𝚛𝚘𝚛 𝙸𝚗𝚎𝚜𝚙𝚎𝚛𝚊𝚍𝚘 :(` 19 | }} 20 | handler.help = ['hentai '] 21 | handler.tags = ['nsfw'] 22 | handler.command = ['hentai', 'hentaisearch'] 23 | 24 | export default handler 25 | -------------------------------------------------------------------------------- /plugins/sticker-dado.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | let stickdados = [ 3 | 'https://tinyurl.com/gdd01', 4 | 'https://tinyurl.com/gdd02', 5 | 'https://tinyurl.com/gdd003', 6 | 'https://tinyurl.com/gdd004', 7 | 'https://tinyurl.com/gdd05', 8 | 'https://tinyurl.com/gdd006' 9 | ] 10 | let url = stickdados[Math.floor(Math.random() * stickdados.length)] 11 | conn.sendFile(m.chat, url, 'error.webp', null, m, { asSticker: true })} 12 | handler.command = ['dado', 'dados', 'dadu'] 13 | export default handler; 14 | 15 | /* const handler = async (m, {conn}) => { 16 | 17 | conn.sendFile(m.chat, `https://api.lolhuman.xyz/api/sticker/dadu?apikey=${lolkeysapi}`, 'error.webp', '', m, {asSticker: true}); 18 | }; 19 | handler.command = ['dado', 'dados', 'dadu']; 20 | export default handler;*/ 21 | 22 | /* import { sticker } from '../lib/sticker.js' 23 | let handler = async (m, { conn }) => { 24 | const dir = ['https://www.random.org/dice/dice1.png', 'https://www.random.org/dice/dice2.png', 'https://www.random.org/dice/dice3.png', 'https://www.random.org/dice/dice4.png', 'https://www.random.org/dice/dice5.png', 'https://www.random.org/dice/dice6.png']; 25 | let img = dir[Math.floor(Math.random() * dir.length)] 26 | //let stiker = await sticker(img, false, global.packname, global.author) 27 | await conn.sendFile(m.chat, img, 'error.webp', '', m, { asSticker: true }) 28 | } 29 | handler.command = ['dado', 'dados', 'dadu'] 30 | export default handler*/ 31 | -------------------------------------------------------------------------------- /plugins/_allfake.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | export async function before(m, { conn }) { 4 | //let img = await (await fetch(`https://tinyurl.com/299lyvo5`)).buffer() 5 | let img = catalogo 6 | global.rcanal = { 7 | contextInfo: { 8 | isForwarded: true, 9 | forwardedNewsletterMessageInfo: { 10 | newsletterJid: "120363314192605628@newsletter", 11 | serverMessageId: 100, 12 | newsletterName: '【★ Son Goku BOT ★】', 13 | }, 14 | externalAdReply: { 15 | showAdAttribution: true, 16 | title: botname, 17 | body: 'Hola', 18 | mediaUrl: null, 19 | description: null, 20 | previewType: "PHOTO", 21 | thumbnailUrl: 'https://telegra.ph/file/8813c9636643198e783fd.jpg', 22 | sourceUrl: canal, 23 | mediaType: 1, 24 | renderLargerThumbnail: false 25 | }, 26 | }, 27 | } 28 | 29 | global.adReply = { 30 | contextInfo: { 31 | forwardingScore: 9999, 32 | isForwarded: false, 33 | externalAdReply: { 34 | showAdAttribution: true, 35 | title: botname, 36 | body: textbot, 37 | mediaUrl: null, 38 | description: null, 39 | previewType: "PHOTO", 40 | thumbnailUrl: img, 41 | thumbnail: img, 42 | sourceUrl: canal, 43 | mediaType: 1, 44 | renderLargerThumbnail: true 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | import express from 'express' 2 | import { createServer } from 'http' 3 | import path from 'path' 4 | import { Socket } from 'socket.io' 5 | import { toBuffer } from 'qrcode' 6 | import fetch from 'node-fetch' 7 | 8 | function connect(conn, PORT) { 9 | let app = global.app = express() 10 | console.log(app) 11 | let server = global.server = createServer(app) 12 | let _qr = 'invalid' 13 | 14 | conn.ev.on('connection.update', function appQR({ qr }) { 15 | if (qr) _qr = qr 16 | }) 17 | 18 | app.use(async (req, res) => { 19 | res.setHeader('content-type', 'image/png') 20 | res.end(await toBuffer(_qr)) 21 | }) 22 | 23 | server.listen(PORT, () => { 24 | console.log('App listened on port', PORT) 25 | if (opts['keepalive']) keepAlive() 26 | }) 27 | } 28 | 29 | function pipeEmit(event, event2, prefix = '') { 30 | let old = event.emit 31 | event.emit = function (event, ...args) { 32 | old.emit(event, ...args) 33 | event2.emit(prefix + event, ...args) 34 | } 35 | return { 36 | unpipeEmit() { 37 | event.emit = old 38 | } 39 | } 40 | } 41 | 42 | function keepAlive() { 43 | const url = `https://${process.env.REPL_SLUG}.${process.env.REPL_OWNER}.repl.co` 44 | if (/(\/\/|\.)undefined\./.test(url)) return 45 | setInterval(() => { 46 | fetch(url).catch(console.error) 47 | }, 5 * 1000 * 60) 48 | } 49 | 50 | 51 | export default connect -------------------------------------------------------------------------------- /plugins/tools-whatmusic.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, `🌀 Etiqueta un audio o video de poca duración con el comando *${usedPrefix + command}* para ver que música contiene.`, m) 23 | } 24 | handler.help = ['whatmusic