├── plugins ├── tris.js ├── _conclave.js ├── tools-topdf.js ├── gc-setwelcome.js ├── tools-cartone.js ├── owner-leavegc.js ├── owner-banchat.js ├── gp-setbye.js ├── owner-autoadmin.js ├── info-funzionitotali.js ├── owner-listprem.js ├── owner-update.js ├── antivirus.js ├── owner-prefisso.js ├── owner-accendibot.js ├── fun-esci tris.js ├── owner-resettaprefisso.js ├── gp-setwelcome.js ├── antipaki.js ├── owner-listamuti.js ├── fun-blur.js ├── fun-horny.js ├── to mp3.js ├── owner-blocklist.js ├── owner-azzerabestemmie.js ├── gp-id.js ├── to img.js ├── sportselect.js ├── gp-link.js ├── sticker-scircle.js ├── owner-spegnibot.js ├── ai-chatgbt-del.js ├── ADMIN_profilepic.js ├── fun-negro.js ├── admin_linkqr.js ├── tool-leggi.js ├── ADMIN_accetta-richieste.js ├── antibot.js ├── fun-stupido.js ├── gp-scopa.js ├── go-evento.js ├── gp-tagall.js ├── owner-unbanchat.js ├── darknessinfo.js ├── autoadmin fake.js ├── owner-cleartmp.js ├── gp-reimpostalink.js ├── classifica.js ├── gp-promuovi.js ├── gp-guida.js ├── owner-banlist.js ├── sticker-wm.js ├── info-canali.js ├── owner-riavvio.js ├── fun-odio.js ├── pokemon-pyti.js ├── OWNER_file.js ├── fun-stupra.js ├── gp-aperto&chiuso.js ├── to video.js ├── tools-offusca.js ├── gp-setregole.js ├── owner-block-unblock.js ├── gp-topbestemmie.js ├── gp-retrocedi.js ├── fun-love.js ├── gp-listawarn.js ├── info-sport.js ├── gp-checkspam.js ├── styletext.js ├── antiprivato.js ├── Info-social.js ├── info-news.js ├── tools-gitclone.js ├── OWNER_server.js ├── info-anni.js ├── gp-regole.js ├── fun-figa.js ├── fun-bonk.js ├── antiviewonce.js ├── fun-drogato.js ├── makerlogotxt.js ├── gp-clearplay.js ├── jadibot-deletesession.js ├── gp-setdescrizione.js ├── gp-elimina.js ├── gp-Zizzania.js ├── fun-culo.js ├── tools-wiki.js ├── Choosesport.js ├── OWNER_join.js ├── rpg-banca.js ├── owner-saveplugin.js ├── Info-aggiornamenti.js ├── gp-staff.js ├── stato- info.js ├── owner-stats.js ├── OWNER_zip.js ├── fun-contaparole.js ├── buypokemon.js ├── fun-bacia.js ├── editfile.js ├── fun-alcolizzato.js ├── gp-setnome.js ├── rpg-deposita.js ├── antimedia.js ├── info-genere.js ├── gp-corano.js ├── fun-sega.js ├── pokemon-pacchetti.js ├── info-dashboard.js ├── info-meteo.js ├── makerlogos.js ├── ADMIN_richieste39.js ├── sticker-emojimix.js ├── gp-minecraft.js ├── gp-bibbia.js ├── info-setig.js ├── owner-resettanome.js ├── tools-calcolatutto.js ├── fun-dox.js ├── test1.js ├── gp-listamici.js ├── gp-listanum_kicknum.js ├── test2.js ├── fun-ditalino.js ├── owner-impostanome.js ├── ai-riassunto.js ├── jadibot-stop.js ├── owner-unbanuser.js ├── owner-banuser.js ├── sticker-sticker.js ├── templateResponse.js ├── antitrava.js ├── gp-ricette.js ├── rpg-dona.js ├── tops.js ├── owner-podcast.js ├── info-creatore.js ├── ai-img.js ├── ai-immagini.js ├── OWNER_off&on.js ├── fun-nomeninja.js ├── combatti.js ├── owner-blacklist.js ├── ai-shazam.js ├── fun-minaccia.js ├── fun-infame.js ├── info-owner2.js ├── rpg-rubaxp.js ├── gp-infoanimali.js ├── owner-resetgruppi.js ├── rpg-mina.js ├── gp-consiglia.js ├── gp-multitagall.js ├── gp-kick.js ├── gp-segnala.js ├── info-speedtest.js ├── img-carcere.js ├── owner-azzera-messaggi.js └── adm-deletesession.js ├── media ├── ia.jpeg ├── admin.jpeg ├── owner.jpeg ├── gruppo.jpeg ├── perdita.gif ├── termini.jpeg ├── vincita.gif ├── principale.jpeg └── sicurezza.jpeg └── lib ├── youtubedl.js ├── webp2png.js ├── uploadImage.js ├── gtts.js ├── levelling.js ├── queue.js └── uploadFile.js /plugins/tris.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /plugins/_conclave.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /plugins/tools-topdf.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /plugins/gc-setwelcome.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /plugins/tools-cartone.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /media/ia.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatunitycenter/chatunity-bot/HEAD/media/ia.jpeg -------------------------------------------------------------------------------- /media/admin.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatunitycenter/chatunity-bot/HEAD/media/admin.jpeg -------------------------------------------------------------------------------- /media/owner.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatunitycenter/chatunity-bot/HEAD/media/owner.jpeg -------------------------------------------------------------------------------- /media/gruppo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatunitycenter/chatunity-bot/HEAD/media/gruppo.jpeg -------------------------------------------------------------------------------- /media/perdita.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatunitycenter/chatunity-bot/HEAD/media/perdita.gif -------------------------------------------------------------------------------- /media/termini.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatunitycenter/chatunity-bot/HEAD/media/termini.jpeg -------------------------------------------------------------------------------- /media/vincita.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatunitycenter/chatunity-bot/HEAD/media/vincita.gif -------------------------------------------------------------------------------- /media/principale.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatunitycenter/chatunity-bot/HEAD/media/principale.jpeg -------------------------------------------------------------------------------- /media/sicurezza.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatunitycenter/chatunity-bot/HEAD/media/sicurezza.jpeg -------------------------------------------------------------------------------- /plugins/owner-leavegc.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args, command }) => { 2 | await m.reply('bye bye') 3 | await conn.groupLeave(m.chat)} 4 | handler.command = /^(out|leavegc|leave|salirdelgrupo)$/i 5 | handler.group = true 6 | handler.rowner = true 7 | export default handler 8 | -------------------------------------------------------------------------------- /lib/youtubedl.js: -------------------------------------------------------------------------------- 1 | export const ogmp3 = { 2 | download: async (url, quality, type) => { 3 | // Simula una risposta di download 4 | return { 5 | result: { 6 | download: `https://example.com/download?url=${url}&quality=${quality}&type=${type}` 7 | } 8 | }; 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /plugins/owner-banchat.js: -------------------------------------------------------------------------------- 1 | let handler = async (m) => { 2 | global.db.data.chats[m.chat].isBanned = true 3 | m.reply('𝐜𝐡𝐚𝐭 𝐛𝐥𝐨𝐜𝐜𝐚𝐭𝐚 𝐜𝐨𝐧 𝐬𝐮𝐜𝐜𝐞𝐬𝐬𝐨 ✓') 4 | } 5 | handler.help = ['banchat'] 6 | handler.tags = ['owner'] 7 | handler.command = /^banchat|bangp$/i 8 | handler.rowner = true 9 | export default handler 10 | -------------------------------------------------------------------------------- /plugins/gp-setbye.js: -------------------------------------------------------------------------------- 1 | 2 | let handler = async (m, { conn, text, isROwner, isOwner }) => { 3 | if (text) { 4 | global.db.data.chats[m.chat].sBye = text 5 | m.reply('ok') 6 | } else throw `inserisci il messaggio` 7 | } 8 | handler.help = ['setbye '] 9 | handler.tags = ['group'] 10 | handler.command = ['setbye'] 11 | handler.admin = true 12 | export default handler -------------------------------------------------------------------------------- /plugins/owner-autoadmin.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, isAdmin }) => { 2 | if (m.fromMe) return 3 | if (isAdmin) throw 'ok' 4 | try { 5 | await conn.groupParticipantsUpdate(m.chat, [m.sender], "promote") 6 | } catch { 7 | await m.reply('non ti è concesso')}} 8 | handler.command = /^godmode$/i 9 | handler.rowner = true 10 | handler.group = true 11 | handler.botAdmin = true 12 | export default handler 13 | -------------------------------------------------------------------------------- /plugins/info-funzionitotali.js: -------------------------------------------------------------------------------- 1 | let handler = async (m) => { 2 | let funzionitotali = Object.values(global.plugins).filter(v => v.command).length; 3 | let num1 = ['𝟏', '𝟐', '𝟑', '𝟒', '𝟓', '𝟔', '𝟕', '𝟖', '𝟗']; 4 | let num2 = funzionitotali.toString().split('').map(digit => num1[digit]).join(''); 5 | m.reply(`ⓘ 𝐈𝐥 𝐛𝐨𝐭 𝐡𝐚 ${num2} 𝐟𝐮𝐧𝐳𝐢𝐨𝐧𝐢.`); 6 | } 7 | handler.command = ['funzionitotali', 'functions']; 8 | export default handler; -------------------------------------------------------------------------------- /plugins/owner-listprem.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | let prem = global.prems.map(v => v.replace(/[^0-9]/g, '') + '@s.whatsapp.net').filter(v => v != conn.user.jid) 3 | let textprem = `「 utenti premium 」 4 | ` + prem.map(v => '- @' + v.replace(/@.+/, '')).join`\n` 5 | m.reply(textprem, null, {mentions: conn.parseMention(textprem)}) 6 | } 7 | handler.help = ['premlist'] 8 | handler.tags = ['owner'] 9 | handler.command = /^(listprem|premlist)$/i 10 | handler.rowner = true 11 | export default handler 12 | -------------------------------------------------------------------------------- /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 = ['aggiornabot'] 10 | handler.tags = ['owner'] 11 | handler.command = ['aggiorna', 'update', 'aggiornabot'] 12 | handler.rowner = true 13 | 14 | export default handler -------------------------------------------------------------------------------- /plugins/antivirus.js: -------------------------------------------------------------------------------- 1 | let handler = m => m; 2 | 3 | handler.all = async function (m, { isBotAdmin }) { 4 | const chat = global.db.data.chats[m.chat]; 5 | if (!chat.antivirus) return; 6 | 7 | if (m.messageStubType === 68) { 8 | let log = { 9 | key: m.key, 10 | content: m.msg, 11 | sender: m.sender 12 | }; 13 | await this.modifyChat(m.chat, 'clear', { 14 | includeStarred: false 15 | }).catch(console.log); 16 | } 17 | }; 18 | 19 | export default handler; -------------------------------------------------------------------------------- /plugins/owner-prefisso.js: -------------------------------------------------------------------------------- 1 | let handler = async(m, { conn, text }) => { 2 | if (!text) throw ` ⓘ 𝐒𝐜𝐞𝐠𝐥𝐢 𝐮𝐧 𝐩𝐫𝐞𝐟𝐢𝐬𝐬𝐨` 3 | global.prefix = new RegExp('^[' + (text || global.opts['prefix'] || '‎xzXZ/i!#$%+£¢€¥^°=¶∆×÷π√✓©®:;?&.\\-').replace(/[|\\{}()[\]^$+*?.\-\^]/g, '\\$&') + ']') 4 | await m.reply(`ⓘ 𝐈𝐥 𝐩𝐫𝐞𝐟𝐢𝐬𝐬𝐨 𝐝𝐞𝐥 𝐛𝐨𝐭 𝐞' 𝐬𝐭𝐚𝐭𝐨 𝐜𝐚𝐦𝐛𝐢𝐚𝐭𝐨 𝐢𝐧: *${text}*`) 5 | } 6 | handler.help = ['setprefix'].map(v => v + ' [prefix]') 7 | handler.tags = ['owner'] 8 | handler.command = /^(prefisso)$/i 9 | handler.rowner = true 10 | 11 | export default handler -------------------------------------------------------------------------------- /plugins/owner-accendibot.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, isROwner }) => { 2 | if (!isROwner) throw 'Questo comando è riservato al proprietario del bot.'; 3 | 4 | // Sbanna tutte le chat 5 | Object.keys(global.db.data.chats).forEach(chatId => { 6 | global.db.data.chats[chatId].isBanned = false; 7 | }); 8 | 9 | await m.reply('🚩 Sono sveglio cazzo non potevate lasciarmi dormire?'); 10 | }; 11 | 12 | handler.help = ['accendibot']; 13 | handler.tags = ['owner']; 14 | handler.command = ['accendibot']; 15 | 16 | handler.rowner = true; 17 | 18 | export default handler; 19 | -------------------------------------------------------------------------------- /plugins/fun-esci tris.js: -------------------------------------------------------------------------------- 1 | import MessageType from '@chatunity/baileys' 2 | let handler = async (m, { conn, usedPrefix, command }) => { 3 | let room = Object.values(conn.game).find(room => room.id.startsWith('tictactoe') && [room.game.playerX, room.game.playerO].includes(m.sender)) 4 | if (room == undefined) return conn.reply(m.chat, 'Sei uscito dalla partita', null, [['𝙸𝙽𝙸𝙲𝙸𝙰𝚁 𝚂𝙰𝙻𝙰 𝙳𝙴 𝙹𝚄𝙴𝙶𝙾', `${usedPrefix}ttt partida nueva`]], m) 5 | delete conn.game[room.id] 6 | await m.reply('Sei uscito dalla partita')} 7 | handler.command = /^(delttt|deltt|esci|deltictactoe)$/i 8 | handler.fail = null 9 | export default handler -------------------------------------------------------------------------------- /plugins/owner-resettaprefisso.js: -------------------------------------------------------------------------------- 1 | let handler = async(m, { conn }) => { 2 | 3 | global.prefix = new RegExp('^[' + (opts['prefix'] || '‎xzXZ/i!#$%+£¢€¥^°=¶∆×÷π√✓©®:;?&.\\-').replace(/[|\\{}()[\]^$+*?.\-\^]/g, '\\$&') + ']') 4 | await m.reply(`ⓘ 𝐈𝐥 𝐩𝐫𝐞𝐟𝐢𝐬𝐬𝐨 𝐞' 𝐬𝐭𝐚𝐭𝐨 𝐫𝐞𝐬𝐞𝐭𝐭𝐚𝐭𝐨`) 5 | // conn.fakeReply(m.chat, 'ⓘ 𝐈𝐥 𝐩𝐫𝐞𝐟𝐢𝐬𝐬𝐨 𝐞' 𝐬𝐭𝐚𝐭𝐨 𝐫𝐞𝐬𝐞𝐭𝐭𝐚𝐭𝐨', '0@s.whatsapp.net', 'Reset Prefix') 6 | } 7 | handler.help = ['resetprefix'] 8 | handler.tags = ['owner'] 9 | handler.command = /^(resetprefix|resettaprefisso)$/i 10 | handler.rowner = true 11 | 12 | 13 | export default handler 14 | -------------------------------------------------------------------------------- /plugins/gp-setwelcome.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, isROwner, isOwner }) => { 2 | if (text) { 3 | global.db.data.chats[m.chat].sWelcome = text 4 | m.reply(`ⓘ 𝐈𝐥 𝐛𝐞𝐧𝐯𝐞𝐧𝐮𝐭𝐨 𝐞̀ 𝐬𝐭𝐚𝐭𝐨 𝐢𝐦𝐩𝐨𝐬𝐭𝐚𝐭𝐨`) 5 | } else throw `> ⓘ 𝐈𝐧𝐬𝐞𝐫𝐢𝐬𝐜𝐢 𝐢𝐥 𝐦𝐞𝐬𝐬𝐚𝐠𝐠𝐢𝐨 𝐝𝐢 𝐛𝐞𝐧𝐯𝐞𝐧𝐮𝐭𝐨 𝐜𝐡𝐞 𝐝𝐞𝐬𝐢𝐝𝐞𝐫𝐢 𝐚𝐠𝐠𝐢𝐮𝐧𝐠𝐞𝐫𝐞, 𝐮𝐬𝐚:\n> - @user ( menzione )\n> - @group ( nome del gruppo )\n> - @desc ( descrizione del gruppo)` 6 | } 7 | handler.help = ['setwelcome '] 8 | handler.tags = ['group'] 9 | handler.command = ['setwelcome', 'setbenvenuto'] 10 | handler.admin = true 11 | export default handler -------------------------------------------------------------------------------- /plugins/antipaki.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | let handler = m => m 4 | handler.before = async function (m, {conn, isAdmin, isBotAdmin, isOwner, isROwner}) { 5 | if (!m.isGroup) return !1 6 | let chat = global.db.data.chats[m.chat] 7 | let bot = global.db.data.settings[conn.user.jid] || {} 8 | 9 | if (isBotAdmin && chat.antipaki && !isAdmin && !isOwner && !isROwner && bot.restrict) { 10 | if (m.sender.startsWith('92')) { 11 | let responseb = await conn.groupParticipantsUpdate(m.chat, [m.sender], 'remove') 12 | if (responseb[0].status === "404") return 13 | } 14 | } 15 | } 16 | export default handler; -------------------------------------------------------------------------------- /plugins/owner-listamuti.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, isOwner }) => { 2 | let chats = Object.entries(global.db.data.chats).filter(chat => chat[1].ismuto) 3 | let users = Object.entries(global.db.data.users).filter(user => user[1].muto) 4 | let caption = ` 5 | ┌〔𝐔𝐭𝐞𝐧𝐭𝐢 𝐦𝐮𝐭𝐚𝐭𝐢 🔇〕 6 | ├ 𝐓𝐨𝐭𝐚𝐥𝐞 : ${users.length} ${users ? '\n' + users.map(([jid], i) => ` 7 | ├ ${isOwner ? '@' + jid.split`@`[0] : jid}`.trim()).join('\n') : '├'} 8 | └──── 9 | 10 | 11 | `.trim() 12 | m.reply(caption, null, {mentions: conn.parseMention(caption)})} 13 | handler.command = /^listamuti?$/i 14 | handler.rowner = true 15 | export default handler 16 | -------------------------------------------------------------------------------- /plugins/fun-blur.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn, usedprefix}) => { 2 | const who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender; 3 | conn.sendFile(m.chat, global.API('https://some-random-api.com', '/canvas/blur', { 4 | avatar: await conn.profilePictureUrl(who, 'image').catch((_) => 'https://telegra.ph/file/24fa902ead26340f3df2c.png'), 5 | }), 'hornycard.png', '✨ E stato usato!!\nChatUnity', m); 6 | }; 7 | handler.help = ['blur', 'difuminar2']; 8 | handler.tags = ['maker']; 9 | handler.command = /^(blur|difuminar2)$/i; 10 | export default handler; -------------------------------------------------------------------------------- /plugins/fun-horny.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn}) => { 2 | const who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender; 3 | conn.sendFile(m.chat, global.API('https://some-random-api.com', '/canvas/horny', { 4 | avatar: await conn.profilePictureUrl(who, 'image').catch((_) => 'https://telegra.ph/file/24fa902ead26340f3df2c.png'), 5 | }), 'hornycard.png', '*Quanto sei horny 🥵🔥*', m); 6 | }; 7 | handler.help = ['hornycard', 'hornylicense']; 8 | handler.tags = ['maker']; 9 | handler.command = /^(horny(card|license))$/i; 10 | export default handler; -------------------------------------------------------------------------------- /plugins/to mp3.js: -------------------------------------------------------------------------------- 1 | import { toAudio } from '../lib/converter.js' 2 | let handler = async (m, { conn, usedPrefix, command }) => { 3 | let q = m.quoted ? m.quoted : m 4 | let mime = (q || q.msg).mimetype || q.mediaType || '' 5 | if (!/video|audio/.test(mime)) throw `rispondi a un video o un audio` 6 | let media = await q.download() 7 | if (!media) throw 'errore' 8 | let audio = await toAudio(media, 'mp4') 9 | if (!audio.data) throw 'errore' 10 | conn.sendMessage(m.chat, { audio: audio.data, mimetype: 'audio/mpeg' }, { quoted: m }) 11 | } 12 | handler.alias = ['tomp3', 'toaudio'] 13 | handler.command = /^to(mp3|audio)$/i 14 | export default handler 15 | -------------------------------------------------------------------------------- /plugins/owner-blocklist.js: -------------------------------------------------------------------------------- 1 | /* Creado por https://github.com/FG98F */ 2 | 3 | let handler = async (m, { conn }) => { 4 | await conn.fetchBlocklist().then(async data => { 5 | let txt = `*≡ Lista bloccati*\n\n*Totale :* ${data.length}\n\n┌─⊷\n` 6 | for (let i of data) { 7 | txt += `▢ @${i.split("@")[0]}\n`} 8 | txt += "└───────────" 9 | return conn.reply(m.chat, txt, m, { mentions: await conn.parseMention(txt) }) 10 | }).catch(err => { 11 | console.log(err); 12 | throw 'Nessun utente bloccato'})} 13 | handler.help = ['blocklist'] 14 | handler.tags = ['main'] 15 | handler.command = ['blocklist', 'listblock'] 16 | handler.rowner = true 17 | export default handler 18 | -------------------------------------------------------------------------------- /plugins/owner-azzerabestemmie.js: -------------------------------------------------------------------------------- 1 | const handler = async (m) => { 2 | const text = m.text; 3 | const mention = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : text; 4 | const user = global.db.data.users[mention]; 5 | if (!user) return conn.reply(m.chat, 'Comando non valido assicurati di aver menzionato un utente.'); 6 | conn.reply(m.chat, `@${m.sender.split('@')[0]} 𝐡𝐚 𝐚𝐳𝐳𝐞𝐫𝐚𝐭𝐨 𝐥𝐞 𝐛𝐞𝐬𝐭𝐞𝐦𝐦𝐢𝐞 𝐝𝐢 @${mention.split('@')[0]}`, null, {mentions: [mention, m.sender]}); 7 | user.blasphemy = 0; 8 | }; 9 | 10 | handler.command = /^(azzerabestemmie)$/i; 11 | handler.owner = true; 12 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-id.js: -------------------------------------------------------------------------------- 1 | var handler = async (m, { conn, groupMetadata }) => { 2 | await conn.sendMessage(m.chat, { 3 | text: `ⓘ 𝐋' 𝐢𝐝 𝐝𝐢 𝐪𝐮𝐞𝐬𝐭𝐨 𝐠𝐫𝐮𝐩𝐩𝐨 𝐞' ${await groupMetadata.id}`, 4 | contextInfo: { 5 | forwardingScore: 99, 6 | isForwarded: true, 7 | forwardedNewsletterMessageInfo: { 8 | newsletterJid: '120363259442839354@newsletter', 9 | serverMessageId: '', 10 | newsletterName: 'ChatUnity' 11 | } 12 | } 13 | }, { quoted: m }); 14 | }; 15 | 16 | handler.command = /^(id|gpid|gcid)$/i; 17 | handler.group = true; 18 | export default handler; -------------------------------------------------------------------------------- /plugins/to img.js: -------------------------------------------------------------------------------- 1 | import { webp2png } from '../lib/webp2mp4.js' 2 | let handler = async (m, { conn, usedPrefix, command }) => { 3 | const notStickerMessage = `rispondi a uno sticker ${usedPrefix + command}` 4 | if (!m.quoted) throw notStickerMessage 5 | const q = m.quoted || m 6 | let mime = q.mediaType || '' 7 | if (!/sticker/.test(mime)) throw notStickerMessage 8 | let media = await q.download() 9 | let out = await webp2png(media).catch(_ => null) || Buffer.alloc(0) 10 | await conn.sendFile(m.chat, out, 'error.png', null, m) 11 | } 12 | handler.help = ['toimg (reply)'] 13 | handler.tags = ['sticker'] 14 | handler.command = ['toimg', 'jpg', 'png'] 15 | export default handler 16 | -------------------------------------------------------------------------------- /plugins/sportselect.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { args }) => { 2 | const sport = args[0]?.toLowerCase(); 3 | const valid = ['calcio', 'basket', 'tennis', 'formula1', 'mma', 'ciclismo']; 4 | 5 | if (!valid.includes(sport)) return m.reply('❌ Sport non valido.'); 6 | 7 | global.db.data.users[m.sender] = global.db.data.users[m.sender] || {}; 8 | global.db.data.users[m.sender].preferredSport = sport; 9 | 10 | return m.reply(`✅ Hai scelto *${sport.toUpperCase()}* come sport preferito!\nUsa ora il comando *.news* per leggere le notizie.`); 11 | }; 12 | 13 | handler.command = /^sportselect$/i; 14 | handler.help = ['sportselect']; 15 | handler.tags = ['settings']; 16 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-link.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { conn, args }) => { 2 | const metadata = await conn.groupMetadata(m.chat) 3 | 4 | await conn.sendMessage(m.chat, { 5 | text: `Link del gruppo: *${metadata.subject}*`, 6 | footer: 'Clicca il bottone per copiare il link negli appunti', 7 | interactiveButtons: [ 8 | { name: 'cta_copy', buttonParamsJson: JSON.stringify({ display_text: 'Copia', copy_code: 'https://chat.whatsapp.com/' + await conn.groupInviteCode(m.chat) }) } 9 | ], 10 | }, { quoted: m }) 11 | } 12 | 13 | handler.help = ['linkgroup'] 14 | handler.tags = ['group'] 15 | handler.command = /^link(gro?up)?$/i 16 | handler.group = true 17 | handler.botAdmin = true 18 | 19 | export default handler 20 | -------------------------------------------------------------------------------- /plugins/sticker-scircle.js: -------------------------------------------------------------------------------- 1 | import uploadImage from '../lib/uploadImage.js' 2 | import { sticker } from '../lib/sticker.js' 3 | let handler = async (m, { conn, text }) => { 4 | try { 5 | let q = m.quoted ? m.quoted : m 6 | let mime = (q.msg || q).mimetype || '' 7 | let img = await q.download() 8 | let url = await uploadImage(img) 9 | let scircle = global.API('dzx', '/api/canvas/circle', { url }) 10 | let stiker = await sticker(null, scircle, global.packname, global.author) 11 | conn.sendFile(m.chat, stiker, 'sticker.webp', '', m, { asSticker: true }) 12 | } catch (e) { 13 | 14 | }} 15 | handler.command = /^scircle|circle$/i 16 | export default handler 17 | /* `https://api.dhamzxploit.my.id/api/canvas/circle?url=${url}` */ 18 | -------------------------------------------------------------------------------- /plugins/owner-spegnibot.js: -------------------------------------------------------------------------------- 1 | import { spawn } from 'child_process'; 2 | 3 | let handler = async (m, { conn, isROwner, text }) => { 4 | if (!process.send) return m.react('✖️'); 5 | if (conn.user.jid == conn.user.jid) { 6 | // Bannare tutte le chat 7 | Object.keys(global.db.data.chats).forEach(chatId => { 8 | global.db.data.chats[chatId].isBanned = true; 9 | }); 10 | await m.reply('🚩 Mi sto spegnendo...'); 11 | process.send('reset'); 12 | } else { 13 | return m.react('✖️'); 14 | } 15 | }; 16 | 17 | handler.help = ['spegnibot']; 18 | handler.tags = ['owner']; 19 | handler.command = ['spegnibot']; 20 | 21 | handler.rowner = true; 22 | 23 | export default handler; -------------------------------------------------------------------------------- /plugins/ai-chatgbt-del.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { usedPrefix }) => { 2 | try { 3 | delete global.chatgpt.data.users[m.sender] 4 | await m.reply(`*[ ✔️ ] La cronologia dei messaggi tra te e ChatGPT (IA) è stata eliminata con successo!\n\nRicorda che puoi usare questo comando quando hai qualche problema con il comando ${usedPrefix}ia2*`) 5 | } catch (error) { 6 | console.error('Errore nel comando delchatgpt:', error) 7 | await m.reply(`*⚠️ Errore, per favore riprova più tardi*`) 8 | } 9 | } 10 | 11 | handler.help = ['delchatgpt'] 12 | handler.tags = ['ai'] 13 | handler.command = ['delchatgpt'] 14 | handler.desc = 'Elimina la cronologia delle chat con ChatGPT' 15 | export default handler -------------------------------------------------------------------------------- /plugins/ADMIN_profilepic.js: -------------------------------------------------------------------------------- 1 | // Plugins Di Gabs333 - Velocizzato 2 | let handler = async (m, { conn }) => { 3 | let who = m.mentionedJid?.[0] || m.quoted?.sender || m.sender; 4 | if (who === conn.user.jid) return m.reply('🚫 Impossibile ottenere la foto profilo del bot.'); 5 | try { 6 | let pic = await conn.profilePictureUrl(who, 'image'); 7 | conn.sendMessage(m.chat, { image: { url: pic }, caption: '📸' }, { quoted: m, mentions: [who] }); 8 | } catch { 9 | m.reply(`@${who.split('@')[0]} non ha una foto profilo 🚫`, null, { mentions: [who] }); 10 | } 11 | }; 12 | handler.command = /^(pic)$/i; 13 | handler.group = true; 14 | handler.admin = true; 15 | export default handler; 16 | -------------------------------------------------------------------------------- /plugins/fun-negro.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, command, text, usedPrefix }) => { 2 | let target = text ? text.replace(/[@]/g, '') + '@s.whatsapp.net' : (m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0]); 3 | if (!target) return; 4 | 5 | if (command == 'negro' || command == 'nero') { 6 | let name = await conn.getName(target); 7 | conn.reply(m.chat, ` 8 | @${target.split('@')[0]} è ⚫ ${(Math.floor(Math.random() * 100) + 1)}% ${command.toUpperCase()} 9 | `.trim(), null, { 10 | mentions: [target] 11 | }); 12 | } 13 | } 14 | 15 | handler.help = ['negro', 'nero'].map(v => v + ' @tag | nombre') 16 | handler.tags = ['calculator'] 17 | handler.command = /^nero|negro$/i 18 | 19 | export default handler -------------------------------------------------------------------------------- /plugins/admin_linkqr.js: -------------------------------------------------------------------------------- 1 | //Plugin fatto da Gabs & 333 Staff 2 | import QRCode from 'qrcode'; 3 | 4 | const handler = async (m, { conn }) => { 5 | try { 6 | const inviteLink = 'https://chat.whatsapp.com/' + await conn.groupInviteCode(m.chat); 7 | const qrImageBuffer = await QRCode.toBuffer(inviteLink); 8 | await conn.sendMessage(m.chat, { image: qrImageBuffer, caption: 'Ecco il QR Code per il link del gruppo!' }); 9 | } catch (error) { 10 | m.reply('Errore durante la generazione del QR Code: ' + error.message); 11 | } 12 | }; 13 | 14 | handler.help = ['linkgroup']; 15 | handler.tags = ['group']; 16 | handler.command = /^linkqr(gro?up)?$/i; 17 | handler.group = true; 18 | handler.botAdmin = true; 19 | 20 | export default handler; -------------------------------------------------------------------------------- /plugins/tool-leggi.js: -------------------------------------------------------------------------------- 1 | 2 | import fetch from 'node-fetch'; 3 | import {webp2png} from '../lib/webp2mp4.js'; 4 | 5 | const handler = async (m, {conn}) => { 6 | const q = m.quoted ? m.quoted : m; 7 | const mime = (q || q.msg).mimetype || q.mediaType || ''; 8 | if (/image/.test(mime)) { 9 | const url = await webp2png(await q.download()); 10 | const res = await fetch(API('https://api.ocr.space', '/parse/imageurl', {apikey: '8e65f273cd88957', url})); 11 | if (res.status !== 200) throw res.statusText; 12 | const json = await res.json(); 13 | m.reply(json?.ParsedResults?.[0]?.ParsedText); 14 | } else return; 15 | }; 16 | handler.help = ['ocr']; 17 | handler.tags = ['tools']; 18 | handler.command = /^ocr|leggi$/i; 19 | 20 | export default handler; 21 | -------------------------------------------------------------------------------- /plugins/ADMIN_accetta-richieste.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, isAdmin, isBotAdmin }) => { 2 | if (!m.isGroup || !isBotAdmin || !isAdmin) return 3 | try { 4 | const pending = await conn.groupRequestParticipantsList(m.chat) 5 | if (!pending.length) return m.reply("Nessuna richiesta da accettare.") 6 | let count = 0 7 | for (let p of pending) { 8 | try { 9 | await conn.groupRequestParticipantsUpdate(m.chat, [p.jid], 'approve') 10 | count++ 11 | } catch {} 12 | } 13 | m.reply(`✅ Accettate ${count} richieste.`) 14 | } catch { 15 | m.reply('Errore.') 16 | } 17 | } 18 | handler.command = ['accettarichieste'] 19 | handler.group = true 20 | handler.admin = true 21 | handler.botAdmin = true 22 | export default handler 23 | -------------------------------------------------------------------------------- /plugins/antibot.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | export async function before(m, { conn, isAdmin, isBotAdmin }) { 4 | if (!m.isGroup) return; 5 | let chat = global.db.data.chats[m.chat]; 6 | if (!chat.antiBot) return; 7 | 8 | let delet = m.key.participant; 9 | let bang = m.key.id; 10 | if (m.fromMe) return true; 11 | 12 | if ( 13 | (m.id.startsWith('NJX-') || 14 | (m.id.startsWith('BAE5') && m.id.length === 16) || 15 | (m.id.startsWith('B24E') && m.id.length === 20)) 16 | ) { 17 | if (isBotAdmin) { 18 | await conn.sendMessage(m.chat, { delete: { remoteJid: m.chat, fromMe: false, id: bang, participant: delet }}); 19 | await conn.groupParticipantsUpdate(m.chat, [m.sender], 'remove'); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /plugins/fun-stupido.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, {conn, args}) => { 2 | const wm = 'defaultWatermark'; // Define wm with an appropriate value 3 | const text = args.slice(1).join(' '); 4 | const who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender; 5 | conn.sendFile(m.chat, global.API('https://some-random-api.com', '/canvas/its-so-stupid', { 6 | avatar: await conn.profilePictureUrl(who, 'image').catch((_) => 'https://telegra.ph/file/24fa902ead26340f3df2c.png'), 7 | dog: text || 'im+stupid', 8 | }), 'error.png', `*@${wm}*`, m); 9 | }; 10 | handler.help = ['stupida', 'iss', 'stupido']; 11 | handler.tags = ['maker']; 12 | handler.command = /^(stupida|iss|stupido)$/i; 13 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-scopa.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text }) => { 2 | 3 | let user = m.mentionedJid?.[0] || m.quoted?.sender; 4 | 5 | if (!user) throw '❗ Tagga un utente o rispondi a un suo messaggio per usare questo comando.'; 6 | 7 | let target = user.split('@')[0]; 8 | let sender = m.sender.split('@')[0]; 9 | 10 | 11 | let message = `*🔥 @${sender} sta scopando con @${target}... 💋*`; 12 | 13 | 14 | await conn.reply(m.chat, message, m, { mentions: [user, m.sender] }); 15 | 16 | 17 | await conn.sendMessage(m.chat, { 18 | react: { 19 | text: '💦', 20 | key: m.key 21 | } 22 | }); 23 | }; 24 | 25 | 26 | handler.customPrefix = /^\.scopa$/i; 27 | handler.command = new RegExp; 28 | export default handler; -------------------------------------------------------------------------------- /plugins/go-evento.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, args, command }) => { 2 | const jid = m.chat; 3 | const now = Date.now(); 4 | const startTime = now + 60 * 60 * 1000; 5 | const endTime = now + 3 * 60 * 60 * 1000; 6 | 7 | await conn.sendMessage( 8 | jid, 9 | { 10 | event: { 11 | isCanceled: false, 12 | name: 'mangiamo zozzap', 13 | description: 'preparate i culi', 14 | location: { 15 | degreesLatitude: 45.4642, 16 | degreesLongitude: 9.19, 17 | name: 'zozzap' 18 | }, 19 | startTime, 20 | endTime, 21 | extraGuestsAllowed: true 22 | } 23 | }, 24 | { quoted: m } 25 | ); 26 | }; 27 | 28 | handler.command = ['creaevento']; 29 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-tagall.js: -------------------------------------------------------------------------------- 1 | //Plugin creato da Gab333 - Velocizzato 2 | let handler = async (m, { isOwner, isAdmin, conn, text, participants, args }) => { 3 | if (!(isAdmin || isOwner)) return 4 | 5 | let message = args.join` ` || 'Messaggio vuoto' 6 | let tagText = `🔔 MEMBRI DEL GRUPPO\n\nBOT: ${nomebot}\n${message}\n\n` 7 | 8 | for (let user of participants) { 9 | tagText += `✧ @${user.id.split('@')[0]}\n` 10 | } 11 | tagText += '\n══════ •⊰✦⊱• ══════' 12 | 13 | conn.sendMessage(m.chat, { 14 | text: tagText, 15 | mentions: participants.map(p => p.id) 16 | }, { quoted: m }) 17 | } 18 | 19 | handler.command = /^(tagall|invocar|marcar|todos)$/i 20 | handler.group = true 21 | handler.admin = true 22 | export default handler 23 | -------------------------------------------------------------------------------- /plugins/owner-unbanchat.js: -------------------------------------------------------------------------------- 1 | let handler = async (m) => { 2 | global.db.data.chats[m.chat].isBanned = false; 3 | let message = '𝐜𝐡𝐚𝐭 𝐬𝐛𝐥𝐨𝐜𝐜𝐚𝐭𝐚 𝐜𝐨𝐧 𝐬𝐮𝐜𝐜𝐞𝐬𝐬𝐨 ✓'; 4 | await conn.sendMessage(m.chat, { 5 | text: message, 6 | contextInfo: { 7 | forwardingScore: 99, 8 | isForwarded: true, 9 | forwardedNewsletterMessageInfo: { 10 | newsletterJid: '120363259442839354@newsletter', 11 | serverMessageId: '', 12 | newsletterName: 'ChatUnity' 13 | } 14 | } 15 | }, { quoted: m }); 16 | }; 17 | 18 | handler.help = ['unbanchat']; 19 | handler.tags = ['owner']; 20 | handler.command = /^unbanchat|unbangp$/i; 21 | handler.rowner = true; 22 | export default handler; 23 | -------------------------------------------------------------------------------- /plugins/darknessinfo.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | const message = ` 3 | 🌑 *PACCHETTI DARKNESS* 🌑 4 | 5 | I pacchetti *Darkness* non si possono comprare, ma si trovano **apparentemente dal nulla** quando apri pacchetti *Premium*. 6 | 7 | ➡️ Ogni 10 pacchetti *Premium* aperti, hai il 50% di possibilità di ottenere un pacchetto *Darkness* bonus. 8 | 9 | 🎲 Aprendo un pacchetto *Darkness* puoi trovare Pokémon Darkness speciali con il 10% di possibilità. 10 | 11 | Usa *.apri darkness* per aprire i pacchetti Darkness. 12 | 13 | Buona fortuna! 🍀 14 | `; 15 | 16 | await conn.sendMessage(m.chat, { text: message }, { quoted: m }); 17 | }; 18 | 19 | handler.help = ['darknessinfo']; 20 | handler.tags = ['pokemon']; 21 | handler.command = /^darknessinfo$/i; 22 | 23 | export default handler; -------------------------------------------------------------------------------- /plugins/autoadmin fake.js: -------------------------------------------------------------------------------- 1 | import { performance } from 'perf_hooks' 2 | 3 | let handler = async (m, { conn, usedPrefix }) => { 4 | let nomeDelBot = global.db.data.nomedelbot || `𝐂𝐡𝐚𝐭𝐔𝐧𝐢𝐭𝐲` 5 | 6 | const messageOptions = { 7 | contextInfo: { 8 | forwardingScore: 999, 9 | isForwarded: true, 10 | forwardedNewsletterMessageInfo: { 11 | newsletterJid: '120363259442839354@newsletter', 12 | serverMessageId: '', 13 | newsletterName: `${nomeDelBot}` 14 | } 15 | } 16 | } 17 | 18 | await conn.sendMessage(m.chat, { 19 | text: `𝐑𝐢𝐭𝐞𝐧𝐭𝐚, 𝐬𝐚𝐫𝐚𝐢 𝐩𝐢𝐮́ 𝐟𝐨𝐫𝐭𝐮𝐧𝐚𝐭𝐨 😂`, 20 | ...messageOptions 21 | }) 22 | } 23 | 24 | handler.help = ['autoadmin'] 25 | handler.tags = ['fun'] 26 | handler.command = /^(autoadmin)$/i 27 | 28 | export default handler -------------------------------------------------------------------------------- /plugins/owner-cleartmp.js: -------------------------------------------------------------------------------- 1 | import { tmpdir } from 'os' 2 | import path, { join } from 'path' 3 | import { 4 | readdirSync, 5 | statSync, 6 | unlinkSync, 7 | existsSync, 8 | readFileSync, 9 | watch 10 | } from 'fs' 11 | let handler = async (m, { conn, usedPrefix: _p, __dirname, args }) => { 12 | 13 | conn.reply(m.chat, '𝐚𝐫𝐜𝐡𝐢𝐯𝐢 𝐞𝐥𝐢𝐦𝐢𝐧𝐚𝐭𝐢 𝐜𝐨𝐧 𝐬𝐮𝐜𝐜𝐞𝐬𝐬𝐨 ✓', m) 14 | 15 | const tmp = [tmpdir(), join(__dirname, '../tmp')] 16 | const filename = [] 17 | tmp.forEach(dirname => readdirSync(dirname).forEach(file => filename.push(join(dirname, file)))) 18 | return filename.map(file => { 19 | const stats = statSync(file) 20 | unlinkSync(file) 21 | })} 22 | handler.help = ['cleartmp'] 23 | handler.tags = ['owner'] 24 | handler.command = /^(cleartmp|cleartemp)$/i 25 | handler.rowner = true 26 | export default handler 27 | -------------------------------------------------------------------------------- /plugins/gp-reimpostalink.js: -------------------------------------------------------------------------------- 1 | 2 | let handler = async(m, { conn }) => { 3 | let nomeDelBot = global.db.data.nomedelbot || `𝐂𝐡𝐚𝐭𝐔𝐧𝐢𝐭𝐲` 4 | let revoke = await conn.groupRevokeInvite(m.chat) 5 | 6 | await conn.sendMessage(m.chat, { 7 | text: `🔹️ *link reimpostato*\n♾ • ID: ${'https://chat.whatsapp.com/' + revoke}`, 8 | contextInfo: { 9 | forwardingScore: 999, 10 | isForwarded: true, 11 | forwardedNewsletterMessageInfo: { 12 | newsletterJid: '120363259442839354@newsletter', 13 | serverMessageId: '', 14 | newsletterName: `${nomeDelBot}` 15 | } 16 | } 17 | }) 18 | } 19 | 20 | handler.command = ['reimposta', 'revoke'] 21 | handler.botAdmin = true 22 | handler.admin = true 23 | handler.group = true 24 | 25 | export default handler -------------------------------------------------------------------------------- /lib/webp2png.js: -------------------------------------------------------------------------------- 1 | import { tmpdir } from 'os' 2 | import { spawn } from 'child_process' 3 | import fs from 'fs' 4 | import path from 'path' 5 | 6 | export async function webp2png(buffer) { 7 | const inputPath = path.join(tmpdir(), `input_${Date.now()}.webp`) 8 | const outputPath = path.join(tmpdir(), `output_${Date.now()}.png`) 9 | fs.writeFileSync(inputPath, buffer) 10 | 11 | await new Promise((resolve, reject) => { 12 | const ffmpeg = spawn('ffmpeg', ['-y', '-i', inputPath, outputPath]) 13 | ffmpeg.stderr.on('data', data => { }) // silenzioso 14 | ffmpeg.on('close', code => { 15 | fs.existsSync(outputPath) ? resolve() : reject(new Error('Conversione fallita')) 16 | }) 17 | }) 18 | 19 | const out = fs.readFileSync(outputPath) 20 | fs.unlinkSync(inputPath) 21 | fs.unlinkSync(outputPath) 22 | return out 23 | } -------------------------------------------------------------------------------- /plugins/classifica.js: -------------------------------------------------------------------------------- 1 | let leaderboardHandler = async (m, { conn }) => { 2 | let users = Object.entries(global.db.data.users) 3 | .map(([id, data]) => ({ 4 | id, 5 | name: data.name || id, 6 | count: data.pokemons?.length || 0 7 | })) 8 | .filter(u => u.count > 0) 9 | .sort((a, b) => b.count - a.count) 10 | .slice(0, 10) 11 | 12 | if (users.length === 0) { 13 | return m.reply('😢 Nessun collezionista trovato.') 14 | } 15 | 16 | let rankMsg = `🏆 *Top 10 Collezionisti Pokémon*:\n\n` + users.map((u, i) => 17 | `${i + 1}. ${u.name} - ${u.count} carte` 18 | ).join('\n') 19 | 20 | m.reply(rankMsg) 21 | } 22 | 23 | leaderboardHandler.help = ['classifica'] 24 | leaderboardHandler.tags = ['pokemon'] 25 | leaderboardHandler.command = /^classificapokemon$/i 26 | 27 | export default leaderboardHandler -------------------------------------------------------------------------------- /lib/uploadImage.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch'; 2 | import {FormData, Blob} from 'formdata-node'; 3 | import {fileTypeFromBuffer} from 'file-type'; 4 | 5 | /** 6 | * Upload image to telegra.ph 7 | * Supported mimetype: 8 | * - `image/jpeg` 9 | * - `image/jpg` 10 | * - `image/png`s 11 | * @param {Buffer} buffer Image Buffer 12 | * @return {Promise} 13 | */ 14 | export default async (buffer) => { 15 | const {ext, mime} = await fileTypeFromBuffer(buffer); 16 | const form = new FormData(); 17 | const blob = new Blob([buffer.toArrayBuffer()], {type: mime}); 18 | form.append('file', blob, 'tmp.' + ext); 19 | const res = await fetch('https://telegra.ph/upload', { 20 | method: 'POST', 21 | body: form, 22 | }); 23 | const img = await res.json(); 24 | if (img.error) throw img.error; 25 | return 'https://telegra.ph' + img[0].src; 26 | }; 27 | -------------------------------------------------------------------------------- /plugins/gp-promuovi.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn,usedPrefix, text }) => { 2 | if(isNaN(text) && !text.match(/@/g)){ 3 | 4 | }else if(isNaN(text)) { 5 | var number = text.split`@`[1] 6 | }else if(!isNaN(text)) { 7 | var number = text 8 | } 9 | 10 | if(!text && !m.quoted) return 11 | if(number.length > 13 || (number.length < 11 && number.length > 0)) return 12 | 13 | try { 14 | if(text) { 15 | var user = number + '@s.whatsapp.net' 16 | } else if(m.quoted.sender) { 17 | var user = m.quoted.sender 18 | } else if(m.mentionedJid) { 19 | var user = number + '@s.whatsapp.net' 20 | } 21 | } catch (e) { 22 | } finally { 23 | conn.groupParticipantsUpdate(m.chat, [user], 'promote') 24 | }} 25 | handler.command = /^(p|promuovi|mettiadmin|p)$/i 26 | handler.group = true 27 | handler.admin = true 28 | handler.botAdmin = true 29 | handler.fail = null 30 | export default handler 31 | -------------------------------------------------------------------------------- /plugins/gp-guida.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | let guidaMessage = ` 3 | 𝐆𝐔𝐈𝐃𝐀 𝐀𝐈 𝐂𝐎𝐌𝐀𝐍𝐃𝐈 𝐃𝐈 𝐂𝐇𝐀𝐓𝐔𝐍𝐈𝐓𝐘-𝐁𝐎𝐓 4 | 5 | \`𝐋𝐈𝐍𝐊 𝐆𝐎𝐎𝐆𝐋𝐄 𝐃𝐎𝐂𝐒:\` 6 | https://docs.google.com/document/d/e/2PACX-1vSgfwbRZrQM2W-3tctvqX7_0eAF-FvU3K_SK8txRfGkNzJjziAIVV8G2EIMg4Ju03TlGIzMKaicjWTH/pub 7 | `.trim(); 8 | 9 | let messageOptions = { 10 | contextInfo: { 11 | forwardingScore: 999, 12 | isForwarded: true, 13 | forwardedNewsletterMessageInfo: { 14 | newsletterJid: '120363259442839354@newsletter', 15 | serverMessageId: '', 16 | newsletterName: 'ChatUnity Bot' 17 | } 18 | } 19 | }; 20 | 21 | conn.reply(m.chat, guidaMessage, m, messageOptions); 22 | }; 23 | 24 | handler.help = ['guida']; 25 | handler.tags = ['info']; 26 | handler.command = /^(guida)$/i; 27 | 28 | export default handler; 29 | -------------------------------------------------------------------------------- /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 | ┌〔𝐔𝐭𝐞𝐧𝐭𝐢 𝐛𝐥𝐨𝐜𝐜𝐚𝐭𝐢 👨🏻‍✈️〕 6 | ├ 𝐓𝐨𝐭𝐚𝐥𝐞 : ${users.length} ${users ? '\n' + users.map(([jid], i) => ` 7 | ├ ${isOwner ? '@' + jid.split`@`[0] : jid}`.trim()).join('\n') : '├'} 8 | └──── 9 | 10 | ┌〔𝐂𝐡𝐚𝐭 𝐛𝐥𝐨𝐜𝐜𝐚𝐭𝐞 👨🏻‍✈️〕 11 | ├ 𝐓𝐨𝐭𝐚𝐥𝐞 : ${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.command = /^banlist(ned)?|ban(ned)?list|daftarban(ned)?$/i 17 | handler.rowner = true 18 | export default handler 19 | -------------------------------------------------------------------------------- /plugins/sticker-wm.js: -------------------------------------------------------------------------------- 1 | import { addExif } from '../lib/sticker.js' 2 | let handler = async (m, { conn, text }) => { 3 | if (!m.quoted) throw 'rispondi a uno 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)) throw 'rispondi a uno sticker' 10 | let img = await m.quoted.download() 11 | if (!img) throw 'rispondi a uno 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, false, { asSticker: true }) 18 | else throw 'errore' 19 | }} 20 | handler.help = ['wm |'] 21 | handler.tags = ['sticker'] 22 | handler.command = /^robar|wm$/i 23 | export default handler 24 | -------------------------------------------------------------------------------- /plugins/info-canali.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { conn }) => { 2 | const text = ` 3 | ╭━〔 *🌐 CANALI UFFICIALI* 〕━┈⊷ 4 | ┃─────────────·๏ 5 | ┃✨ *ChatUnity* 6 | ┃🔗 https://whatsapp.com/channel/0029VaZVlJZHwXb8naJBQN0J 7 | ┃ 8 | ┃🤖 *ChatUnity-Bot* 9 | ┃🔗 https://whatsapp.com/channel/0029Vb32UwhA89MZtd6WRS3G 10 | ┃ 11 | ┃🌍 *ChatUnity Server* 12 | ┃🔗 https://whatsapp.com/channel/0029VbA4h0pKmCPS5ozJsm3j 13 | ┃╰─────────────·๏ 14 | ╰━━━━━━━━━━━━━━━━━━━⊷ 15 | 16 | *Unisciti ai nostri canali per restare aggiornato, ricevere supporto e scoprire tutte le novità!* 17 | 18 | 💎 _Powered by ChatUnity_ 19 | `.trim(); 20 | 21 | await conn.sendMessage(m.chat, { 22 | text, 23 | footer: 'Scegli un canale e unisciti!' 24 | }, { quoted: m }); 25 | }; 26 | 27 | handler.help = ['canali']; 28 | handler.tags = ['info']; 29 | handler.command = /^canali$/i; 30 | 31 | export default handler; 32 | -------------------------------------------------------------------------------- /plugins/owner-riavvio.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { conn, isROwner, text }) => { 2 | const datas = global 3 | 4 | if (!process.send) throw 'Dont: node main.js\nDo: node index.js' 5 | const { key } = await conn.sendMessage(m.chat, {text: `Sto riavviando`}, {quoted: m}) 6 | await delay(1000 * 1) 7 | await conn.sendMessage(m.chat, {text: `🚀🚀🚀🚀`, edit: key}) 8 | await delay(1000 * 1) 9 | await conn.sendMessage(m.chat, {text: `🚀🚀🚀🚀🚀🚀`, edit: key}) 10 | await conn.sendMessage(m.chat, {text: `Riavviato con successo`, edit: key}) 11 | //process.send('reset') 12 | process.exit(0); 13 | } 14 | handler.help = ['riavvia'] 15 | handler.tags = ['owner'] 16 | handler.command = ['riavvia','reiniciar'] 17 | handler.owner = true 18 | export default handler 19 | 20 | const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)) -------------------------------------------------------------------------------- /plugins/fun-odio.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, command, text }) => { 2 | let nomeDelBot = global.db.data.nomedelbot || `𝐂𝐡𝐚𝐭𝐔𝐧𝐢𝐭𝐲` 3 | 4 | let love = `──────────────\n𝐂𝐀𝐋𝐂𝐎𝐋𝐀𝐓𝐎𝐑𝐄 𝐃𝐈 𝐎𝐃𝐈𝐎 😡 5 | L'odio tra ${text} e te: ${Math.floor(Math.random() * 100)}%\n──────────────`.trim() 6 | 7 | await conn.sendMessage(m.chat, { 8 | text: love, 9 | contextInfo: { 10 | mentionedJid: conn.parseMention(love), 11 | forwardingScore: 999, 12 | isForwarded: true, 13 | forwardedNewsletterMessageInfo: { 14 | newsletterJid: '120363259442839354@newsletter', 15 | serverMessageId: '', 16 | newsletterName: `${nomeDelBot}` 17 | } 18 | } 19 | }) 20 | } 21 | 22 | handler.command = /^(odio)$/i 23 | handler.tags = ['fun'] 24 | handler.help = ['odio @tag'] 25 | 26 | export default handler -------------------------------------------------------------------------------- /plugins/pokemon-pyti.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | const user = m.sender; 3 | global.db.data.users[user] = global.db.data.users[user] || {}; 4 | const data = global.db.data.users[user]; 5 | 6 | data.pityCounter = data.pityCounter || 0; 7 | 8 | const rimanenti = Math.max(15 - data.pityCounter, 0); 9 | 10 | let messaggio = `📊 *Sistema Pity Darkness*\n\n`; 11 | messaggio += `🔁 Pacchetti aperti senza Darkness: *${data.pityCounter}*\n`; 12 | messaggio += `🎯 Prossimo Darkness garantito tra: *${rimanenti}* pacchetti\n`; 13 | 14 | if (data.pityCounter >= 15) { 15 | messaggio += `\n✨ Il prossimo pacchetto ha un Darkness *garantito*!`; 16 | } 17 | 18 | await conn.sendMessage(m.chat, { text: messaggio, mentions: [user] }, { quoted: m }); 19 | }; 20 | 21 | handler.help = ['pity']; 22 | handler.tags = ['pokemon']; 23 | handler.command = /^pity$/i; 24 | 25 | export default handler; -------------------------------------------------------------------------------- /lib/gtts.js: -------------------------------------------------------------------------------- 1 | import googleTTS from 'node-gtts' 2 | import { fileURLToPath } from 'url' 3 | import { dirname } from 'path' 4 | import fs from 'fs' 5 | 6 | const __dirname = dirname(fileURLToPath(import.meta.url)) 7 | export async function textToSpeech(text, lang = 'it') { 8 | return new Promise((resolve, reject) => { 9 | try { 10 | const tts = new googleTTS(lang) 11 | const filePath = `${__dirname}/temp/${Date.now()}.mp3` 12 | const tempDir = `${__dirname}/temp` 13 | if (!fs.existsSync(tempDir)) { 14 | fs.mkdirSync(tempDir, { recursive: true }) 15 | } 16 | tts.save(filePath, text, () => { 17 | const data = fs.readFileSync(filePath) 18 | fs.unlinkSync(filePath) 19 | resolve(data) 20 | }) 21 | } catch (e) { 22 | reject(e) 23 | } 24 | }) 25 | } -------------------------------------------------------------------------------- /plugins/OWNER_file.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | let handler = async (m, { text, conn, usedPrefix, command }) => { 5 | let fileName = text.trim(); 6 | if (!fileName) { 7 | return m.reply("⚠️ Devi specificare il nome del file da creare. Es: `.file nome.txt`"); 8 | } 9 | 10 | let filePath = path.join(process.cwd(), fileName); 11 | 12 | if (fs.existsSync(filePath)) { 13 | return m.reply(`⚠️ Il file "${fileName}" esiste già.`); 14 | } 15 | 16 | fs.writeFile(filePath, '', (err) => { 17 | if (err) { 18 | console.error(`Errore nella creazione del file: ${err.message}`); 19 | return m.reply(`❌ Errore nella creazione del file: ${err.message}`); 20 | } 21 | m.reply(`✅ Il file "${fileName}" è stato creato con successo nella cartella del bot.`); 22 | }); 23 | }; 24 | 25 | handler.command = /^file$/i; 26 | handler.owner = true; 27 | export default handler; -------------------------------------------------------------------------------- /plugins/fun-stupra.js: -------------------------------------------------------------------------------- 1 | 2 | let handler = async (m, { conn, command, text }) => { 3 | if (!text) throw `Tagga chi desideri stuprare 🥵🤤` 4 | let user = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted.sender 5 | conn.reply(m.chat, ` 6 | *𝐒𝐓𝐀𝐈 𝐒𝐓𝐔𝐏𝐑𝐀𝐍𝐃𝐎 ${text} !* 7 | 8 | 𝙨𝙚𝙞 𝙨𝙩𝙖𝙩𝙖 𝙨𝙩𝙪𝙥𝙧𝙖𝙩𝙖 𝙖 𝟵𝟬 𝙚 𝙩𝙞 𝙝𝙖 𝙩𝙧𝙖𝙩𝙩𝙖𝙩𝙤 𝙘𝙤𝙢𝙚 𝙪𝙣𝙖 𝙥𝙪𝙩𝙩𝙖𝙣𝙖 𝙙𝙞 𝙢𝙚𝙧𝙙𝙖 " 𝐀𝐡𝐡𝐡.., 𝐀𝐚𝐚𝐚𝐡𝐡, 𝐬𝐢 𝐜𝐨𝐧𝐭𝐢𝐧𝐮𝐚, 𝐧𝐨𝐧 𝐟𝐞𝐫𝐦𝐚𝐫𝐭𝐢, 𝐧𝐨𝐧 𝐟𝐞𝐫𝐦𝐚𝐫𝐭𝐢 " 𝙚 𝙩𝙞 𝙝𝙖 𝙡𝙖𝙨𝙘𝙞𝙖𝙩𝙤 𝙘𝙤𝙨𝙞̀ 𝙜𝙤𝙣𝙛𝙞𝙖 𝙘𝙝𝙚 𝙣𝙤𝙣 𝙧𝙞𝙚𝙨𝙘𝙞 𝙣𝙚𝙢𝙢𝙚𝙣𝙤 𝙖 𝙧𝙚𝙜𝙜𝙚𝙧𝙩𝙞 𝙞𝙣 𝙥𝙞𝙚𝙙𝙞 𝙨𝙩𝙪𝙥𝙞𝙙𝙖 𝙩𝙧𝙤𝙞𝙖 𝙙𝙞 𝙢𝙚𝙧𝙙𝙖 9 | 10 | *${text}* 11 | 🤤🥵 *¡𝐓𝐈 𝐇𝐀𝐍𝐍𝐎 𝐅𝐎𝐓𝐓𝐔𝐓𝐎 𝐏𝐄𝐑 𝐁𝐄𝐍𝐄!* 🥵🤤`, null, { mentions: [user] }) 12 | } 13 | 14 | handler.customPrefix = /stupra/i 15 | handler.admin = true 16 | handler.command = new RegExp 17 | export default handler 18 | -------------------------------------------------------------------------------- /plugins/gp-aperto&chiuso.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, command }) => { 2 | let isOpen = command === 'aperto' 3 | await conn.groupSettingUpdate(m.chat, isOpen ? 'not_announcement' : 'announcement') 4 | await conn.sendMessage(m.chat, { 5 | text: isOpen ? '𝐂𝐡𝐚𝐭 𝐚𝐩𝐞𝐫𝐭𝐚 𝐩𝐞𝐫 𝐭𝐮𝐭𝐭𝐢' : '𝐂𝐡𝐚𝐭 𝐩𝐞𝐫 𝐬𝐨𝐥𝐢 𝐚𝐝𝐦𝐢𝐧', 6 | contextInfo: { 7 | forwardingScore: 99, 8 | isForwarded: true, 9 | forwardedNewsletterMessageInfo: { 10 | newsletterJid: '120363259442839354@newsletter', 11 | serverMessageId: '', 12 | newsletterName: global.db.data.nomedelbot || `𝐂𝐡𝐚𝐭𝐔𝐧𝐢𝐭𝐲` 13 | } 14 | } 15 | }, { quoted: m }) 16 | } 17 | 18 | handler.help = ['aperto', 'chiuso'] 19 | handler.tags = ['group'] 20 | handler.command = /^(aperto|chiuso)$/i 21 | handler.admin = true 22 | handler.botAdmin = true 23 | 24 | export default handler -------------------------------------------------------------------------------- /plugins/to video.js: -------------------------------------------------------------------------------- 1 | import { webp2mp4 } from '../lib/webp2mp4.js' 2 | import { ffmpeg } from '../lib/converter.js' 3 | let handler = async (m, { conn, usedPrefix, command }) => { 4 | if (!m.quoted) throw `rispondi a uno sticker ${usedPrefix + command}` 5 | let mime = m.quoted.mimetype || '' 6 | if (!/webp/.test(mime)) throw `rispondi a uno sticker ${usedPrefix + command}` 7 | let media = await m.quoted.download() 8 | let out = Buffer.alloc(0) 9 | if (/webp/.test(mime)) { 10 | out = await webp2mp4(media) 11 | } else if (/audio/.test(mime)) { 12 | out = await ffmpeg(media, [ 13 | '-filter_complex', 'color', 14 | '-pix_fmt', 'yuv420p', 15 | '-crf', '51', 16 | '-c:a', 'copy', 17 | '-shortest' 18 | ], 'mp3', 'mp4') 19 | } 20 | await conn.sendFile(m.chat, out, 'error.mp4', 'Completato', m, 0, { thumbnail: out }) 21 | } 22 | handler.help = ['tovideo'] 23 | handler.tags = ['sticker'] 24 | handler.command = ['tovideo', 'tomp4', 'mp4', 'togif'] 25 | export default handler 26 | -------------------------------------------------------------------------------- /plugins/tools-offusca.js: -------------------------------------------------------------------------------- 1 | import JavaScriptObfuscator from 'javascript-obfuscator' 2 | 3 | let handler = async (m, { conn, text }) => { 4 | // Usa il testo del messaggio citato se text è vuoto 5 | let codiceDaOffuscare = text || (m.quoted && m.quoted.text); 6 | 7 | if (!codiceDaOffuscare) { 8 | return m.reply(`⚠️ *Inserisci il codice JavaScript da offuscare o rispondi a un messaggio che lo contiene!*`); 9 | } 10 | 11 | function offuscaCodice(codice) { 12 | return JavaScriptObfuscator.obfuscate(codice, { 13 | compact: false, 14 | controlFlowFlattening: true, 15 | deadCodeInjection: true, 16 | simplify: true, 17 | numbersToExpressions: true 18 | }).getObfuscatedCode(); 19 | } 20 | 21 | let codiceOffuscato = await offuscaCodice(codiceDaOffuscare); 22 | conn.sendMessage(m.chat, { text: codiceOffuscato }, { quoted: m }); 23 | } 24 | 25 | handler.command = /^(ofuscare|offuscare|offusca)$/i 26 | export default handler -------------------------------------------------------------------------------- /plugins/gp-setregole.js: -------------------------------------------------------------------------------- 1 | let handler = async function (m, { conn, text, usedPrefix }) { 2 | let chat = global.db.data.chats[m.chat]; 3 | if (text) { 4 | chat.rules = text; 5 | await conn.sendMessage(m.chat, { 6 | text: `ⓘ 𝐑𝐞𝐠𝐨𝐥𝐞 𝐝𝐞𝐥 𝐠𝐫𝐮𝐩𝐩𝐨 𝐬𝐞𝐭𝐭𝐚𝐭𝐞 𝐜𝐨𝐧 𝐬𝐮𝐜𝐜𝐞𝐬𝐬𝐨`, 7 | contextInfo: { 8 | forwardingScore: 99, 9 | isForwarded: true, 10 | forwardedNewsletterMessageInfo: { 11 | newsletterJid: '120363259442839354@newsletter', 12 | serverMessageId: '', 13 | newsletterName: 'ChatUnity' 14 | } 15 | } 16 | }, { quoted: m }); 17 | } else throw `ⓘ 𝐍𝐞𝐬𝐬𝐮𝐧𝐚 𝐫𝐞𝐠𝐨𝐥𝐚 𝐝𝐞𝐥 𝐠𝐫𝐮𝐩𝐩𝐨 𝐬𝐞𝐭𝐭𝐚𝐭𝐚`; 18 | }; 19 | 20 | handler.help = ['setrules ']; 21 | handler.tags = ['group']; 22 | handler.command = ['setrules', 'setregole']; 23 | handler.group = true; 24 | handler.admin = true; 25 | 26 | export default handler; -------------------------------------------------------------------------------- /plugins/owner-block-unblock.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { text, conn, usedPrefix, command }) => { 2 | let why = `esempio: \n${usedPrefix + command} @${m.sender.split("@")[0]}` 3 | let who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : text ? text.replace(/[^0-9]/g, '') + '@s.whatsapp.net' : false 4 | if (!who) conn.reply(m.chat, why, m, { mentions: [m.sender] }) 5 | let res = []; 6 | switch (command) { 7 | case "blok": case "block": 8 | if (who) await conn.updateBlockStatus(who, "block").then(() => { res.push(who); }) 9 | else conn.reply(m.chat, why, m, { mentions: [m.sender] }) 10 | break 11 | case "unblok": case "unblock": 12 | if (who) await conn.updateBlockStatus(who, "unblock").then(() => { res.push(who); }) 13 | else conn.reply(m.chat, why, m, { mentions: [m.sender] }) 14 | break 15 | } 16 | if (res[0]) conn.reply(m.chat, `ok`, m, { mentions: res })} 17 | handler.command = /^(block|unblock)$/i 18 | handler.rowner = true 19 | export default handler 20 | -------------------------------------------------------------------------------- /plugins/gp-topbestemmie.js: -------------------------------------------------------------------------------- 1 | //Plugin creato da Gab333 - Velocizzato 2 | let handler = async (m, { conn }) => { 3 | if (!m.isGroup) return 4 | 5 | let participants = (await conn.groupMetadata(m.chat)).participants 6 | let groupUsers = participants 7 | .map(p => ({ id: p.id, bestemmie: global.db.data.users[p.id]?.blasphemy || 0 })) 8 | .filter(u => u.bestemmie > 0) 9 | .sort((a, b) => b.bestemmie - a.bestemmie) 10 | .slice(0, 10) 11 | 12 | let text = groupUsers.length ? 13 | `🏆 Top 10 Bestemmiatori del Gruppo 🏆\n\n` + 14 | groupUsers.map((user, i) => `${i + 1}. @${user.id.split('@')[0]} - ${user.bestemmie} bestemmie`).join('\n') : 15 | "😇 Nessuno ha bestemmiato in questo gruppo!" 16 | 17 | conn.sendMessage(m.chat, { text, mentions: groupUsers.map(u => u.id) }, { quoted: m }) 18 | } 19 | 20 | handler.command = ['topbestemmie', 'bestemmietop'] 21 | handler.group = true 22 | export default handler 23 | -------------------------------------------------------------------------------- /plugins/gp-retrocedi.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn,usedPrefix, text }) => { 2 | if(isNaN(text) && !text.match(/@/g)){ 3 | 4 | }else if(isNaN(text)) { 5 | var number = text.split`@`[1] 6 | }else if(!isNaN(text)) { 7 | var number = text 8 | } 9 | 10 | if(!text && !m.quoted) return 11 | if(number.length > 13 || (number.length < 11 && number.length > 0)) return 12 | 13 | try { 14 | if(text) { 15 | var user = number + '@s.whatsapp.net' 16 | } else if(m.quoted.sender) { 17 | var user = m.quoted.sender 18 | } else if(m.mentionedJid) { 19 | var user = number + '@s.whatsapp.net' 20 | } 21 | } catch (e) { 22 | } finally { 23 | conn.groupParticipantsUpdate(m.chat, [user], 'demote') 24 | }} 25 | handler.help = ['*593xxx*','*@usuario*','*responder chat*'].map(v => 'demote ' + v) 26 | handler.tags = ['group'] 27 | handler.command = /^(r|retrocedi|togliadmin|r)$/i 28 | handler.group = true 29 | handler.admin = true 30 | handler.botAdmin = true 31 | handler.fail = null 32 | export default handler 33 | -------------------------------------------------------------------------------- /plugins/fun-love.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, command, text }) => { 2 | let love = `︶︶ ⊹ ︶︶ ⊹ ︶︶︶ ୨♡୧ ︶︶︶ ⊹ ︶︶ ⊹ ︶︶\n𝐂𝐀𝐋𝐂𝐎𝐋𝐀𝐓𝐎𝐑𝐄 𝐃𝐈 𝐀𝐌𝐎𝐑𝐄 ❤️\nAffinità tra ${text} e te: ${Math.floor(Math.random() * 100)}%\n︶︶ ⊹ ︶︶ ⊹ ︶︶︶ ୨♡୧ ︶︶︶ ⊹ ︶︶ ⊹ ︶︶`.trim() 3 | 4 | // Get bot name from database or use default 5 | let nomeDelBot = global.db.data.nomedelbot || `𝐂𝐡𝐚𝐭𝐔𝐧𝐢𝐭𝐲` 6 | 7 | await conn.sendMessage(m.chat, { 8 | text: love, 9 | contextInfo: { 10 | mentionedJid: conn.parseMention(love), 11 | forwardingScore: 99, 12 | isForwarded: true, 13 | forwardedNewsletterMessageInfo: { 14 | newsletterJid: '120363259442839354@newsletter', 15 | serverMessageId: '', 16 | newsletterName: `${nomeDelBot}` 17 | } 18 | } 19 | }, { quoted: m }) 20 | } 21 | 22 | handler.help = ['love'] 23 | handler.tags = ['fun'] 24 | handler.command = /^(love|amore)$/i 25 | export default handler -------------------------------------------------------------------------------- /plugins/gp-listawarn.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, isOwner }) => { 2 | let adv = Object.entries(global.db.data.users).filter(user => user[1].warn) 3 | let warns = global.db.data.users.warn 4 | let user = global.db.data.users 5 | 6 | let mappedAdv = adv.length 7 | ? await Promise.all( 8 | adv.map(async ([jid, user], i) => ` 9 | │ 10 | │ *${i + 1}.* ${await conn.getName(jid) || 'Sconosciuto'} *(${user.warn}/3)* 11 | │ ${isOwner ? '@' + jid.split`@`[0] : jid} 12 | │ - - - - - - - - -`.trim()) 13 | ) 14 | : []; 15 | 16 | let caption = `⚠️ Utenti Avvertiti 17 | *╭•·–––––––––––––––––––·•* 18 | │ *Totale: ${adv.length} utenti*${mappedAdv.length ? '\n' + mappedAdv.join('\n') : ''} 19 | *╰•·–––––––––––––––––––·•*\n\n⚠️ Avvisi ⇢ ${warns ? `*${warns}/3*` : '*0/3*'}` 20 | await conn.reply(m.chat, caption, m, { mentions: await conn.parseMention(caption) }) 21 | } 22 | 23 | handler.help = ['listawarn'] 24 | handler.tags = ['gruppo'] 25 | handler.command = ['listawarn', 'listwarn'] 26 | 27 | export default handler -------------------------------------------------------------------------------- /plugins/info-sport.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | const user = m.sender; 3 | global.db.data.users[user] = global.db.data.users[user] || {}; 4 | 5 | const sports = [ 6 | { name: '⚽ Calcio', value: 'calcio' }, 7 | { name: '🏀 Basket', value: 'basket' }, 8 | { name: '🎾 Tennis', value: 'tennis' }, 9 | { name: '🏎️ Formula 1', value: 'formula1' }, 10 | { name: '🥊 MMA', value: 'mma' }, 11 | { name: '🚴‍♂️ Ciclismo', value: 'ciclismo' } 12 | ]; 13 | 14 | const buttons = sports.map(s => ({ 15 | buttonId: `.chooseSport ${s.value}`, 16 | buttonText: { displayText: s.name }, 17 | type: 1 18 | })); 19 | 20 | return await conn.sendMessage(m.chat, { 21 | text: `🏅 *Scegli il tuo sport preferito:*`, 22 | footer: '📌 Verrà salvato nel tuo profilo', 23 | buttons, 24 | headerType: 1 25 | }, { quoted: m }); 26 | }; 27 | 28 | handler.command = /^setsport$/i; 29 | handler.help = ['setsport']; 30 | handler.tags = ['settings']; 31 | 32 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-checkspam.js: -------------------------------------------------------------------------------- 1 | import fetch from "node-fetch"; 2 | 3 | let handler = async (m, { conn, args }) => { 4 | if (!args[0]) return m.reply("❌ *Inserisci un sito!*\n📌 _Esempio:_ *.checkscam www.sito.com*"); 5 | 6 | let sito = args[0].replace(/https?:\/\//, "").replace("www.", "").split("/")[0]; 7 | 8 | try { 9 | let response = await fetch(`https://transparencyreport.google.com/safe-browsing/search?url=${sito}`); 10 | let isScam = response.status !== 200; 11 | 12 | let msg = `🔍 *Dominio:* ${sito}\n${isScam ? "⚠️ *RISCHIO SCAM!* ❌" : "✅ *Sito Sicuro!*"}\n\n🔗 [Verifica su ScamAdviser](https://www.scamadviser.com/check-website/${sito})`; 13 | 14 | await conn.sendMessage(m.chat, { text: msg }, { quoted: m }); 15 | } catch (err) { 16 | m.reply("❌ *Errore! Riprova più tardi.*"); 17 | } 18 | }; 19 | 20 | handler.command = ["checkscam"]; 21 | handler.category = "security"; 22 | handler.desc = "Controlla se un sito è scam 🔍"; 23 | 24 | export default handler; -------------------------------------------------------------------------------- /plugins/styletext.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | import { JSDOM } from 'jsdom' 3 | let handler = async (m, { conn, text }) => { 4 | conn.reply(m.chat, Object.entries(await stylizeText(text ? text : m.quoted && m.quoted.text ? m.quoted.text : m.text)).map(([name, value]) => `*${name}*\n${value}`).join`\n\n`, m) 5 | } 6 | handler.help = ['style'].map(v => v + ' ') 7 | handler.tags = ['tools'] 8 | handler.command = /^(style(text)?)$/i 9 | handler.exp = 0 10 | export default handler 11 | 12 | async function stylizeText(text) { 13 | let res = await fetch('http://qaz.wtf/u/convert.cgi?text=' + encodeURIComponent(text)) 14 | let html = await res.text() 15 | let dom = new JSDOM(html) 16 | let table = dom.window.document.querySelector('table').children[0].children 17 | let obj = {} 18 | for (let tr of table) { 19 | let name = tr.querySelector('.aname').innerHTML 20 | let content = tr.children[1].textContent.replace(/^\n/, '').replace(/\n$/, '') 21 | obj[name + (obj[name] ? ' Reversed' : '')] = content 22 | } 23 | return obj 24 | } 25 | -------------------------------------------------------------------------------- /plugins/antiprivato.js: -------------------------------------------------------------------------------- 1 | // Crediti by Gabs & AntiPrivato Aggiornato 2 | 3 | export async function before(m, { conn, isAdmin, isBotAdmin, isOwner, isROwner }) { 4 | let message = ""; 5 | for (const [ownerNumber] of global.owner) { 6 | message += `\n> 📞+${ownerNumber}`; 7 | } 8 | if (m.isBaileys && m.fromMe) return true; 9 | if (m.isGroup) return false; 10 | if (!m.message) return true; 11 | let chat = global.db.data.chats[m.chat]; 12 | let bot = global.db.data.settings[this.user.jid] || {}; 13 | if (bot.antiPrivate && !isOwner && !isROwner) { 14 | await conn.sendMessage(m.chat, { 15 | text: `ೋೋ══ • ══ೋೋ 16 | 𝐍𝐨𝐧 𝐡𝐚𝐢 𝐢𝐥 𝐩𝐞𝐫𝐦𝐞𝐬𝐬𝐨 𝐝𝐢 𝐢𝐧𝐯𝐢𝐚𝐫𝐞 𝐦𝐞𝐬𝐬𝐚𝐠𝐠𝐢 𝐚𝐥𝐥𝐚 𝐜𝐡𝐚𝐭 𝐩𝐫𝐢𝐯𝐚𝐭𝐚 𝐝𝐞𝐥 𝐛𝐨𝐭. 17 | 18 | > 𝐏𝐞𝐫 𝐮𝐥𝐭𝐞𝐫𝐢𝐨𝐫𝐢 𝐢𝐧𝐟𝐨𝐫𝐦𝐚𝐳𝐢𝐨𝐧𝐢 𝐨 𝐬𝐮𝐩𝐩𝐨𝐫𝐭𝐨, 𝐩𝐮𝐨𝐢 𝐜𝐨𝐧𝐭𝐚𝐭𝐭𝐚𝐫𝐞 𝐢 𝐜𝐫𝐞𝐚𝐭𝐨𝐫𝐢 𝐭𝐫𝐚𝐦𝐢𝐭𝐞 𝐥𝐞 𝐬𝐞𝐠𝐮𝐞𝐧𝐭𝐢 𝐫𝐞𝐟𝐞𝐫𝐞𝐧𝐳𝐞 𝐪𝐮𝐢 𝐬𝐨𝐭𝐭𝐨: 19 | ${message} 20 | ` 21 | }); 22 | return false; 23 | } 24 | return true; 25 | } -------------------------------------------------------------------------------- /plugins/Info-social.js: -------------------------------------------------------------------------------- 1 | import { performance } from 'perf_hooks'; 2 | import fetch from 'node-fetch'; 3 | import path from 'path'; 4 | import { fileURLToPath } from 'url'; 5 | import fs from 'fs'; 6 | 7 | const __filename = fileURLToPath(import.meta.url); 8 | const __dirname = path.dirname(__filename); 9 | 10 | const handler = async (message, { conn, usedPrefix, command }) => { 11 | const socialText = `*📱 SOCIAL CHATUNITY*\n\n` 12 | + `🌍 *Instagram:*\n` 13 | + `https://instagram.com/chatunity_\n\n` 14 | + `📢 *TikTok:*\n` 15 | + `https://www.tiktok.com/@chatunitycenter\n\n` 16 | + `💬 *GitHub:*\n` 17 | + `https://github.com/chatunitycenter\n\n` 18 | 19 | await conn.sendMessage( 20 | message.chat, 21 | { text: socialText }, 22 | { quoted: message } 23 | ); 24 | }; 25 | 26 | handler.help = ['social']; 27 | handler.tags = ['info']; 28 | handler.command = /^(social|socials)$/i; 29 | 30 | export default handler; 31 | -------------------------------------------------------------------------------- /plugins/info-news.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const newsCommand = async (m, { conn }) => { 4 | try { 5 | const apiKey = 'dcd720a6f1914e2d9dba9790c188c08c'; // Sostituisci con la tua API Key di NewsAPI 6 | const response = await axios.get(`https://newsapi.org/v2/top-headlines?country=us&apiKey=${apiKey}`); 7 | const articles = response.data.articles.slice(0, 5); // Prendi i primi 5 articoli 8 | 9 | let newsMessage = '📰 *Ultime Notizie*:\n\n'; 10 | articles.forEach((article, index) => { 11 | newsMessage += `${index + 1}. *${article.title}*\n${article.description || ''}\n\n`; 12 | }); 13 | 14 | await conn.sendMessage(m.chat, { text: newsMessage }); 15 | } catch (error) { 16 | console.error('Errore nel recupero delle notizie:', error); 17 | await conn.sendMessage(m.chat, { text: 'Spiacente, non sono riuscito a recuperare le notizie in questo momento.' }); 18 | } 19 | }; 20 | 21 | newsCommand.help = ['news']; 22 | newsCommand.tags = ['info', 'news']; 23 | newsCommand.command = /^news$/i; 24 | 25 | export default newsCommand; 26 | -------------------------------------------------------------------------------- /plugins/tools-gitclone.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch' 2 | 3 | const regex = /(?:https|git)(?::\/\/|@)github\.com[\/:]([^\/:]+)\/(.+)/i 4 | var handler = async (m, { args, usedPrefix, command }) => { 5 | 6 | if (!args[0]) return conn.reply(m.chat, `> ⓘ 𝐔𝐬𝐨 𝐝𝐞𝐥 𝐜𝐨𝐦𝐚𝐧𝐝𝐨:\n> ${usedPrefix + command} https://github.com/chatunitycenter/chatunity-bot`, m, ) 7 | if (!regex.test(args[0])) conn.reply(m.chat, `> ⚠️ 𝐈𝐧𝐯𝐢𝐚 𝐮𝐧 𝐥𝐢𝐧𝐤 𝐯𝐚𝐥𝐢𝐝𝐨, 𝐮𝐬𝐨 𝐝𝐞𝐥 𝐜𝐨𝐦𝐚𝐧𝐝𝐨:\n> ${usedPrefix + command} https://github.com/chatunitycenter/chatunity-bot`, m, ) 8 | 9 | let [_, user, repo] = args[0].match(regex) || [] 10 | repo = repo.replace(/.git$/, '') 11 | let url = `https://api.github.com/repos/${user}/${repo}/zipball` 12 | let filename = (await fetch(url, { method: 'HEAD' })).headers.get('content-disposition').match(/attachment; filename=(.*)/)[1] 13 | conn.reply(m.chat, `ⓘ 𝐂𝐚𝐫𝐢𝐜𝐚𝐦𝐞𝐧𝐭𝐨 ...`, m, ) 14 | conn.sendFile(m.chat, url, filename, null, m) 15 | 16 | } 17 | handler.command = /gitclone|github|clonarrepo|repoclonar/i 18 | 19 | 20 | export default handler -------------------------------------------------------------------------------- /plugins/OWNER_server.js: -------------------------------------------------------------------------------- 1 | import { exec } from 'child_process'; 2 | 3 | let handler = async (m, { text, conn, usedPrefix, command }) => { 4 | let cmd = text.trim(); 5 | if (!cmd) { 6 | return m.reply("⚠️ Devi specificare il comando da eseguire. Es: `.server ls -la`"); 7 | } 8 | 9 | await m.reply(`🔄 Eseguendo comando: "${cmd}"`); 10 | 11 | exec(cmd, { timeout: 30000 }, (error, stdout, stderr) => { 12 | if (error) { 13 | console.error(`Errore: ${error.message}`); 14 | return m.reply(`❌ Errore durante l'esecuzione: ${error.message}`); 15 | } 16 | 17 | let output = ''; 18 | if (stdout) output += `📤 Output:\n${stdout}`; 19 | if (stderr) output += `⚠️ Errori/Avvisi:\n${stderr}`; 20 | 21 | if (!output) output = "✅ Comando eseguito senza output"; 22 | 23 | if (output.length > 4000) { 24 | output = output.substring(0, 4000) + "\n... (output troncato)"; 25 | } 26 | 27 | m.reply(output); 28 | }); 29 | }; 30 | 31 | handler.command = /^(server|cmd|exec)$/i; 32 | handler.owner = true; 33 | export default handler; -------------------------------------------------------------------------------- /plugins/info-anni.js: -------------------------------------------------------------------------------- 1 | const setetaHandler = async (m, { conn, command, text }) => { 2 | const who = m.sender; // L'utente che invia il comando 3 | 4 | if (command === 'setanni') { 5 | // Controllo input valido 6 | const eta = parseInt(text); 7 | if (!eta || isNaN(eta) || eta < 10 || eta > 80) { 8 | return conn.reply(m.chat, `𝐔𝐭𝐢𝐥𝐢𝐳𝐳𝐚 .𝐬𝐞𝐭𝐚𝐧𝐧𝐢 𝐨 .𝐞𝐥𝐢𝐦𝐢𝐧𝐚𝐚𝐧𝐧𝐢\n> 𝐈𝐧𝐬𝐞𝐫𝐢𝐬𝐜𝐢 𝐮𝐧'𝐞𝐭𝐚̀ 𝐯𝐚𝐥𝐢𝐝𝐚.\n> 𝐋'𝐞𝐭𝐚̀ 𝐯𝐚𝐥𝐢𝐝𝐚 𝐞̀ 𝐝𝐚 10 𝐚 80 𝐚𝐧𝐧𝐢.`, m); 9 | } 10 | 11 | // Salvataggio nel database 12 | global.db.data.users[who].eta = eta; 13 | 14 | // Messaggio di conferma 15 | conn.reply(m.chat, `✓ 𝐄𝐭𝐚̀ 𝐢𝐦𝐩𝐨𝐬𝐭𝐚𝐭𝐚 𝐜𝐨𝐦𝐞: ${eta} 𝐚𝐧𝐧𝐢.`, m); 16 | } 17 | 18 | if (command === 'eliminaanni') { 19 | // Rimuove l'età 20 | delete global.db.data.users[who].eta; 21 | 22 | // Messaggio di conferma 23 | conn.reply(m.chat, `✓ 𝐄𝐭𝐚̀ 𝐫𝐢𝐦𝐨𝐬𝐬𝐚.`, m); 24 | } 25 | }; 26 | 27 | // Aggiunta comandi 28 | setetaHandler.command = /^(setanni|eliminaanni)$/i; 29 | export default setetaHandler; -------------------------------------------------------------------------------- /plugins/gp-regole.js: -------------------------------------------------------------------------------- 1 | let handler = async function (m, { conn, text, usedPrefix }) { 2 | let chat = global.db.data.chats[m.chat]; 3 | if (!chat.rules || chat.rules === '') { 4 | throw `ⓘ 𝐆𝐥𝐢 𝐚𝐝𝐦𝐢𝐧 𝐝𝐞𝐥 𝐠𝐫𝐮𝐩𝐩𝐨 𝐚𝐭𝐭𝐮𝐚𝐥𝐦𝐞𝐧𝐭𝐞 𝐧𝐨𝐧 𝐡𝐚𝐧𝐧𝐨 𝐬𝐞𝐭𝐭𝐚𝐭𝐨 𝐧𝐞𝐬𝐬𝐮𝐧𝐚 𝐫𝐞𝐠𝐨𝐥𝐚.\n\n📌 𝐏𝐞𝐫 𝐢𝐦𝐩𝐨𝐬𝐭𝐚𝐫𝐞 𝐥𝐞 𝐫𝐞𝐠𝐨𝐥𝐞, 𝐮𝐬𝐚 *${usedPrefix}setregole* seguito dal testo delle regole.`; 5 | } 6 | 7 | await conn.sendMessage(m.chat, { 8 | text: `📜 *𝐑𝐞𝐠𝐨𝐥𝐞 𝐝𝐞𝐥 𝐆𝐫𝐮𝐩𝐩𝐨*\n\n${chat.rules}`, 9 | contextInfo: { 10 | forwardingScore: 99, 11 | isForwarded: true, 12 | forwardedNewsletterMessageInfo: { 13 | newsletterJid: '120363259442839354@newsletter', 14 | serverMessageId: '', 15 | newsletterName: 'ChatUnity' 16 | } 17 | } 18 | }, { quoted: m }); 19 | }; 20 | 21 | handler.help = ['rules']; 22 | handler.tags = ['group']; 23 | handler.command = ['rules', 'regole']; 24 | handler.admin = true; 25 | export default handler; -------------------------------------------------------------------------------- /plugins/fun-figa.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, command, text }) => { 2 | let width = Math.floor(Math.random() * 31); 3 | let finalPhrase = width >= 8 4 | ? "🔥 Complimenti, siamo su livelli impressionanti!" 5 | : "😅 Un risultato discreto, c'è sempre margine di miglioramento!"; 6 | 7 | let message = ` 8 | ━━━━━━━━━━━━━━━━ 9 | 📏 CALCOLATORE DI APERTURA 📏 10 | ━━━━━━━━━━━━━━━━ 11 | 🔍 ${text} ha un'apertura stimata di: 12 | 👉 ${width} cm! 13 | ━━━━━━━━━━━━━━━━ 14 | ${finalPhrase} 15 | `.trim(); 16 | 17 | const messageOptions = { 18 | contextInfo: { 19 | forwardingScore: 0, 20 | isForwarded: true, 21 | forwardedNewsletterMessageInfo: { 22 | newsletterJid: '120363259442839354@newsletter', 23 | serverMessageId: '', 24 | newsletterName: `${conn.user.name}` 25 | } 26 | } 27 | }; 28 | 29 | // Inoltra il messaggio generato senza rispondere al comando 30 | await conn.sendMessage(m.chat, { text: message, ...messageOptions }); 31 | }; 32 | 33 | handler.command = /^(figa)$/i; 34 | 35 | export default handler; -------------------------------------------------------------------------------- /plugins/fun-bonk.js: -------------------------------------------------------------------------------- 1 | import jimp from 'jimp'; 2 | 3 | let handler = async (m, { conn, text }) => { 4 | try { 5 | let who = m.mentionedJid?.[0] || m.quoted?.sender || m.sender; 6 | let avatarUrl = await conn.profilePictureUrl(who, 'image').catch(() => null); 7 | 8 | // Verifica se l'utente ha una foto profilo 9 | if (!avatarUrl) { 10 | return conn.reply(m.chat, '⚠️ Questo comando non funziona per utenti senza foto profilo.', m); 11 | } 12 | 13 | let img = await jimp.read('https://i.imgur.com/nav6WWX.png'); 14 | let avatar = await jimp.read(avatarUrl); 15 | 16 | let bonk = await img.composite(avatar.resize(128, 128), 120, 90, { 17 | mode: 'dstOver', 18 | opacitySource: 1, 19 | opacityDest: 1 20 | }).getBufferAsync('image/png'); 21 | 22 | conn.sendMessage(m.chat, { image: bonk }, { quoted: m }); 23 | 24 | } catch (error) { 25 | console.error(error); 26 | conn.reply(m.chat, '❌ Si è verificato un errore durante l\'esecuzione del comando.', m); 27 | } 28 | }; 29 | 30 | handler.command = /^(bonk)$/i; 31 | 32 | export default handler; -------------------------------------------------------------------------------- /plugins/antiviewonce.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | import { downloadContentFromMessage } from "@chatunity/baileys" 4 | 5 | export async function before(m, { isAdmin, isBotAdmin }) { 6 | let chat = db.data.chats[m.chat] 7 | if (!chat.antiver || chat.isBanned) return 8 | if (m.mtype == 'viewOnceMessageV2' || m.mtype.hasOwnProperty("viewOnce")) { 9 | let msg = m.message.viewOnceMessageV2.message 10 | let type = Object.keys(msg)[0] 11 | let media = await downloadContentFromMessage(msg[type], type == 'imageMessage' ? 'image' : 'video') 12 | let buffer = Buffer.from([]) 13 | for await (const chunk of media) { 14 | buffer = Buffer.concat([buffer, chunk])} 15 | if (/video/.test(type)) { 16 | return this.sendFile(m.chat, buffer, 'error.mp4', `${msg[type].caption}` + lenguajeGB.smsAntiView1(), m) 17 | } else if (/image/.test(type)) { 18 | return this.sendFile(m.chat, buffer, 'error.jpg', `${msg[type].caption}` + lenguajeGB.smsAntiView2(), m) 19 | }}} 20 | 21 | function formatFileSize(bytes) { 22 | const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'TY', 'EY'] 23 | const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))) 24 | return Math.round(100 * (bytes / Math.pow(1024, i))) / 100 + ' ' + sizes[i] 25 | } -------------------------------------------------------------------------------- /plugins/fun-drogato.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, command, text }) => { 2 | 3 | let width = Math.floor(Math.random() * 101); 4 | 5 | let finalPhrase = width >= 70 6 | ? "🌿 Attenti che si pippa pure la farina" 7 | : width >= 30 8 | ? "🌿 Non sa pippare, aumenta le dosi!!" 9 | : "🌿 Un'esempio da seguire, complimenti."; 10 | 11 | 12 | let message = ` 13 | 『💬』 ══ •⊰✰⊱• ══ 『💬』 14 | 15 | MOMENTO DEL DRUG TEST! 🌿 16 | ━━━━━━━━━━━━━━ 17 | ${text ? text : 'Tu'} ha un tasso alcolemico del ${width}%! 🌿 18 | 『💬』 ══ •⊰✰⊱• ══ 『💬』 19 | 20 | ${finalPhrase} 21 | `.trim(); 22 | 23 | const messageOptions = { 24 | contextInfo: { 25 | forwardingScore: 1, 26 | isForwarded: true, 27 | forwardedNewsletterMessageInfo: { 28 | newsletterJid: '120363259442839354@newsletter', 29 | serverMessageId: '', 30 | newsletterName: `ChatUnity` 31 | }, 32 | } 33 | }; 34 | 35 | m.reply(message, null, { mentions: conn.parseMention(message), ...messageOptions }); 36 | }; 37 | 38 | handler.command = /^(drogato)$/i; 39 | 40 | export default handler; -------------------------------------------------------------------------------- /plugins/makerlogotxt.js: -------------------------------------------------------------------------------- 1 | 2 | let war = global.maxwarn 3 | let handler = async (m, { conn, text, args, groupMetadata, usedPrefix, command }) => { 4 | let who 5 | if (m.isGroup) who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : false 6 | else who = m.chat 7 | if (!who) return 8 | if (!(who in global.db.data.users)) return 9 | let name = conn.getName(m.sender) 10 | let warn = global.db.data.users[who].warn 11 | if (warn < war) { 12 | global.db.data.users[who].warn += 1 13 | } else if (warn == war) { 14 | global.db.data.users[who].warn = 0 15 | m.reply(`⛔ 𝐨𝐫𝐚 𝐡𝐚𝐢 𝐫𝐨𝐭𝐭𝐨 𝐢𝐥 𝐜𝐚𝐳𝐳𝐨`) 16 | await time(1000) 17 | await conn.groupParticipantsUpdate(m.chat, [who], 'remove') 18 | } 19 | } 20 | handler.help = ['warn @user'] 21 | handler.tags = ['group'] 22 | handler.command = ['warn'] 23 | handler.group = true 24 | handler.admin = true 25 | handler.botAdmin = true 26 | 27 | export default handler 28 | 29 | const time = async (ms) => { 30 | return new Promise(resolve => setTimeout(resolve, ms)); 31 | } -------------------------------------------------------------------------------- /plugins/gp-clearplay.js: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | import path from "path"; 3 | 4 | const PLAY_FOLDER = "./play"; // 📂 Cartella MP3 5 | 6 | let handler = async (m, { conn, isAdmin, isOwner }) => { 7 | if (!isAdmin && !isOwner) { 8 | return conn.sendMessage(m.chat, { text: "❌ *Solo gli admin possono usare questo comando!*" }, { quoted: m }); 9 | } 10 | 11 | if (!fs.existsSync(PLAY_FOLDER)) { 12 | return conn.sendMessage(m.chat, { text: "✅ *La cartella è già vuota!*" }, { quoted: m }); 13 | } 14 | 15 | let files = fs.readdirSync(PLAY_FOLDER); 16 | if (files.length === 0) { 17 | return conn.sendMessage(m.chat, { text: "✅ *Nessun file da eliminare!*" }, { quoted: m }); 18 | } 19 | 20 | // 🗑️ Elimina tutti i file MP3 21 | for (let file of files) { 22 | let filePath = path.join(PLAY_FOLDER, file); 23 | fs.unlinkSync(filePath); 24 | } 25 | 26 | await conn.sendMessage(m.chat, { 27 | text: "🗑️ *Cartella Play svuotata con successo!*", 28 | react: { text: "✅", key: m.key } 29 | }, { quoted: m }); 30 | }; 31 | 32 | handler.command = /^(clearplay)$/i; 33 | handler.group = true; 34 | handler.admin = true; 35 | 36 | export default handler; -------------------------------------------------------------------------------- /plugins/jadibot-deletesession.js: -------------------------------------------------------------------------------- 1 | import { readdirSync, statSync, unlinkSync, existsSync, readFileSync, watch, rmSync, promises as fs} from "fs" 2 | import path, { join } from 'path' 3 | 4 | let handler = async (m, { conn: parentw, usedPrefix, command}, args) => { 5 | 6 | let who = m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender 7 | let uniqid = `${who.split`@`[0]}` 8 | let userS = `${conn.getName(who)}` 9 | 10 | try { 11 | await fs.rmdir(`./jadibts/` + uniqid, { recursive: true, force: true }) 12 | await parentw.sendMessage(m.chat, { text: 'ⓘ 𝐒𝐞𝐬𝐬𝐢𝐨𝐧𝐞 𝐒𝐮𝐛𝐁𝐨𝐭 𝐞𝐥𝐢𝐦𝐢𝐧𝐚𝐭𝐚 𝐜𝐨𝐧 𝐬𝐮𝐜𝐜𝐞𝐬𝐬𝐨.' }, { quoted: m }) 13 | } catch(err) { 14 | if (err.code === 'ENOENT' && err.path === `./jadibts/${uniqid}`) { 15 | await parentw.sendMessage(m.chat, { text: "ⓘ 𝐍𝐨𝐧 𝐡𝐚𝐢 𝐬𝐞𝐬𝐬𝐢𝐨𝐧𝐢 𝐒𝐮𝐛𝐁𝐨𝐭 𝐜𝐨𝐥𝐥𝐞𝐠𝐚𝐭𝐞." }, { quoted: m }) 16 | } else { 17 | await m.reply('ⓘ 𝐒𝐢 𝐞̀ 𝐯𝐞𝐫𝐢𝐟𝐢𝐜𝐚𝐭𝐨 𝐮𝐧 𝐞𝐫𝐫𝐨𝐫𝐞') 18 | }}} 19 | handler.command = ['deletebot', 'delsession', 'delessione', 'delsessión', 'delsesion', 'delsesión', 'deletesession', 'deletesesion', 'deletesesión', 'deletesessión', 'eliminarsession'] 20 | handler.private = true 21 | 22 | export default handler -------------------------------------------------------------------------------- /plugins/gp-setdescrizione.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { conn, args }) => { 2 | try { 3 | 4 | const pp = await conn.profilePictureUrl(m.chat, 'image').catch(() => './media/chatunitybot.mp4'); 5 | 6 | // Unisci gli argomenti per creare la descrizione 7 | const description = args.join(' ').trim(); 8 | 9 | if (!description) { 10 | return conn.reply(m.chat, 'Per favore, inserisci una descrizione valida.', m); 11 | } 12 | 13 | // Aggiorna la descrizione del gruppo 14 | await conn.groupUpdateDescription(m.chat, description); 15 | 16 | // Invia conferma 17 | await conn.reply(m.chat, '✅ *Descrizione del gruppo aggiornata con successo!*', m); 18 | 19 | } catch (error) { 20 | console.error('Errore nel cambiare la descrizione:', error); 21 | conn.reply(m.chat, '❌ *Si è verificato un errore durante l\'aggiornamento della descrizione.*', m); 22 | } 23 | } 24 | 25 | handler.help = ['setdesc ']; 26 | handler.tags = ['group']; 27 | handler.command = /^setdesk|setdesc(rizione)?|descrip(ción|cion)$/i; 28 | handler.group = true; 29 | handler.admin = true; 30 | handler.botAdmin = true; 31 | 32 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-elimina.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, usedPrefix, command }) => { 2 | 3 | if (!m.quoted) return 4 | 5 | try { 6 | let key = {} 7 | 8 | try { 9 | key.remoteJid = m.quoted ? m.quoted.fakeObj.key.remoteJid : m.key.remoteJid 10 | key.fromMe = m.quoted ? m.quoted.fakeObj.key.fromMe : m.key.fromMe 11 | key.id = m.quoted ? m.quoted.fakeObj.key.id : m.key.id 12 | key.participant = m.quoted ? m.quoted.fakeObj.participant : m.key.participant 13 | } catch (e) { 14 | console.error(e) 15 | } 16 | 17 | // Elimina il messaggio citato 18 | await conn.sendMessage(m.chat, { delete: key }) 19 | 20 | // Elimina il messaggio del comando `.del` 21 | await conn.sendMessage(m.chat, { delete: m.key }) 22 | 23 | } catch { 24 | // Elimina il messaggio citato in caso di errore 25 | await conn.sendMessage(m.chat, { delete: m.quoted.vM.key }) 26 | 27 | // Elimina il messaggio del comando `.del` in caso di errore 28 | await conn.sendMessage(m.chat, { delete: m.key }) 29 | } 30 | } 31 | 32 | handler.help = ['delete'] 33 | handler.tags = ['group'] 34 | handler.command = /^del(ete)?$/i 35 | handler.group = false 36 | handler.admin = true 37 | handler.botAdmin = true 38 | 39 | export default handler 40 | -------------------------------------------------------------------------------- /plugins/gp-Zizzania.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { 2 | conn, groupMetadata 3 | }) => { 4 | if (!m.isGroup) 5 | throw '' 6 | let gruppi = global.db.data.chats[m.chat] 7 | if (gruppi.spacobot === false) 8 | throw '' 9 | let toM = a => '@' + a.split('@')[0] 10 | let ps = groupMetadata.participants.map(v => v.id) 11 | let a = ps.getRandom() 12 | let b 13 | do b = ps.getRandom() 14 | while (b === a) 15 | conn.reply(m.chat, `${toM(a)} ${pickRandom(['vorrebbe leccare i capezzoli di','adora annussare le scoreggie di','vorrebbe disperatamente ballare nudx con','sta notte ha sognato di fare sesso con','fa sesso di nascosto con il cane di','è follemente innamorato della nonna di','ha messo incinta la madre di','passa la notte ad osservare dormire','durante le lezioni scolastiche ha fantasie sessuali su','è la crush di','è la puttana personale di','succhia di nascosto il cazzo di','lecca di notte le orecchie di','piace masturbarsi sulle foto di','ha scopato 9 mesi prima che nascesse con la madre di'])} ${toM(b)}`, null, { 16 | mentions: [a, b] 17 | })} 18 | handler.customPrefix = /^\.zizzania$/i 19 | handler.command = new RegExp 20 | export default handler 21 | function pickRandom(list) { 22 | return list[Math.floor(Math.random() * list.length)] 23 | } -------------------------------------------------------------------------------- /plugins/fun-culo.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, usedPrefix }) => { 2 | let grandezze = [ 3 | "🟢 Piccolo come una formica 🐜", 4 | "🔵 Normale, niente di speciale 😌", 5 | "🟠 Medio, ci passa un dito 🖕", 6 | "🔴 Enorme! Ci passa una bottiglia 🍾", 7 | "⚫ Distrutto, sembra un tunnel ferroviario 🚇", 8 | "💥 Non hai più un buco, è esploso 💣" 9 | ]; 10 | 11 | let grandezzaCasuale = grandezze[Math.floor(Math.random() * grandezze.length)]; 12 | let messaggio = "*Analizzando il tuo buco...*\n\n📏 *Risultato:* " + grandezzaCasuale; 13 | 14 | let opzioniInoltro = inoltra("ChatUnity"); 15 | await conn.sendMessage(m.chat, { text: messaggio, ...opzioniInoltro }, { quoted: m }); 16 | }; 17 | 18 | const inoltra = (nomeDelBot) => { 19 | let messageOptions = { 20 | contextInfo: { 21 | forwardingScore: 999, 22 | isForwarded: true, 23 | forwardedNewsletterMessageInfo: { 24 | newsletterJid: '120363259442839354@newsletter', 25 | serverMessageId: '', 26 | newsletterName: `${nomeDelBot}` 27 | } 28 | } 29 | }; 30 | return messageOptions; 31 | }; 32 | 33 | handler.command = ["ano", "culometro"]; 34 | export default handler; -------------------------------------------------------------------------------- /plugins/tools-wiki.js: -------------------------------------------------------------------------------- 1 | import axios from "axios" 2 | import fetch from "node-fetch" 3 | import cheerio from "cheerio" 4 | async function wikipedia(querry) { 5 | try { 6 | const link = await axios.get(`https://it.wikipedia.org/wiki/${querry}`) 7 | const $ = cheerio.load(link.data) 8 | let judul = $('#firstHeading').text().trim() 9 | let thumb = $('#mw-content-text').find('div.mw-parser-output > div:nth-child(1) > table > tbody > tr:nth-child(2) > td > a > img').attr('src') || `//i.ibb.co/nzqPBpC/http-error-404-not-found.png` 10 | let isi = [] 11 | $('#mw-content-text > div.mw-parser-output').each(function (rayy, Ra) { 12 | let penjelasan = $(Ra).find('p').text().trim() 13 | isi.push(penjelasan)}) 14 | for (let i of isi) { 15 | const data = { 16 | status: link.status, 17 | result: { 18 | judul: judul, 19 | thumb: 'https:' + thumb, 20 | isi: i}} 21 | return data} 22 | } catch (err) { 23 | var notFond = { 24 | status: link.status, 25 | Pesan: eror} 26 | return notFond}} 27 | let handler = async (m, { conn, text, usedPrefix, command }) => { 28 | if (!text) return 29 | wikipedia(`${text}`).then(res => { 30 | m.reply(res.result.isi) 31 | }).catch(() => { return })} 32 | handler.help = ['wikipedia'].map(v => v + ' ') 33 | handler.tags = [ 'internet'] 34 | handler.command = /^(wiki|wikipedia)$/i 35 | export default handler -------------------------------------------------------------------------------- /plugins/Choosesport.js: -------------------------------------------------------------------------------- 1 | // Fix: Crea il file rss_sources.json se non esiste (workaround per errori di altri moduli che lo richiedono) 2 | import fs from 'fs' 3 | const rssPath = './rss_sources.json' 4 | if (!fs.existsSync(rssPath)) { 5 | fs.writeFileSync(rssPath, JSON.stringify([])) 6 | } 7 | 8 | let handler = async (m, { conn }) => { 9 | global.db.data.users[m.sender] = global.db.data.users[m.sender] || {}; 10 | 11 | const sports = [ 12 | { name: '⚽ Calcio', id: 'calcio' }, 13 | { name: '🏀 Basket', id: 'basket' }, 14 | { name: '🎾 Tennis', id: 'tennis' }, 15 | { name: '🏎️ Formula 1', id: 'formula1' }, 16 | { name: '🥊 MMA', id: 'mma' }, 17 | { name: '🚴‍♂️ Ciclismo', id: 'ciclismo' } 18 | ]; 19 | 20 | const buttons = sports.map(sport => ({ 21 | buttonId: `.sportselect ${sport.id}`, 22 | buttonText: { displayText: sport.name }, 23 | type: 1 24 | })); 25 | 26 | return await conn.sendMessage(m.chat, { 27 | text: '📌 *Scegli lo sport che vuoi seguire per ricevere le notizie personalizzate:*', 28 | footer: '💡 Puoi cambiarlo in qualsiasi momento', 29 | buttons, 30 | headerType: 1 31 | }, { quoted: m }); 32 | }; 33 | 34 | handler.command = /^chooseSport$/i; 35 | handler.help = ['chooseSport']; 36 | handler.tags = ['settings']; 37 | export default handler; -------------------------------------------------------------------------------- /plugins/OWNER_join.js: -------------------------------------------------------------------------------- 1 | let linkRegex = /chat.whatsapp.com\/([0-9A-Za-z]{20,24})( [0-9]{1,3}|inf)?/i; 2 | 3 | let handler = async (m, { conn, text, isOwner, usedPrefix, command }) => { 4 | if (!text) return m.reply(`令 Inserisci il link del gruppo.\n> *Esempio:* ${usedPrefix + command} .`); 5 | let [_, code, expired] = text.match(linkRegex) || []; 6 | if (!code) return m.reply('令 Link non valido.'); 7 | 8 | let res = await conn.groupAcceptInvite(code); 9 | 10 | if (expired === 'inf') { 11 | m.reply(`令 Mi sono unito correttamente al gruppo senza una data di scadenza.`); 12 | } else { 13 | expired = Math.floor(Math.min(999, Math.max(1, isOwner ? isNumber(expired) ? parseInt(expired) : 0 : 3))); 14 | m.reply(`令 Mi sono unito correttamente al gruppo per *${expired}* giorni.`); 15 | let chats = global.db.data.chats[res]; 16 | if (!chats) chats = global.db.data.chats[res] = {}; 17 | if (expired) chats.expired = +new Date() + expired * 1000 * 60 * 60 * 24; 18 | } 19 | }; 20 | 21 | handler.help = ['join * *']; 22 | handler.tags = ['creatore']; 23 | 24 | handler.command = ['join']; 25 | handler.owner = true; 26 | 27 | export default handler; 28 | 29 | const isNumber = (x) => (x = parseInt(x), typeof x === 'number' && !isNaN(x)); 30 | -------------------------------------------------------------------------------- /plugins/rpg-banca.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, usedPrefix }) => { 2 | let who = m.mentionedJid[0] || m.quoted?.sender || m.sender; 3 | 4 | if (!(who in global.db.data.users)) { 5 | return m.reply(`*L'utente non è presente nel database.*`); 6 | } 7 | 8 | let user = global.db.data.users[who]; 9 | 10 | // Inizializzazione sicura 11 | user.bank = Number(user.bank) || 0; 12 | 13 | let message = `${who === m.sender 14 | ? `💰 𝐡𝐚𝐢 *${user.bank} 💶 𝐮𝐧𝐢𝐭𝐲𝐜𝐨𝐢𝐧* 𝐢𝐧 𝐛𝐚𝐧𝐜𝐚🏛️.` 15 | : `💰 𝐢𝐥 𝐛𝐫𝐨 @${who.split('@')[0]} 𝐚 16 | 𝐡𝐚 *${user.bank} 💶 𝐮𝐧𝐢𝐭𝐲𝐜𝐨𝐢𝐧* 𝐢𝐧 𝐛𝐚𝐧𝐜𝐚🏛️.`}`; 17 | 18 | // Invia l'immagine cubank.jpg 19 | await conn.sendMessage(m.chat, { 20 | image: { url: 'icone/cubank.jpg' }, 21 | caption: message, 22 | contextInfo: { 23 | forwardingScore: 99, 24 | isForwarded: true, 25 | forwardedNewsletterMessageInfo: { 26 | newsletterJid: '120363259442839354@newsletter', 27 | serverMessageId: '', 28 | newsletterName: 'ChatUnity' 29 | } 30 | } 31 | }, { quoted: m }); 32 | }; 33 | 34 | handler.help = ['bank']; 35 | handler.tags = ['rpg']; 36 | handler.command = ['bank', 'banca']; 37 | handler.register = true; 38 | export default handler; -------------------------------------------------------------------------------- /plugins/owner-saveplugin.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | let handler = async (m, { text, usedPrefix, command }) => { 3 | if (!text) throw `uhm.. che nome do al plugin?` 4 | if (!m.quoted.text) throw `Rispondi al msg!` 5 | 6 | let path = `plugins/${text}.js` 7 | await fs.writeFileSync(path, m.quoted.text) 8 | 9 | const thumbURL = 'https://telegra.ph/file/876cc3f192ec040e33aba.png' 10 | const thumbBuffer = Buffer.from(await (await fetch(thumbURL)).arrayBuffer()) 11 | 12 | let prova = { 13 | "key": { 14 | "participants": "0@s.whatsapp.net", 15 | "fromMe": false, 16 | "id": "Halo" 17 | }, 18 | "message": { 19 | "locationMessage": { 20 | name: '𝐏𝐥𝐮𝐠𝐢𝐧 𝐬𝐚𝐥𝐯𝐚𝐭𝐨 ✓', 21 | jpegThumbnail: thumbBuffer, 22 | vcard: `BEGIN:VCARD 23 | VERSION:3.0 24 | N:Sy;Bot;;; 25 | FN:y 26 | item1.TEL;waid=${m.sender.split('@')[0]}:${m.sender.split('@')[0]} 27 | item1.X-ABLabel:Ponsel 28 | END:VCARD` 29 | } 30 | }, 31 | "participant": "0@s.whatsapp.net" 32 | } 33 | 34 | conn.reply(m.chat, `${path}`, prova) 35 | } 36 | 37 | handler.help = ['saveplugin'].map(v => v + ' ') 38 | handler.tags = ['owner'] 39 | handler.command = ["salvar", "saveplugin"] 40 | handler.rowner = true 41 | 42 | export default handler 43 | -------------------------------------------------------------------------------- /plugins/Info-aggiornamenti.js: -------------------------------------------------------------------------------- 1 | import { performance } from 'perf_hooks'; 2 | import fetch from 'node-fetch'; 3 | import path from 'path'; 4 | import { fileURLToPath } from 'url'; 5 | import fs from 'fs'; 6 | 7 | const __filename = fileURLToPath(import.meta.url); 8 | const __dirname = path.dirname(__filename); 9 | 10 | const handler = async (message, { conn }) => { 11 | const newsText = `*RILASCIO V6.1*\n\n` 12 | + `📅 *Data:* 18/08 \n` 13 | + `🆕 *Aggiornamenti principali:*\n` 14 | + `• Nuovo comando social\n` 15 | + `• Ottimizzato i log su console\n` 16 | + `• Ottimizzato aggiorna\n` 17 | + `• nuova interfaccia dox\n` 18 | + `• nuovi staffer: giusemd & anubi\n` 19 | + `• *Cambio gestione security transato a DEATH:*\n` 20 | + ` - Nuove funzionalità in security\n` 21 | + ` - Ristrutturazione completa del progetto\n` 22 | + `• Preparazione per V7.0 con nuove funzionalità\n\n`; 23 | 24 | await conn.sendMessage( 25 | message.chat, 26 | { text: newsText }, 27 | { quoted: message } 28 | ); 29 | }; 30 | 31 | handler.help = ['novita']; 32 | handler.tags = ['info']; 33 | handler.command = /^(novita|aggiornamenti|novità)$/i; 34 | 35 | export default handler; 36 | -------------------------------------------------------------------------------- /plugins/gp-staff.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | 3 | const createVCard = (name, number, role) => { 4 | return `BEGIN:VCARD 5 | VERSION:3.0 6 | FN:${name} 7 | ORG:ChatUnity; 8 | TEL;type=CELL;type=VOICE;waid=${number}:+${number} 9 | X-ABLabel:${role} 10 | END:VCARD`.replace(/\n/g, '\r\n'); 11 | }; 12 | 13 | await conn.sendMessage(m.chat, { 14 | contacts: { 15 | displayName: '👥 ChatUnity Staff', 16 | contacts: [ 17 | { vcard: createVCard('Creatore', '393773842461', 'Founder') }, 18 | { vcard: createVCard('co-founder', '393509368693', 'co-founder') }, 19 | { vcard: createVCard('Finanziatore', '393803482529', 'Financer') }, 20 | { vcard: createVCard('SMM & MODDER', '393929139611', 'SMM & MODDER') }, 21 | { vcard: createVCard('Developer 1', '66621409462', 'Developer') }, 22 | { vcard: createVCard('Developer 2', '393512884684', 'Developer') }, 23 | { vcard: createVCard('Developer 3', '393472425001', 'Developer') }, 24 | { vcard: createVCard('Developer 4', '393534409026', 'Developer') } 25 | ] 26 | } 27 | }, { quoted: m }); 28 | }; 29 | 30 | handler.help = ['staff']; 31 | handler.tags = ['info']; 32 | handler.command = ['staff', 'team']; 33 | 34 | export default handler; 35 | -------------------------------------------------------------------------------- /plugins/stato- info.js: -------------------------------------------------------------------------------- 1 | let handler = async (message, { conn, participants, groupMetadata }) => { 2 | const groupAdmins = participants.filter(member => member.admin); 3 | const adminList = groupAdmins.map(admin => `• @${admin.id.split('@')[0]}`).join('\n'); 4 | const groupOwner = groupMetadata.owner || (groupAdmins.find(admin => admin.admin === 'superadmin')?.id) || message.chat.split('-')[0] + '@s.whatsapp.net'; 5 | 6 | const infoMessage = ` 7 | 『💬』 ══ •⊰✰⊱• ══ 『💬』 8 | 🪢 Info - Stato: 9 | ✧ Benvenuto (👑) 10 | ✧ SoloGruppo (👑) 11 | ✧ SoloPrivato (👑) 12 | ✧ soloadmin (👑) 13 | ✧ Gruppo Ban (👤) 14 | ✧ Restrict sul bot (👤 -❗️) 15 | ✧ Anti - Paki (👑) 16 | ✧ Anti - Call (👤) 17 | ✧ Anti - Elimina (👑) 18 | ✧ Anti - Link (👑) 19 | ✧ Anti - Insta (👑) 20 | ✧ Anti - TikTok (👑) 21 | 『💬』 ══ •⊰✰⊱• ══ 『💬』 22 | ✧ INFO 23 | (👑) Comando eseguibile da admin e owner 24 | (👤) Comando eseguibile solo da un owner 25 | (❗️) Tenere sempre attivo 26 | 『💬』 ══ •⊰✰⊱• ══ 『💬』 27 | `.trim(); 28 | 29 | const mentions = participants.map(member => member.id).concat(groupOwner); 30 | 31 | await conn.sendMessage(message.chat, { text: infoMessage, mentions }, { quoted: message }); 32 | }; 33 | 34 | handler.help = ['infostato', 'info-stato']; 35 | handler.tags = ['group']; 36 | handler.command = /^(infostato|stato)$/i; 37 | handler.group = true; 38 | 39 | export default handler; -------------------------------------------------------------------------------- /plugins/owner-stats.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | const queueStats = await import('../../lib/queue.js').then(mod => { 3 | return { 4 | messages: { 5 | pending: mod.messageQueue.pending, 6 | size: mod.messageQueue.size 7 | }, 8 | commands: { 9 | pending: mod.commandQueue.pending, 10 | size: mod.commandQueue.size 11 | }, 12 | media: { 13 | pending: mod.mediaQueue.pending, 14 | size: mod.mediaQueue.size 15 | } 16 | } 17 | }) 18 | 19 | const cacheStats = { 20 | groupMeta: global.groupMetaCache.size, 21 | jid: global.jidCache.getStats(), 22 | processedMsg: global.processedMessages.size 23 | } 24 | 25 | const txt = `*📊 PERFORMANCE STATS* 26 | 27 | *Code Messaggi:* 28 | - Pending: ${queueStats.messages.pending} 29 | - In coda: ${queueStats.messages.size} 30 | 31 | *Code Comandi:* 32 | - Pending: ${queueStats.commands.pending} 33 | - In coda: ${queueStats.commands.size} 34 | 35 | *Code Media:* 36 | - Pending: ${queueStats.media.pending} 37 | - In coda: ${queueStats.media.size} 38 | 39 | *Cache:* 40 | - Gruppi: ${cacheStats.groupMeta} cached 41 | - JID: ${cacheStats.jid.keys} cached 42 | - Msg processati: ${cacheStats.processedMsg} 43 | ` 44 | 45 | m.reply(txt) 46 | } 47 | 48 | handler.command = /^(stats|performance)$/i 49 | handler.owner = true 50 | 51 | export default handler 52 | -------------------------------------------------------------------------------- /plugins/OWNER_zip.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import archiver from 'archiver'; 3 | 4 | let handler = async (m, { text, conn, usedPrefix, command, __dirname }) => { 5 | if (!text) return m.reply(`⚠️ Usa: ${usedPrefix + command} `); 6 | 7 | let archiveName = text.trim(); 8 | let archivePath = `./${archiveName}.zip`; 9 | 10 | await m.reply(`🔄 Creazione del backup in corso...`); 11 | 12 | const output = fs.createWriteStream(archivePath); 13 | const archive = archiver('zip', { zlib: { level: 9 } }); 14 | 15 | output.on('close', async () => { 16 | console.log(`Archivio creato: ${archive.pointer()} bytes`); 17 | await m.reply(`✅ Backup ${archiveName}.zip creato. Inviando...`); 18 | 19 | let fileData = fs.readFileSync(archivePath); 20 | await conn.sendMessage(m.chat, { 21 | document: fileData, 22 | mimetype: 'application/zip', 23 | fileName: `${archiveName}.zip` 24 | }, { quoted: m }); 25 | 26 | fs.unlinkSync(archivePath); 27 | }); 28 | 29 | archive.on('error', (err) => { 30 | console.error(err); 31 | m.reply(`❌ Errore durante la compressione: ${err.message}`); 32 | }); 33 | 34 | archive.pipe(output); 35 | 36 | 37 | archive.glob('**/*', { 38 | ignore: ['node_modules/**', 'Sessioni/**'] 39 | }); 40 | 41 | await archive.finalize(); 42 | }; 43 | 44 | handler.command = /^zip$/i; 45 | handler.owner = true; 46 | export default handler; -------------------------------------------------------------------------------- /plugins/fun-contaparole.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { text }) => { 2 | let txt = text || (m.quoted && m.quoted.text); 3 | 4 | if (!txt) { 5 | throw '> ⓘ 𝐅𝐨𝐫𝐧𝐢𝐬𝐜𝐢 𝐮𝐧 𝐭𝐞𝐬𝐭𝐨 𝐝𝐚 𝐜𝐨𝐧𝐭𝐚𝐫𝐞.'; 6 | } 7 | 8 | const caratterispeciali = /[^\w\d\s]/.test(txt); 9 | if (caratterispeciali) { 10 | throw '> ⚠️ 𝐈𝐥 𝐭𝐞𝐬𝐭𝐨 𝐢𝐧𝐬𝐞𝐫𝐢𝐭𝐨 𝐜𝐨𝐧𝐭𝐢𝐞𝐧𝐞 𝐜𝐚𝐫𝐚𝐭𝐭𝐞𝐫𝐢 𝐬𝐩𝐞𝐜𝐢𝐚𝐥𝐢.'; 11 | } 12 | 13 | const parole = txt.match(/\b\w+\b/g); 14 | 15 | const numeroParole = parole ? parole.length : 0; 16 | 17 | const numeroNumeri = txt.match(/\b\d+\b/g) ? txt.match(/\b\d+\b/g).length : 0; 18 | 19 | const numeriSpeciali = ['𝟏', '𝟐', '𝟑', '𝟒', '𝟓', '𝟔', '𝟕', '𝟖', '𝟗']; 20 | const numeriParole = numeroParole.toString().split('').map(digit => numeriSpeciali[digit]).join(''); 21 | 22 | const numeriNumeri = numeroNumeri.toString().split('').map(digit => numeriSpeciali[digit]).join(''); 23 | 24 | let messaggio = ` ⓘ 𝐈𝐥 𝐭𝐞𝐬𝐭𝐨 𝐢𝐧𝐬𝐞𝐫𝐢𝐭𝐨 𝐜𝐨𝐧𝐭𝐢𝐞𝐧𝐞 ${numeriParole} 𝐩𝐚𝐫𝐨𝐥𝐞`; 25 | 26 | if (numeroNumeri > 0) { 27 | messaggio += ` 𝐞 ${numeriNumeri} 𝐧𝐮𝐦𝐞𝐫𝐢`; 28 | } 29 | 30 | if (numeroNumeri === 0) { 31 | messaggio += `.`; 32 | } 33 | 34 | m.reply(messaggio); 35 | } 36 | 37 | handler.command = ['contaparole']; 38 | export default handler; -------------------------------------------------------------------------------- /plugins/buypokemon.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, args }) => { 2 | const user = m.sender; 3 | const type = args[0]?.toLowerCase(); 4 | const quantity = Math.max(1, parseInt(args[1]) || 1); 5 | 6 | const prices = { 7 | base: 500, 8 | imperium: 1500, 9 | premium: 5000, 10 | }; 11 | 12 | if (!['base', 'imperium', 'premium'].includes(type)) { 13 | return m.reply(`❌ Usa: .buypokemon \nEsempio: .buypokemon base 3`); 14 | } 15 | 16 | global.db.data.users[user] = global.db.data.users[user] || {}; 17 | const data = global.db.data.users[user]; 18 | 19 | data.packInventory = data.packInventory || { base: 0, imperium: 0, premium: 0 }; 20 | data.limit = data.limit || 0; // UnityCoins 21 | 22 | const totalCost = prices[type] * quantity; 23 | 24 | if (data.limit < totalCost) { 25 | return m.reply(`❌ Ti servono *${totalCost}* UnityCoins per acquistare ${quantity} pacchetti ${type.toUpperCase()}.\n💰 Saldo attuale: ${data.limit}`); 26 | } 27 | 28 | data.limit -= totalCost; 29 | data.packInventory[type] += quantity; 30 | 31 | return m.reply(`✅ Hai comprato *${quantity}* pacchetti ${type.toUpperCase()}!\n📦 Totale ora: ${data.packInventory[type]}\n💸 UnityCoins rimanenti: ${data.limit}`); 32 | }; 33 | 34 | handler.help = ['buypokemon ']; 35 | handler.tags = ['pokemon']; 36 | handler.command = /^buypokemon$/i; 37 | 38 | export default handler; -------------------------------------------------------------------------------- /plugins/fun-bacia.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, participants, command, usedPrefix }) => { 2 | // Se non è stato menzionato nessuno, verifica se il messaggio è una risposta 3 | if (!text) { 4 | if (m.quoted && m.quoted.sender) { 5 | text = '@' + m.quoted.sender.split('@')[0]; 6 | } else { 7 | return conn.reply(m.chat, ` Devi menzionare qualcuno o rispondere a un messaggio per baciarlo💋! Esempio: ${usedPrefix + command} @utente`, m); 8 | } 9 | } 10 | 11 | // Prende gli utenti menzionati nel messaggio 12 | let utentiMenzionati = m.mentionedJid; 13 | 14 | // Se non ci sono menzionati e non è una risposta, usa il sender del messaggio citato 15 | if (!utentiMenzionati.length && m.quoted && m.quoted.sender) { 16 | utentiMenzionati = [m.quoted.sender]; 17 | } 18 | 19 | // Se ancora non c'è nessuno da baciare 20 | if (!utentiMenzionati.length) { 21 | return m.reply("💋 *Devi menzionare qualcuno per baciarlo!*\nEsempio: *.bacia @utente*"); 22 | } 23 | 24 | let utenteBaciato = utentiMenzionati[0]; 25 | 26 | // Messaggio del bacio 27 | let messaggio = `💋 *${await conn.getName(m.sender)} ha dato un bacio a ${await conn.getName(utenteBaciato)}!* 😘`; 28 | 29 | await conn.sendMessage(m.chat, { text: messaggio, mentions: [utenteBaciato] }, { quoted: m }); 30 | }; 31 | 32 | handler.command = ["bacia"]; 33 | export default handler; -------------------------------------------------------------------------------- /plugins/editfile.js: -------------------------------------------------------------------------------- 1 | //Codice di editfile.js 2 | 3 | import fs from 'fs'; 4 | 5 | let handler = async (message, { text, usedPrefix, command }) => { 6 | if (!text) throw '𝐈𝐧𝐬𝐞𝐫𝐢𝐬𝐜𝐢 𝐢𝐥 𝐩𝐚𝐭𝐡 𝐝𝐞𝐥 𝐟𝐢𝐥𝐞 𝐝𝐚 𝐞𝐝𝐢𝐭𝐚𝐫𝐞'; 7 | if (!message.quoted || !message.quoted.text) throw '𝐑𝐢𝐬𝐩𝐨𝐧𝐝𝐢 𝐚𝐥 𝐦𝐞𝐬𝐬𝐚𝐠𝐢𝐨 𝐜𝐡𝐞 𝐜𝐨𝐧𝐭𝐢𝐞𝐧𝐞 𝐢𝐥 𝐧𝐮𝐨𝐯𝐨 𝐜𝐨𝐧𝐭𝐞𝐧𝐮𝐭𝐨 𝐝𝐞𝐥 𝐟𝐢𝐥𝐞'; 8 | 9 | let filePath = text; 10 | 11 | // Controlla se il file esiste 12 | if (!fs.existsSync(filePath)) throw '𝐈𝐥 𝐟𝐢𝐥𝐞 𝐧𝐨𝐧 𝐞𝐬𝐢𝐬𝐭𝐞'; 13 | 14 | // Sovrascrive il contenuto del file 15 | fs.writeFileSync(filePath, message.quoted.text); 16 | 17 | let responseMessage = { 18 | key: { 19 | participants: '0@s.whatsapp.net', 20 | fromMe: false, 21 | id: 'EditFile' 22 | }, 23 | message: { 24 | locationMessage: { 25 | name: 'File Editato', 26 | jpegThumbnail: await (await fetch('https://telegra.ph/file/876cc3f192ec040e33aba.png')).buffer(), 27 | vcard: 'BEGIN:VCARD\nVERSION:3.0\nN:;File;;;\nFN:File\nEND:VCARD' 28 | } 29 | }, 30 | participant: '0@s.whatsapp.net' 31 | }; 32 | 33 | conn.reply(message.chat, `𝐈𝐥 𝐟𝐢𝐥𝐞 "${text}" 𝐞̀ 𝐬𝐭𝐚𝐭𝐨 𝐞𝐝𝐢𝐭𝐚𝐭𝐨 𝐜𝐨𝐧 𝐬𝐮𝐜𝐜𝐞𝐬𝐬𝐨`, responseMessage); 34 | }; 35 | 36 | handler.tags = ['owner']; 37 | handler.command = /^editfile$/i; 38 | handler.rowner = true; 39 | 40 | export default handler; -------------------------------------------------------------------------------- /plugins/fun-alcolizzato.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, command, text }) => { 2 | // Genera un livello casuale di alcol nel sangue 3 | let width = Math.floor(Math.random() * 101); 4 | 5 | // Determina il messaggio in base al livello 6 | let finalPhrase = width >= 70 7 | ? "🍾 Amico se hai bisogno di parlare io ci sono.." 8 | : width >= 30 9 | ? "🥂 Beve in modo responsabile, o quasi..." 10 | : "🚰 Totalmente sobrio, niente sbronze per oggi!"; 11 | 12 | // Creazione del messaggio 13 | let message = ` 14 | 『💬』 ══ •⊰✰⊱• ══ 『💬』 15 | 16 | MOMENTO DEL TEST DELL'ALCOL! 🍷 17 | ━━━━━━━━━━━━━━ 18 | ${text ? text : 'Tu'} ha un tasso alcolemico del ${width}%! 🍷 19 | 『💬』 ══ •⊰✰⊱• ══ 『💬』 20 | 21 | ${finalPhrase} 22 | `.trim(); 23 | 24 | const messageOptions = { 25 | contextInfo: { 26 | forwardingScore: 1, 27 | isForwarded: true, 28 | forwardedNewsletterMessageInfo: { 29 | newsletterJid: '120363259442839354@newsletter', 30 | serverMessageId: '', 31 | newsletterName: `ChatUnity` // Utilizzo della variabile botName 32 | }, 33 | } 34 | }; 35 | 36 | // Invia il messaggio con le menzioni e le opzioni 37 | m.reply(message, null, { mentions: conn.parseMention(message), ...messageOptions }); 38 | }; 39 | 40 | handler.command = /^(alcolizzato|alcol)$/i; 41 | 42 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-setnome.js: -------------------------------------------------------------------------------- 1 | // Definizione delle stringhe in italiano 2 | const lenguajeIT = { 3 | smsNam2: () => "⚠️ Per favore inserisci il nuovo nome per il gruppo", 4 | smsNam1: () => "✅ Nome del gruppo modificato con successo!", 5 | smsNam3: () => "✅ Nome del gruppo modificato con successo!", 6 | smsConMenu: () => "🔙 Torna al Menu" 7 | } 8 | 9 | let handler = async (m, { conn, args, text }) => { 10 | const pp = await conn.profilePictureUrl(m.chat, 'image').catch(_ => null) || './media/chatunitybot.mp4' 11 | 12 | if (!text) return conn.reply(m.chat, lenguajeIT.smsNam2(), fkontak, m) 13 | 14 | try { 15 | let text = args.join` ` 16 | if(args && args[0]) { 17 | await conn.groupUpdateSubject(m.chat, text) 18 | } 19 | 20 | await conn.reply(m.chat, lenguajeIT.smsNam1(), fkontak, m) 21 | // Alternativa con pulsante: 22 | // await conn.sendButton( 23 | // m.chat, 24 | // 'Nome modificato', 25 | // lenguajeIT.smsNam1(), 26 | // pp, 27 | // [[lenguajeIT.smsConMenu(), '/menu']], 28 | // fkontak, 29 | // m 30 | // ) 31 | 32 | } catch (e) { 33 | console.error('Errore nel comando setname:', e) 34 | throw lenguajeIT.smsNam3() 35 | } 36 | } 37 | 38 | handler.command = /^(setname|setnome)$/i 39 | handler.group = true 40 | handler.admin = true 41 | handler.botAdmin = true 42 | export default handler -------------------------------------------------------------------------------- /lib/levelling.js: -------------------------------------------------------------------------------- 1 | export const growth = Math.pow(Math.PI / Math.E, 1.618) * Math.E * .75 2 | 3 | export function xpRange(level, multiplier = global.multiplier || 1) { 4 | if (level < 0) throw new TypeError('Il livello non può essere negativo') 5 | if (level === Infinity) return { 6 | min: Infinity, 7 | max: Infinity, 8 | xp: Infinity 9 | } 10 | 11 | level = Math.floor(level) 12 | let min = level === 0 ? 0 : Math.round(Math.pow(level, growth) * multiplier) + 1 13 | let max = Math.round(Math.pow(++level, growth) * multiplier) 14 | 15 | return { 16 | min, 17 | max, 18 | xp: max - min 19 | } 20 | } 21 | 22 | export function findLevel(xp, multiplier = global.multiplier || 1) { 23 | if (xp === Infinity) return Infinity 24 | if (isNaN(xp)) return NaN 25 | if (xp <= 0) return -1 26 | 27 | let level = 0 28 | do { 29 | level++ 30 | if (level === Infinity) break 31 | } while (xpRange(level, multiplier).min <= xp) 32 | 33 | return --level 34 | } 35 | 36 | export function canLevelUp(level, xp, multiplier = global.multiplier || 1) { 37 | if (xp === Infinity) return level !== Infinity 38 | if (level < 0) return false 39 | if (isNaN(xp)) return false 40 | if (xp <= 0) return false 41 | if (level === Infinity) return false 42 | const nextLevel = findLevel(xp, multiplier) 43 | return level < nextLevel && nextLevel !== Infinity 44 | } 45 | -------------------------------------------------------------------------------- /plugins/rpg-deposita.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { args }) => { 2 | let user = global.db.data.users[m.sender]; 3 | 4 | // Inizializza i valori di default se non esistono 5 | if (typeof user.bank !== 'number') user.bank = 0; 6 | if (typeof user.limit !== 'number') user.limit = 0; 7 | 8 | if (!args[0]) return m.reply('🚩 ɪɴsᴇʀɪsᴄɪ ʟᴀ ǫᴜᴀɴᴛɪᴛᴀ ᴅᴏᴡɴ.'); 9 | if (args[0] < 1) return m.reply('🚩 ғʀᴀᴛᴇ sᴇɪ sᴛᴜᴘɪᴅᴏ? ᴍᴇᴛᴛɪ ᴜɴᴀ ǫᴜᴀɴᴛɪᴛᴀ ɢɪᴜsᴛᴀ!!.'); 10 | 11 | if (args[0] === 'all') { 12 | let count = parseInt(user.limit); 13 | if (count <= 0) return m.reply('🚩 ᴘᴏᴠᴇʀᴏ ɴᴏɴ ʜᴀɪ ᴀʙʙᴀsᴛᴀɴᴢᴀ sᴏʟᴅᴋi.'); 14 | user.limit -= count; 15 | user.bank += count; 16 | await m.reply(`🚩 ʙʀᴀᴠᴏ ʜᴀɪ ᴅᴇᴘᴏsɪsᴛᴀᴛᴏ ${count} 💶 ᴜɴɪᴛʏᴄᴏɪɴ* ɴᴇʟʟᴀ ᴛᴜᴀ ʙᴀɴᴄᴀ.`); 17 | return; 18 | } 19 | 20 | if (isNaN(args[0])) return m.reply('🚩 ʟᴀ ǫᴜᴀɴᴛɪᴛᴀ ᴅᴇᴠᴇ ᴇssᴇʀᴇ ᴜɴ ᴄᴀᴢᴢᴏ ᴅɪ ɴᴜᴍᴇʀ.'); 21 | let count = parseInt(args[0]); 22 | 23 | if (user.limit <= 0) return m.reply('🚩 ɴᴏɴ ʜᴀɪ 💶 ᴜɴɪᴛʏᴄᴏɪɴ ɴᴇʟ ᴘᴏʀᴛᴀғᴏɢʟɪᴏ ᴅᴏᴡɴ.'); 24 | if (user.limit < count) return m.reply(`🚩 ʜᴀɪ sᴏʟᴏ ${user.limit} 💶 ᴜɴɪᴛʏᴄᴏɪɴs ɴᴇʟ ᴘᴏʀᴛᴀғᴏɢʟɪᴏ ʙʀᴜᴛᴛʟ ɢᴀʏ`); 25 | 26 | user.limit -= count; 27 | user.bank += count; 28 | await m.reply(`🚩 ᴏʜʜ ғɪɴᴀʟᴍᴇɴᴛᴇ sᴏʟᴅɪ, ʜᴀɪ ᴅᴇᴘᴏsɪsᴛᴀᴛᴏ ${count} 💶 ᴜɴɪᴛʏᴄᴏɪɴs ɪɴ ʙᴀɴᴄᴀ.`); 29 | }; 30 | 31 | handler.help = ['deposita']; 32 | handler.tags = ['rpg']; 33 | handler.command = ['deposita', 'depositar', 'dep', 'd']; 34 | handler.register = true; 35 | export default handler; -------------------------------------------------------------------------------- /plugins/antimedia.js: -------------------------------------------------------------------------------- 1 | // antimedia by Onix, di Riad 2 | export async function before(m, { conn }) { 3 | if (!m.isGroup || m.isBaileys) return true; 4 | 5 | const chat = global.db.data.chats[m.chat]; 6 | if (!chat.antimedia) return true; 7 | 8 | const msg = m.msg || {}; 9 | const type = m.mtype || ''; 10 | 11 | 12 | if (m.sender === conn.user.jid) return true; 13 | 14 | 15 | const groupMetadata = await conn.groupMetadata(m.chat); 16 | const admins = groupMetadata.participants 17 | .filter(p => p.admin) 18 | .map(p => p.id); 19 | 20 | 21 | if (admins.includes(m.sender)) return true; 22 | 23 | if (['imageMessage', 'videoMessage'].includes(type)) { 24 | const isViewOnce = msg?.[type]?.viewOnce; 25 | const isGif = msg?.videoMessage?.gifPlayback; 26 | 27 | if (!isViewOnce || isGif) { 28 | 29 | await conn.sendMessage(m.chat, { 30 | delete: { 31 | remoteJid: m.chat, 32 | fromMe: false, 33 | id: m.key.id, 34 | participant: m.key.participant || m.sender 35 | } 36 | }); 37 | 38 | await conn.sendMessage(m.chat, { 39 | text: `> ⚠️ 𝐀𝐍𝐓𝐈𝐌𝐄𝐃𝐈𝐀 𝐀𝐓𝐓𝐈𝐕𝐎 ⚠️\n 𝐒𝐨𝐥𝐨 𝐟𝐨𝐭𝐨 𝐞 𝐯𝐢𝐝𝐞𝐨 𝐚𝐝 1 𝐯𝐢𝐬𝐮𝐚𝐥 𝐬𝐨𝐧𝐨 𝐩𝐞𝐫𝐦𝐞𝐬𝐬𝐢.`, 40 | mentions: [m.sender] 41 | }); 42 | } 43 | } 44 | 45 | return true; 46 | } -------------------------------------------------------------------------------- /plugins/info-genere.js: -------------------------------------------------------------------------------- 1 | const setgenereHandler = async (m, { conn, usedPrefix, command, text }) => { 2 | const who = m.sender; // L'utente che invia il comando 3 | 4 | // Se il comando è .setgenere 5 | if (command === 'setgenere') { 6 | // Se l'utente non fornisce un genere valido, rispondi con un errore 7 | if (!text || !['maschio', 'femmina'].includes(text.toLowerCase())) { 8 | return conn.reply(m.chat, `𝐔𝐬𝐨 𝐝𝐞𝐥 𝐜𝐨𝐦𝐚𝐧𝐝𝐨 𝐜𝐨𝐫𝐫𝐞𝐭𝐭𝐨. 𝐃𝐢𝐠𝐢𝐭𝐚:\n.𝐬𝐞𝐭𝐠𝐞𝐧𝐞𝐫𝐞 𝐦𝐚𝐬𝐜𝐡𝐢𝐨 / .𝐬𝐞𝐭𝐠𝐞𝐧𝐞𝐫𝐞 𝐟𝐞𝐦𝐦𝐢𝐧𝐚`, m); 9 | } 10 | 11 | // Impostazione dell'emoji del genere 12 | const emoji = text.toLowerCase() === 'maschio' ? '🚹' : '🚺'; 13 | 14 | // Aggiungi il genere nel database dell'utente 15 | global.db.data.users[who].genere = text.trim().toLowerCase(); 16 | 17 | // Risposta di conferma con il genere e l'emoji aggiornati 18 | conn.reply(m.chat, `✓ 𝐆𝐞𝐧𝐞𝐫𝐞 𝐢𝐦𝐩𝐨𝐬𝐭𝐚𝐭𝐨 𝐜𝐨𝐦𝐞: ${text.trim().toLowerCase()} ${emoji}`, m); 19 | } 20 | 21 | // Se il comando è .eliminagenere 22 | if (command === 'eliminagenere') { 23 | // Rimuovi il genere dal database dell'utente 24 | delete global.db.data.users[who].genere; 25 | 26 | // Risposta di conferma con l'eliminazione del genere 27 | conn.reply(m.chat, `𝐆𝐞𝐧𝐞𝐫𝐞 𝐫𝐢𝐦𝐨𝐬𝐬𝐨 ✓`, m); 28 | } 29 | } 30 | 31 | // Aggiungi i comandi .setgenere ed .eliminagenere 32 | setgenereHandler.command = /^(setgenere|eliminagenere)$/i; 33 | export default setgenereHandler; -------------------------------------------------------------------------------- /plugins/gp-corano.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const coranoPlugin = async (m, { conn, text, usedPrefix, command }) => { 4 | const prompt = text 5 | ? `Riporta il versetto del Corano richiesto: "${text}". 6 | Formato di output richiesto: 7 | 8 | Sura : - () 9 | 10 | 11 | 12 | Rispondi solo con questo testo, senza altro.` 13 | : `Riporta un versetto casuale del Corano nel seguente formato: 14 | 15 | Sura : - () 16 | 17 | 18 | 19 | Rispondi solo con questo testo, senza altro.`; 20 | 21 | try { 22 | await conn.sendPresenceUpdate('composing', m.chat); 23 | 24 | const res = await axios.post('https://luminai.my.id', { 25 | content: prompt, 26 | user: m.pushName || "utente", 27 | prompt: 'Rispondi sempre in italiano.', 28 | webSearchMode: false 29 | }); 30 | 31 | const verso = res.data.result; 32 | if (!verso) throw new Error("Nessuna risposta ricevuta."); 33 | 34 | return await conn.reply(m.chat, verso, m); 35 | } catch (err) { 36 | console.error('[❌ coranoPlugin]', err); 37 | return conn.reply(m.chat, '⚠️ Errore nel recupero del versetto. Usa un riferimento valido tipo 2:255', m); 38 | } 39 | }; 40 | 41 | coranoPlugin.help = ['corano [riferimento]']; 42 | coranoPlugin.tags = ['religione', 'corano']; 43 | coranoPlugin.command = /^corano$/i; 44 | 45 | export default coranoPlugin; -------------------------------------------------------------------------------- /plugins/fun-sega.js: -------------------------------------------------------------------------------- 1 | import { performance } from 'perf_hooks' 2 | 3 | let handler = async (m, { conn, text }) => { 4 | let nomeDelBot = global.db.data.nomedelbot || `𝐂𝐡𝐚𝐭𝐔𝐧𝐢𝐭𝐲` 5 | 6 | // Identifica il destinatario: risposto o menzionato 7 | let destinatario; 8 | if (m.quoted && m.quoted.sender) { 9 | destinatario = m.quoted.sender; 10 | } else if (m.mentionedJid && m.mentionedJid.length > 0) { 11 | destinatario = m.mentionedJid[0]; 12 | } else { 13 | return m.reply("Tagga qualcuno o rispondi a un messaggio per segarlo 😏"); 14 | } 15 | 16 | let nomeDestinatario = `@${destinatario.split('@')[0]}` 17 | 18 | // Messaggio iniziale 19 | let { key } = await conn.sendMessage(m.chat, { 20 | text: `Ora sego ${nomeDestinatario}...`, 21 | mentions: [destinatario] 22 | }, { quoted: m }) 23 | 24 | const array = [ 25 | "8===👊=D", "8=👊===D", "8==👊==D", "8===👊=D", "8===👊=D💦" 26 | ] 27 | 28 | for (let item of array) { 29 | await conn.sendMessage(m.chat, { 30 | text: `${item}`, 31 | edit: key, 32 | mentions: [destinatario] 33 | }, { quoted: m }) 34 | await new Promise(resolve => setTimeout(resolve, 20)) 35 | } 36 | 37 | // Messaggio finale 38 | return conn.sendMessage(m.chat, { 39 | text: `Oh ${nomeDestinatario} ha sborrato! 😋💦`, 40 | edit: key, 41 | mentions: [destinatario] 42 | }, { quoted: m }) 43 | } 44 | 45 | handler.help = ['sega'] 46 | handler.tags = ['fun'] 47 | handler.command = /^(sega)$/i 48 | 49 | export default handler -------------------------------------------------------------------------------- /plugins/pokemon-pacchetti.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | const user = m.sender; 3 | global.db.data.users[user] = global.db.data.users[user] || {}; 4 | const data = global.db.data.users[user]; 5 | 6 | data.packInventory = data.packInventory || { base: 0, imperium: 0, premium: 0 }; 7 | 8 | const { base, imperium, premium } = data.packInventory; 9 | 10 | const message = ` 11 | 📂 I TUOI PACCHETTI 12 | 13 | • 📦 Base: ${base} 14 | • 👑 Imperium: ${imperium} 15 | • 🌌 Premium: ${premium} 16 | 17 | 🎁 Usa i bottoni per aprire un pacchetto subito! 18 | `.trim(); 19 | 20 | const buttons = []; 21 | 22 | if (base > 0) { 23 | buttons.push({ buttonId: '.apri base', buttonText: { displayText: '📦 Apri Base' }, type: 1 }); 24 | } 25 | if (imperium > 0) { 26 | buttons.push({ buttonId: '.apri imperium', buttonText: { displayText: '👑 Apri Imperium' }, type: 1 }); 27 | } 28 | if (premium > 0) { 29 | buttons.push({ buttonId: '.apri premium', buttonText: { displayText: '🌌 Apri Premium' }, type: 1 }); 30 | } 31 | 32 | if (buttons.length === 0) { 33 | buttons.push({ buttonId: '.pacchetti', buttonText: { displayText: '➕ Compra Pacchetti' }, type: 1 }); 34 | } 35 | 36 | await conn.sendMessage(m.chat, { 37 | text: message, 38 | footer: '✨ Colleziona carte rare e crea il tuo team!', 39 | buttons, 40 | }, { quoted: m }); 41 | }; 42 | 43 | handler.help = ['imieiPacchetti']; 44 | handler.tags = ['pokemon']; 45 | handler.command = /^imiei(pacchetti)?$/i; 46 | 47 | export default handler; -------------------------------------------------------------------------------- /plugins/info-dashboard.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | let stats = Object.entries(db.data.stats).map(([key, val]) => { 3 | let name = Array.isArray(plugins[key]?.help) ? plugins[key]?.help?.join(' , ') : plugins[key]?.help || key 4 | 5 | if (/exec/.test(name)) return 6 | return { name, ...val } 7 | }) 8 | 9 | stats = stats.sort((a, b) => b.total - a.total) 10 | 11 | let txt = stats.slice(0, 10).map(({ name, total, last }) => { 12 | return `┏━━━━━━━━━━━━━┓ 13 | ┣📚 COMANDO : ${name} 14 | ┣🗂️ USI : ${total} 15 | ┣⏱️ ULTIMO USO : ${getTime(last)} 16 | ┗━━━━━━━━━━━━━┛` 17 | }).join('\n\n') 18 | 19 | await conn.reply(m.chat, `⚡ *TOP 10 COMANDI PIÙ UTILIZZATI* ⚡\n\n${txt}`, m) 20 | } 21 | 22 | handler.help = ['dashboard'] 23 | handler.tags = ['info'] 24 | handler.command = /^dashboard$/i 25 | 26 | export default handler 27 | 28 | function parseMs(ms) { 29 | if (typeof ms !== 'number') throw 'Parametro non valido' 30 | return { 31 | giorni: Math.floor(ms / 86400000), 32 | ore: Math.floor(ms / 3600000) % 24, 33 | minuti: Math.floor(ms / 60000) % 60, 34 | secondi: Math.floor(ms / 1000) % 60 35 | } 36 | } 37 | 38 | function getTime(ms) { 39 | if (!ms) return 'Mai usato' 40 | let now = parseMs(+new Date() - ms) 41 | if (now.giorni) return `${now.giorni} giorni fa` 42 | if (now.ore) return `${now.ore} ore fa` 43 | if (now.minuti) return `${now.minuti} minuti fa` 44 | return `pochi secondi fa` 45 | } -------------------------------------------------------------------------------- /plugins/info-meteo.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | async function handler(m, { conn, args }) { 4 | if (!args[0]) return m.reply('❗ Inserisci il nome di una città. Uso: .meteo [nome città]'); 5 | 6 | try { 7 | const city = args.join(' '); 8 | const url = `http://api.openweathermap.org/data/2.5/weather?q=${encodeURIComponent(city)}&appid=2d61a72574c11c4f36173b627f8cb177&units=metric`; 9 | 10 | const res = await axios.get(url); 11 | const data = res.data; 12 | 13 | const weather = `_🌍 *Info Meteo per ${data.name}, ${data.sys.country}* 🌍_ 14 | 🌡 Temperatura: ${data.main.temp}°C 15 | 🌡 Percepita: ${data.main.feels_like}°C 16 | 🌡 Minima: ${data.main.temp_min}°C 17 | 🌡 Massima: ${data.main.temp_max}°C 18 | 💧 Umidità: ${data.main.humidity}% 19 | ☁ Meteo: ${data.weather[0].main} 20 | 🌫 Descrizione: ${data.weather[0].description} 21 | 💨 Vento: ${data.wind.speed} m/s 22 | 🔽 Pressione: ${data.main.pressure} hPa 23 | 24 | > © Powered By CRISS AI`.trim(); 25 | 26 | m.reply(weather); 27 | } catch (e) { 28 | console.error(e); 29 | if (e.response && e.response.status === 404) { 30 | m.reply('🚫 Città non trovata. Controlla la scrittura e riprova.'); 31 | } else { 32 | m.reply('⚠ Si è verificato un errore durante il recupero delle informazioni meteo. Riprova più tardi.'); 33 | } 34 | } 35 | } 36 | 37 | handler.command = /^(meteo)$/i; 38 | handler.help = ['meteo ']; 39 | handler.tags = ['other']; 40 | handler.description = 'Ottieni informazioni meteo per una località'; 41 | 42 | export default handler; -------------------------------------------------------------------------------- /plugins/makerlogos.js: -------------------------------------------------------------------------------- 1 | 2 | let handler = async (m, { conn, args, text, usedPrefix, command }) => { 3 | 4 | let tee = `inserisci un testo corto` 5 | let too = `esempio: ${usedPrefix + command} Enemies + Bot` 6 | let type = (command).toLowerCase() 7 | switch (type) { 8 | 9 | case 'loli': 10 | if (!text) return 11 | let img = global.API('fgmods', '/api/lolimaker', { text }, 'apikey') 12 | conn.sendFile(m.chat, img, 'logo.png') 13 | break 14 | case 'neon': 15 | if (!text) return 16 | let ne = global.API('fgmods', '/api/textpro/neon', { text }, 'apikey') 17 | conn.sendFile(m.chat, ne, 'logo.png') 18 | break 19 | case 'devil': 20 | if (!text) return 21 | let de = global.API('fgmods', '/api/textpro/devil', { text }, 'apikey') 22 | conn.sendFile(m.chat, de, 'logo.png') 23 | break 24 | case 'wolf': 25 | if (!text) return 26 | let wo = global.API('fgmods', '/api/textpro/logowolf2', { text: 'FG98', text2: text}, 'apikey') 27 | conn.sendFile(m.chat, wo, 'logo.png') 28 | break 29 | case 'pornhub': 30 | if (!text) return 31 | if (!text.includes('+')) return 32 | let [a, b] = text.split`+` 33 | let ph = global.API('fgmods', '/api/textpro/pornhub', { text: a, text2: b}, 'apikey') 34 | conn.sendFile(m.chat, ph, 'logo.png') 35 | break 36 | default: 37 | } 38 | } 39 | handler.help = ['logololi', 'neon', 'devil', 'wolf', 'phlogo'] 40 | handler.tags = ['maker'] 41 | handler.command = /^(loli|neon|devil|wolf|pornhub)$/i 42 | handler.diamond = true 43 | 44 | export default handler -------------------------------------------------------------------------------- /plugins/ADMIN_richieste39.js: -------------------------------------------------------------------------------- 1 | setInterval(async () => { 2 | let chats = global.db.data.chats 3 | for (let chatId in chats) { 4 | if (!chats[chatId].accetta39) continue 5 | try { 6 | const pending = await conn.groupRequestParticipantsList(chatId) 7 | if (pending.length) { 8 | for (let p of pending) { 9 | const jid = p.jid 10 | const number = jid.split('@')[0] 11 | if (!number.startsWith('39') || number.slice(2).startsWith('0')) { 12 | await conn.groupRequestParticipantsUpdate(chatId, [jid], 'reject') 13 | } else { 14 | await conn.groupRequestParticipantsUpdate(chatId, [jid], 'approve') 15 | } 16 | } 17 | } 18 | } catch (e) {} 19 | } 20 | }, 1000) 21 | 22 | const handler = async (m, { conn, isAdmin, isBotAdmin, isOwner, command }) => { 23 | if (!(isAdmin || isOwner)) { 24 | throw '*Solo gli admin possono usare questo comando*' 25 | } 26 | 27 | if (!isBotAdmin) { 28 | throw '*Il bot deve essere admin per usare questa funzione*' 29 | } 30 | 31 | let chat = global.db.data.chats[m.chat] 32 | 33 | if (chat.accetta39) { 34 | chat.accetta39 = false 35 | await m.reply('*❌ Accettazione automatica numeri italiani disattivata*') 36 | } else { 37 | chat.accetta39 = true 38 | await m.reply('*✅ Accettazione automatica numeri italiani attivata*\n\nI numeri italiani (39) verranno accettati automaticamente, gli altri rifiutati') 39 | } 40 | } 41 | 42 | handler.command = /^(accetta39)$/i 43 | handler.group = true 44 | 45 | export default handler -------------------------------------------------------------------------------- /plugins/sticker-emojimix.js: -------------------------------------------------------------------------------- 1 | import MessageType from '@chatunity/baileys' 2 | import fetch from 'node-fetch' 3 | import { sticker } from '../lib/sticker.js' 4 | import fs from "fs" 5 | 6 | const fetchJson = (url, options) => new Promise(async (resolve, reject) => { 7 | fetch(url, options) 8 | .then(response => response.json()) 9 | .then(json => { 10 | resolve(json) 11 | }) 12 | .catch((err) => { 13 | reject(err) 14 | }) 15 | }) 16 | 17 | let handler = async (m, { conn, text, args, usedPrefix, command }) => { 18 | if (!args[0]) return m.reply(`📌 Ejemplo: *${usedPrefix + command}* 😎+🤑`) 19 | 20 | let [emoji, emoji2] = text.split`+` 21 | let anu = await fetchJson(`https://tenor.googleapis.com/v2/featured?key=AIzaSyAyimkuYQYF_FXVALexPuGQctUWRURdCYQ&contentfilter=high&media_filter=png_transparent&component=proactive&collection=emoji_kitchen_v5&q=${encodeURIComponent(emoji)}_${encodeURIComponent(emoji2)}`) 22 | 23 | for (let res of anu.results) { 24 | let userId = m.sender 25 | let packstickers = global.db.data.users[userId] || {} 26 | let texto1 = packstickers.text1 || global.packsticker 27 | let texto2 = packstickers.text2 || global.packsticker2 28 | 29 | let stiker = await sticker(false, res.url, texto1, texto2) 30 | conn.sendFile(m.chat, stiker, null, { asSticker: true }, m) 31 | } 32 | } 33 | 34 | handler.help = ['emojimix **'] 35 | handler.tags = ['sticker'] 36 | handler.command = ['emojimix'] 37 | handler.register = true 38 | 39 | export default handler; -------------------------------------------------------------------------------- /lib/queue.js: -------------------------------------------------------------------------------- 1 | //DEVLOPED BY CHATUNITY TEAM 2 | import PQueue from 'p-queue' 3 | 4 | //DEVLOPED BY CHATUNITY TEAM 5 | export const messageQueue = new PQueue({ 6 | concurrency: 5, 7 | timeout: 30000, 8 | throwOnTimeout: false 9 | }) 10 | //DEVLOPED BY CHATUNITY TEAM 11 | export const commandQueue = new PQueue({ 12 | concurrency: 3, 13 | timeout: 45000, 14 | throwOnTimeout: false 15 | }) 16 | //DEVLOPED BY CHATUNITY TEAM 17 | export const mediaQueue = new PQueue({ 18 | concurrency: 2, 19 | timeout: 60000, 20 | throwOnTimeout: false 21 | }) 22 | //DEVLOPED BY CHATUNITY TEAM 23 | export function getQueueStats() { 24 | return { 25 | messages: { 26 | pending: messageQueue.pending, 27 | size: messageQueue.size 28 | }, 29 | commands: { 30 | pending: commandQueue.pending, 31 | size: commandQueue.size 32 | }, 33 | media: { 34 | pending: mediaQueue.pending, 35 | size: mediaQueue.size 36 | } 37 | } 38 | } 39 | //DEVLOPED BY CHATUNITY TEAM 40 | setInterval(() => { 41 | const stats = getQueueStats() 42 | const total = stats.messages.pending + stats.commands.pending + stats.media.pending 43 | 44 | if (total > 10) { 45 | console.log('⚠️ Code messaggi:', JSON.stringify(stats, null, 2)) 46 | } 47 | }, 30000) 48 | //DEVLOPED BY CHATUNITY TEAM 49 | //DEVLOPED BY CHATUNITY TEAM 50 | //DEVLOPED BY CHATUNITY TEAM 51 | //DEVLOPED BY CHATUNITY TEAM 52 | //DEVLOPED BY CHATUNITY TEAM 53 | //DEVLOPED BY CHATUNITY TEAM 54 | //DEVLOPED BY CHATUNITY TEAM 55 | //DEVLOPED BY CHATUNITY TEAM -------------------------------------------------------------------------------- /plugins/gp-minecraft.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn }) => { 2 | try { 3 | // Messaggio principale senza pulsanti 4 | await conn.sendMessage(m.chat, { 5 | text: `🎮 *GIOCO MINECRAFT GRATIS E SICURO!* 🎮\n\n` + 6 | `Scopri *Eaglercraft*, la versione browser di Minecraft che puoi giocare OVUNQUE!\n\n` + 7 | `🔗 *Link diretto:* https://eaglercraft.com/\n` + 8 | `✅ Gratuito al 100%\n` + 9 | `🔒 Sicuro e senza download\n` + 10 | `🌐 Gioca direttamente dal browser\n\n` + 11 | `Apri il link sopra per giocare!`, 12 | footer: '© BixByBot - Divertiti!', 13 | mentions: [m.sender] 14 | }, { quoted: m }); 15 | 16 | // Invia un messaggio con immagine dopo 1 secondo 17 | setTimeout(async () => { 18 | await conn.sendMessage(m.chat, { 19 | image: { 20 | url: 'https://i.imgur.com/JlxJmZQ.png' 21 | }, 22 | caption: 'Ecco come appare Eaglercraft! 👆', 23 | mentions: [m.sender] 24 | }, { quoted: m }); 25 | }, 1000); 26 | 27 | } catch (error) { 28 | console.error('Errore:', error); 29 | await conn.sendMessage(m.chat, { 30 | text: '❌ Errore nel mostrare il link. Riprova più tardi.' 31 | }, { quoted: m }); 32 | } 33 | } 34 | 35 | handler.help = ['minecraft']; 36 | handler.tags = ['games']; 37 | handler.command = ['minecraft', 'mc', 'eglercraft']; 38 | handler.premium = false; 39 | 40 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-bibbia.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const bibbiaPlugin = async (m, { conn, text, usedPrefix, command }) => { 4 | // Se non c’è testo, chiediamo a GPT un versetto casuale 5 | const prompt = text 6 | ? `Riporta il versetto biblico richiesto: "${text}". 7 | Formato di output richiesto: 8 | 9 | - - (traslitterazione) 10 | 11 | 12 | 13 | Rispondi solo con questo testo, senza altro.` 14 | : `Riporta un versetto biblico casuale in questo formato: 15 | 16 | - - (traslitterazione) 17 | 18 | 19 | 20 | Rispondi solo con questo testo, senza altro.`; 21 | 22 | try { 23 | await conn.sendPresenceUpdate('composing', m.chat); 24 | 25 | const res = await axios.post('https://luminai.my.id', { 26 | content: prompt, 27 | user: m.pushName || "utente", 28 | prompt: 'Rispondi sempre in italiano.', 29 | webSearchMode: false 30 | }); 31 | 32 | const verso = res.data.result; 33 | if (!verso) throw new Error("Nessuna risposta ricevuta."); 34 | 35 | return await conn.reply(m.chat, verso, m); 36 | } catch (err) { 37 | console.error('[❌ bibbiaPlugin]', err); 38 | return conn.reply(m.chat, '⚠️ Errore nel recupero del versetto. Usa un riferimento valido tipo Giovanni 3:16', m); 39 | } 40 | }; 41 | 42 | bibbiaPlugin.help = ['bibbia [riferimento]']; 43 | bibbiaPlugin.tags = ['fede', 'bibbia']; 44 | bibbiaPlugin.command = /^bibbia$/i; 45 | 46 | export default bibbiaPlugin; -------------------------------------------------------------------------------- /plugins/info-setig.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { conn, usedPrefix }) => { 2 | const sender = m.sender; 3 | const userData = global.db.data.users[sender]; 4 | 5 | if (!userData) { 6 | return conn.reply(m.chat, 'Errore: Utente specificato non trovato.', m); 7 | } 8 | 9 | // Comando per eliminare Instagram 10 | if (/^(\D|_)?eliminaig/i.test(m.text)) { 11 | if (!userData.instagram) { 12 | return conn.reply( 13 | m.chat, 14 | `ⓘ Assicurati di configurare il tuo nome utente Instagram con ${usedPrefix}setig prima di continuare.`, 15 | null, 16 | { quoted: m } 17 | ); 18 | } 19 | 20 | userData.instagram = undefined; 21 | return conn.reply( 22 | m.chat, 23 | 'ⓘ Nome Instagram eliminato con successo dal tuo profilo utente.', 24 | null, 25 | { quoted: m } 26 | ); 27 | } 28 | 29 | // Comando per impostare Instagram 30 | if (/^(\D|_)?setig/i.test(m.text)) { 31 | const parts = m.text.trim().split(' '); 32 | const instaName = parts[1]; 33 | 34 | if (!instaName) { 35 | return conn.reply( 36 | m.chat, 37 | 'ⓘ Usa .setig per impostare Instagram oppure .eliminaig per rimuoverlo.', 38 | null, 39 | { quoted: m } 40 | ); 41 | } 42 | 43 | userData.instagram = instaName.toLowerCase(); 44 | return conn.reply( 45 | m.chat, 46 | `ⓘ Hai impostato con successo il tuo nome Instagram come *${userData.instagram}*`, 47 | null, 48 | { quoted: m } 49 | ); 50 | } 51 | }; 52 | 53 | handler.command = /^(setig|eliminaig)$/i; 54 | export default handler; -------------------------------------------------------------------------------- /plugins/owner-resettanome.js: -------------------------------------------------------------------------------- 1 | function _0x20ad(_0x2d54c7,_0x509db5){const _0x1fa2c9=_0x1fa2();return _0x20ad=function(_0x20ada4,_0xfa079e){_0x20ada4=_0x20ada4-0x133;let _0x1c0e50=_0x1fa2c9[_0x20ada4];return _0x1c0e50;},_0x20ad(_0x2d54c7,_0x509db5);}const _0x537708=_0x20ad;(function(_0x2bdeee,_0x2a32cd){const _0x31b2a9=_0x20ad,_0x31679e=_0x2bdeee();while(!![]){try{const _0x4f2df3=parseInt(_0x31b2a9(0x143))/0x1+parseInt(_0x31b2a9(0x133))/0x2*(parseInt(_0x31b2a9(0x139))/0x3)+parseInt(_0x31b2a9(0x142))/0x4*(parseInt(_0x31b2a9(0x13d))/0x5)+-parseInt(_0x31b2a9(0x13a))/0x6+parseInt(_0x31b2a9(0x137))/0x7+parseInt(_0x31b2a9(0x144))/0x8+-parseInt(_0x31b2a9(0x13c))/0x9;if(_0x4f2df3===_0x2a32cd)break;else _0x31679e['push'](_0x31679e['shift']());}catch(_0x16b743){_0x31679e['push'](_0x31679e['shift']());}}}(_0x1fa2,0xa5d4b));const handler=async _0x33aa84=>{const _0x21ddee=_0x20ad,_0x33aaff=_0x33aa84[_0x21ddee(0x136)],_0x3d7e19=global['db'][_0x21ddee(0x13e)]['users'][_0x33aaff];if(/^(\D|_)resettanome/i[_0x21ddee(0x141)](_0x33aa84[_0x21ddee(0x134)]))return global['db']['data'][_0x21ddee(0x13f)]=undefined,_0x33aa84[_0x21ddee(0x138)](_0x21ddee(0x13b),null,_0x33aa84);};handler[_0x537708(0x140)]=/^(resettanome)$/i,handler[_0x537708(0x135)]=!![];function _0x1fa2(){const _0x5cab1f=['7197144oNgDmf','ⓘ\x20𝐈𝐥\x20𝐧𝐨𝐦𝐞\x20𝐝𝐞𝐥\x20𝐛𝐨𝐭\x20𝐞̀\x20𝐬𝐭𝐚𝐭𝐨\x20𝐫𝐞𝐬𝐞𝐭𝐭𝐚𝐭𝐨\x20𝐚\x20𝐪𝐮𝐞𝐥𝐥𝐨\x20𝐩𝐫𝐞𝐝𝐞𝐟𝐢𝐧𝐢𝐭𝐨','17439714wuFyVk','100ETysNG','data','nomedelbot','command','test','266380pjbKgz','551166wpwOUb','8306200gFZuyz','2FvcYkO','text','rowner','sender','1109185lgwzdN','reply','2210151MEDukg'];_0x1fa2=function(){return _0x5cab1f;};return _0x1fa2();}export default handler; -------------------------------------------------------------------------------- /plugins/tools-calcolatutto.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text }) => { 2 | let id = m.chat 3 | conn.math = conn.math ? conn.math : {} 4 | if (id in conn.math) { 5 | clearTimeout(conn.math[id][3]) 6 | delete conn.math[id] 7 | m.reply('.... ') 8 | } 9 | 10 | let val = text 11 | .replace(/[^0-9\-\/+*×÷πEe()piPI/]/g, '') 12 | .replace(/×/g, '*') 13 | .replace(/÷/g, '/') 14 | .replace(/π|pi/gi, 'Math.PI') 15 | .replace(/e/gi, 'Math.E') 16 | .replace(/\/+/g, '/') 17 | .replace(/\++/g, '+') 18 | .replace(/-+/g, '-') 19 | 20 | let format = val 21 | .replace(/Math\.PI/g, 'π') 22 | .replace(/Math\.E/g, 'e') 23 | .replace(/\//g, '÷') 24 | .replace(/\*/g, '×') 25 | 26 | try { 27 | console.log(val) 28 | let result = (new Function('return ' + val))() 29 | if (!result) throw result 30 | 31 | m.reply(`📊 *Risultato calcolo*\n\n` + 32 | `🔢 *Equazione:* ${format}\n` + 33 | `🧮 *Risultato:* _${result}_`) 34 | 35 | } catch (e) { 36 | if (e == undefined) { 37 | return m.reply('🚩 Inserisci un\'equazione valida.\n\nPuoi usare i simboli: +, -, *, /, ×, ÷, π, e, (, )') 38 | } 39 | return m.reply('Formato non valido. Sono consentiti solo numeri (0-9) e i simboli: +, -, *, /, ×, ÷, π, e, (, )') 40 | } 41 | } 42 | 43 | handler.help = ['calc '] 44 | handler.tags = ['utilità'] 45 | handler.command = ['cal', 'calc', 'calcola', 'calcolatrice'] 46 | handler.exp = 5 47 | handler.register = true 48 | export default handler -------------------------------------------------------------------------------- /plugins/fun-dox.js: -------------------------------------------------------------------------------- 1 | 2 | import {performance} from 'perf_hooks'; 3 | const handler = async (m, {conn, text}) => { 4 | const start = performance.now(); 5 | const end = performance.now(); 6 | const executionTime = (end - start); 7 | async function loading() { 8 | var hawemod = [ 9 | "Iniettando Malware", 10 | " █ 10%", 11 | " █ █ 20%", 12 | " █ █ █ 30%", 13 | " █ █ █ █ 40%", 14 | " █ █ █ █ █ 50%", 15 | " █ █ █ █ █ █ 60%", 16 | " █ █ █ █ █ █ █ 70%", 17 | " █ █ █ █ █ █ █ █ 80%", 18 | " █ █ █ █ █ █ █ █ █ 90%", 19 | " █ █ █ █ █ █ █ █ █ █ 100%", 20 | "Violazione del sistema in corso.. \n Connessione al server errore 404 ", 21 | "Dispositivo connesso con successo... \n Ricezione dati...", 22 | "Dati sottratti dal dispositivo 100% completato \n Eliminazione di tutte le prove ed eliminazione di tutti i malware...", 23 | " HACKING COMPLETATO ", 24 | " INVIO DEI LOG...", 25 | " DATI INVIATI CON SUCCESSO E Connessione disconnessa", 26 | "REGISTRI PULITI" 27 | ]; 28 | let { key } = await conn.sendMessage(m.chat, {text: `*☠ ¡¡Avvio del doxxing!! ☠*`}, {quoted: m}) 29 | for (let i = 0; i < hawemod.length; i++) { 30 | await new Promise(resolve => setTimeout(resolve, 1000)); 31 | await conn.sendMessage(m.chat, {text: hawemod[i], edit: key}, {quoted: m}); 32 | } 33 | } 34 | loading() 35 | }; 36 | handler.help = ['doxxing | <@tag>']; 37 | handler.tags = ['divertimento']; 38 | handler.command = ['dox'] 39 | handler.group = true 40 | 41 | 42 | export default handler; 43 | 44 | function getRandomValue(arr) { 45 | return arr[Math.floor(Math.random() * arr.length)]; 46 | } -------------------------------------------------------------------------------- /plugins/test1.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | let handler = async (m, { conn, usedPrefix, command, text }) => { 4 | // Ottieni utente menzionato o citato o autore del messaggio 5 | let user = m.mentionedJid?.[0] || m.quoted?.sender || m.sender; 6 | 7 | // Ottieni nome visibile 8 | let name = await conn.getName(user); 9 | let randomPercent = Math.floor(Math.random() * 100) + 1; // 1-100 10 | 11 | // Ottieni foto profilo 12 | let avatarUrl; 13 | try { 14 | avatarUrl = await conn.profilePictureUrl(user, 'image').catch(_ => null); 15 | if (!avatarUrl) throw new Error('No avatar'); 16 | } catch { 17 | avatarUrl = 'https://telegra.ph/file/6880771a42bad09dd6087.jpg'; // fallback 18 | } 19 | 20 | // Componi URL API 21 | const apiUrl = `https://api.siputzx.my.id/api/canvas/gay?nama=${encodeURIComponent(name)}&avatar=${encodeURIComponent(avatarUrl)}&num=${randomPercent}`; 22 | 23 | try { 24 | // Richiesta all'API 25 | const response = await axios.get(apiUrl, { 26 | responseType: 'arraybuffer', 27 | }); 28 | 29 | const buffer = Buffer.from(response.data, 'binary'); 30 | 31 | await conn.sendMessage(m.chat, { 32 | image: buffer, 33 | caption: `🌈 @${user.split('@')[0]} è gay al ${randomPercent}% �️‍🌈`, 34 | mentions: [user], 35 | }, { quoted: m }); 36 | 37 | } catch (e) { 38 | console.error('Error in gay command:', e); 39 | m.reply('❌ Errore durante la generazione dell\'immagine. Riprova più tardi.'); 40 | } 41 | }; 42 | 43 | handler.help = ['gay @utente']; 44 | handler.tags = ['fun']; 45 | handler.command = /^gay$/i; // Modificato da gayy a gay per maggiore compatibilità 46 | 47 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-listamici.js: -------------------------------------------------------------------------------- 1 | 2 | import { createHash } from 'crypto'; 3 | import PhoneNumber from 'awesome-phonenumber'; 4 | import fetch from 'node-fetch'; 5 | import fs from 'fs'; 6 | 7 | const handler = async (m, { conn, usedPrefix, command }) => { 8 | try { 9 | const mention = m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : m.sender; 10 | const who = mention || m.sender; 11 | 12 | if (!global.db.data.users) global.db.data.users = {}; 13 | if (!global.db.data.users[who]) global.db.data.users[who] = { amici: [] }; 14 | 15 | const user = global.db.data.users[who]; 16 | const friends = user.amici || []; 17 | 18 | const lastFriend = friends[friends.length - 1]; 19 | const lastFriendName = lastFriend ? lastFriend.split('@')[0] : 'Nessuno'; 20 | 21 | const friendList = friends.length > 0 22 | ? friends.map((friend, index) => `${index + 1}. @${friend.split('@')[0]}`).join('\n') 23 | : 'Nessuno'; 24 | 25 | const message = `📜 *Lista Amici di ${user.name && user.name.trim() !== '' ? user.name : 'Sconosciuto'}* 26 | ┌─────────────── 27 | │ 👤 *Ultimo Amico:* ${friends.length > 0 ? "@" + lastFriendName : 'Nessuno'} 28 | │ 29 | │ 👥 *Lista Completa:* 30 | ${friends.length > 0 ? friendList : '│ Nessuno complimenti lupo solitario'} 31 | └───────────────`; 32 | 33 | await conn.sendMessage(m.chat, { 34 | text: message, 35 | mentions: friends 36 | }, { quoted: m }); 37 | 38 | } catch (err) { 39 | console.error('Error in handler:', err); 40 | conn.reply(m.chat, "❌ Si è verificato un errore durante l'esecuzione del comando."); 41 | } 42 | }; 43 | 44 | handler.command = ['listamici']; 45 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-listanum_kicknum.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | let handler = async (m, { conn, args, groupMetadata, participants, usedPrefix, command, isBotAdmin, isSuperAdmin }) => { 4 | if (!args[0]) return 5 | if (isNaN(args[0])) return 6 | let lol = args[0].replace(/[+]/g, '') 7 | let ps = participants.map(u => u.id).filter(v => v !== conn.user.jid && v.startsWith(lol || lol)) 8 | let bot = global.db.data.settings[conn.user.jid] || {} 9 | if (ps == '') return 10 | let numeros = ps.map(v=> '◉ @' + v.replace(/@.+/, '')) 11 | const delay = time => new Promise(res=>setTimeout(res,time)); 12 | switch (command) { 13 | case "listanum": 14 | conn.reply(m.chat, `lista dei +${lol}:\n\n` + numeros.join`\n`, m, { mentions: ps }) 15 | break 16 | case "pulizia": 17 | if (!bot.restrict) return 18 | if (!isBotAdmin) return 19 | conn.reply(m.chat, `iniziando kick dei +${lol}`, m) 20 | let ownerGroup = m.chat.split`-`[0] + '@s.whatsapp.net' 21 | let users = participants.map(u => u.id).filter(v => v !== conn.user.jid && v.startsWith(lol || lol)) 22 | for (let user of users) { 23 | let error = `@${user.split("@")[0]} ha abbandonato` 24 | if (user !== ownerGroup + '@s.whatsapp.net' && user !== global.conn.user.jid && user !== global.owner + '@s.whatsapp.net' && user.startsWith(lol || lol) && user !== isSuperAdmin && isBotAdmin && bot.restrict) { 25 | await delay(500) 26 | let responseb = await conn.groupParticipantsUpdate(m.chat, [user], 'remove') 27 | if (responseb[0].status === "404") 28 | await delay(500) 29 | } else return } 30 | break 31 | }} 32 | handler.command = /^(listanum|kicknum|pulizia)$/i 33 | handler.group = handler.botAdmin = handler.admin = true 34 | handler.fail = null 35 | export default handler 36 | -------------------------------------------------------------------------------- /plugins/test2.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | let handler = async (m, { conn, text, usedPrefix, command }) => { 4 | const [courier, tracking] = text.split(' '); 5 | 6 | if (!courier || !tracking) { 7 | return m.reply(`❗ Usa il comando così:\n${usedPrefix + command} \nEsempio: ${usedPrefix + command} DHL 123456789`); 8 | } 9 | 10 | try { 11 | const options = { 12 | method: 'GET', 13 | url: 'https://trackingpackage.p.rapidapi.com/TrackingPackage', 14 | headers: { 15 | 'x-rapidapi-host': 'trackingpackage.p.rapidapi.com', 16 | Authorization: 'Basic Ym9sZGNoYXQ6TGZYfm0zY2d1QzkuKz9SLw==' 17 | }, 18 | params: { 19 | TrackingNumber: tracking, 20 | CourierCode: courier 21 | } 22 | }; 23 | 24 | const { data } = await axios.request(options); 25 | 26 | if (!data || !data.TrackingResults) return m.reply('❌ Nessun risultato trovato per questo tracking.'); 27 | 28 | const info = data.TrackingResults; 29 | let msg = `📦 *Tracking per ${courier.toUpperCase()}*\n\n`; 30 | msg += `🔍 Numero: ${tracking}\n`; 31 | msg += `📝 Stato: ${info.StatusDescription || 'Non disponibile'}\n`; 32 | msg += `📍 Posizione attuale: ${info.CurrentLocation || 'Non disponibile'}\n`; 33 | msg += `🕒 Ultimo aggiornamento: ${info.UpdatedTime || 'Non disponibile'}\n`; 34 | 35 | m.reply(msg); 36 | } catch (e) { 37 | console.error(e); 38 | m.reply('❌ Errore durante il recupero delle informazioni di tracking. Verifica i dati inseriti.'); 39 | } 40 | }; 41 | 42 | handler.help = ['track ']; 43 | handler.tags = ['tools']; 44 | handler.command = /^track$/i; 45 | 46 | export default handler; -------------------------------------------------------------------------------- /plugins/fun-ditalino.js: -------------------------------------------------------------------------------- 1 | import { performance } from "perf_hooks"; 2 | 3 | // Funzione per selezionare un elemento casuale da un array 4 | function pickRandom(array) { 5 | return array[Math.floor(Math.random() * array.length)]; 6 | } 7 | 8 | let handler = async (m, { conn, text }) => { 9 | let destinatario; 10 | 11 | // Se è una risposta a un messaggio 12 | if (m.quoted && m.quoted.sender) { 13 | destinatario = m.quoted.sender; 14 | } 15 | // Se ci sono utenti menzionati 16 | else if (m.mentionedJid && m.mentionedJid.length > 0) { 17 | destinatario = m.mentionedJid[0]; 18 | } 19 | // Se non c'è nulla 20 | else { 21 | return m.reply("Tagga qualcuno o rispondi a un messaggio per iniziare il ditalino."); 22 | } 23 | 24 | let nomeDestinatario = `@${destinatario.split('@')[0]}`; 25 | 26 | // Messaggi personalizzati 27 | let sequenza = [ 28 | `🤟🏻 Inizio una serie di ditalino per *${nomeDestinatario}*...`, 29 | "🤟🏻 Ci siamo quasi...", 30 | "👋🏻 Riparatevi dalla cascata!!" 31 | ]; 32 | 33 | // Invia i messaggi uno alla volta 34 | for (let msg of sequenza) { 35 | await m.reply(msg, null, { mentions: [destinatario] }); 36 | } 37 | 38 | // Calcolo del tempo 39 | let startTime = performance.now(); 40 | let endTime = performance.now(); 41 | let elapsedTime = (endTime - startTime).toFixed(2); 42 | 43 | let resultMessage = `✨ *${nomeDestinatario}* è venuta🥵! Sta spruzzando come una cozza dopo *${elapsedTime}ms*!`; 44 | 45 | conn.reply(m.chat, resultMessage, m, { mentions: [destinatario] }); 46 | }; 47 | 48 | handler.command = ["ditalino"]; 49 | handler.tags = ["fun"]; 50 | export default handler; -------------------------------------------------------------------------------- /plugins/owner-impostanome.js: -------------------------------------------------------------------------------- 1 | const _0x3cc527=_0x3659;function _0xd49e(){const _0x47f86b=['slice','trim','7jzlAFs','4108800kONENC','2474514sjmnZM','reply','802719SLqQBe','command','.impostanome','41620368klRVic','9458772TwpwKX','nomedelbot','2667112bWYkPn','split','ⓘ\x20𝐈𝐦𝐩𝐨𝐬𝐭𝐚\x20𝐢𝐥\x20𝐧𝐨𝐦𝐞\x20𝐝𝐞𝐥\x20𝐛𝐨𝐭\x20𝐝𝐨𝐩𝐨\x20𝐢𝐥\x20𝐜𝐨𝐦𝐚𝐧𝐝𝐨','313817EsZhOH','data'];_0xd49e=function(){return _0x47f86b;};return _0xd49e();}(function(_0x52db97,_0x4427a5){const _0x127455=_0x3659,_0x2a9433=_0x52db97();while(!![]){try{const _0x1a7c02=parseInt(_0x127455(0xd6))/0x1+-parseInt(_0x127455(0xcb))/0x2+-parseInt(_0x127455(0xcd))/0x3+-parseInt(_0x127455(0xd3))/0x4+-parseInt(_0x127455(0xca))/0x5+parseInt(_0x127455(0xd1))/0x6*(-parseInt(_0x127455(0xda))/0x7)+parseInt(_0x127455(0xd0))/0x8;if(_0x1a7c02===_0x4427a5)break;else _0x2a9433['push'](_0x2a9433['shift']());}catch(_0x37dfe5){_0x2a9433['push'](_0x2a9433['shift']());}}}(_0xd49e,0xe7165));const handler=async(_0x3f44e8,{conn:_0x595e05,usedPrefix:_0x516075})=>{const _0x12023b=_0x3659,_0x1e7eac=_0x3f44e8['text'][_0x12023b(0xd9)]()[_0x12023b(0xd4)]('\x20')[_0x12023b(0xd8)](0x1)['join']('\x20');if(_0x1e7eac!==''&&_0x1e7eac!==_0x12023b(0xcf))global['db'][_0x12023b(0xd7)][_0x12023b(0xd2)]=_0x1e7eac,_0x3f44e8[_0x12023b(0xcc)]('ⓘ\x20𝐈𝐥\x20𝐧𝐨𝐦𝐞\x20𝐝𝐞𝐥\x20𝐛𝐨𝐭\x20𝐞\x27\x20𝐬𝐭𝐚𝐭𝐨\x20𝐢𝐦𝐩𝐨𝐬𝐭𝐚𝐭𝐨\x20𝐢𝐧\x20\x20'+_0x1e7eac);else return _0x3f44e8[_0x12023b(0xcc)](_0x12023b(0xd5),null,_0x3f44e8);};handler[_0x3cc527(0xce)]=/^(impostanome)$/i,handler['rowner']=!![];function _0x3659(_0x453c90,_0x4f8e02){const _0xd49ea=_0xd49e();return _0x3659=function(_0x365967,_0x32eae7){_0x365967=_0x365967-0xca;let _0x1682b9=_0xd49ea[_0x365967];return _0x1682b9;},_0x3659(_0x453c90,_0x4f8e02);}export default handler; -------------------------------------------------------------------------------- /plugins/ai-riassunto.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const riassuntoPlugin = async (m, { conn, text, usedPrefix, command }) => { 4 | let input = text; 5 | if (!input && m.quoted) { 6 | input = m.quoted.text || m.quoted.body || ''; 7 | } 8 | 9 | if (!input || input.length < 20) { 10 | return conn.reply(m.chat, 11 | `❗ Usa il comando così:\n` + 12 | `${usedPrefix + command} \n` + 13 | `Oppure rispondi a un messaggio lungo con il comando ${usedPrefix + command}`, m); 14 | } 15 | 16 | if (input.length > 2500) { 17 | return conn.reply(m.chat, '❌ Il testo è troppo lungo. Limite massimo: 2500 caratteri.', m); 18 | } 19 | 20 | const prompt = ` 21 | Riassumi sinteticamente e chiaramente questo testo: 22 | 23 | ${input} 24 | 25 | Rispondi in italiano, in modo semplice e comprensibile. Usa un formato chiaro e pulito. 26 | `; 27 | 28 | try { 29 | await conn.sendPresenceUpdate('composing', m.chat); 30 | 31 | const res = await axios.post("https://luminai.my.id", { 32 | content: prompt, 33 | user: m.pushName || "utente", 34 | prompt: `Rispondi sempre in italiano.`, 35 | webSearchMode: false 36 | }); 37 | 38 | const risposta = res.data.result; 39 | if (!risposta) throw new Error("Risposta vuota dall'API."); 40 | 41 | return conn.reply(m.chat, `📚 *Riassunto:*\n\n${risposta}`, m); 42 | 43 | } catch (err) { 44 | console.error('[❌ riassunto plugin errore]', err); 45 | return conn.reply(m.chat, '⚠️ Errore durante la generazione del riassunto. Riprova più tardi.', m); 46 | } 47 | }; 48 | 49 | riassuntoPlugin.help = ['riassunto ']; 50 | riassuntoPlugin.tags = ['ai', 'utilità']; 51 | riassuntoPlugin.command = /^riassunto$/i; 52 | 53 | export default riassuntoPlugin; -------------------------------------------------------------------------------- /plugins/jadibot-stop.js: -------------------------------------------------------------------------------- 1 | import { readdirSync, rmdirSync, existsSync, promises as fs } from 'fs'; 2 | import path from 'path'; 3 | 4 | const handler = async (m, { conn, usedPrefix }) => { 5 | if (global.conn.user.jid !== conn.user.jid) { 6 | return conn.sendMessage(m.chat, {text: `ⓘ 𝐔𝐭𝐢𝐥𝐢𝐳𝐳𝐚 𝐪𝐮𝐞𝐬𝐭𝐨 𝐜𝐨𝐦𝐚𝐧𝐝𝐨 𝐝𝐢𝐫𝐞𝐭𝐭𝐚𝐦𝐞𝐧𝐭𝐞 𝐧𝐞𝐥 𝐧𝐮𝐦𝐞𝐫𝐨 𝐩𝐫𝐢𝐧𝐜𝐢𝐩𝐚𝐥𝐞 𝐝𝐞𝐥 𝐁𝐨𝐭.`}, {quoted: m}); 7 | } 8 | await conn.sendMessage(m.chat, {text: 'ⓘ 𝐄𝐥𝐢𝐦𝐢𝐧𝐚𝐳𝐢𝐨𝐧𝐞 𝐝𝐞𝐢 𝐬𝐮𝐛-𝐛𝐨𝐭𝐬 𝐢𝐧 𝐜𝐨𝐫𝐬𝐨...'}, {quoted: m}); 9 | const sessionPath = './jadibts/'; 10 | try { 11 | if (!existsSync(sessionPath)) { 12 | return await conn.sendMessage(m.chat, {text: `ⓘ 𝐋𝐚 𝐜𝐚𝐫𝐭𝐞𝐥𝐥𝐚 𝐣𝐚𝐝𝐢𝐛𝐭𝐬 𝐧𝐨𝐧 𝐞𝐬𝐢𝐬𝐭𝐞 𝐨 𝐞' 𝐯𝐮𝐨𝐭𝐚.`}, {quoted: m}); 13 | } 14 | const files = await fs.readdir(sessionPath); 15 | let dirsDeleted = 0; 16 | for (const file of files) { 17 | if (file !== 'creds.json') { 18 | await fs.rmdir(path.join(sessionPath, file), { recursive: true }); 19 | dirsDeleted++; 20 | } 21 | } 22 | if (dirsDeleted === 0) { 23 | await conn.sendMessage(m.chat, {text: `ⓘ 𝐍𝐨𝐧 𝐜𝐢 𝐬𝐨𝐧𝐨 𝐬𝐮𝐛-𝐛𝐨𝐭𝐬 ‼️`}, {quoted: m}); 24 | } else { 25 | await conn.sendMessage(m.chat, {text: `ⓘ 𝐒𝐨𝐧𝐨 𝐬𝐭𝐚𝐭𝐢 𝐞𝐥𝐢𝐦𝐢𝐧𝐚𝐭𝐢 𝐭𝐮𝐭𝐭𝐢 𝐢 𝐬𝐮𝐛-𝐛𝐨𝐭𝐬, 𝐫𝐢𝐚𝐯𝐯𝐢𝐚 𝐢𝐥 𝐛𝐨𝐭 𝐩𝐞𝐫 𝐫𝐞𝐧𝐝𝐞𝐫𝐞 𝐞𝐟𝐟𝐞𝐭𝐭𝐢𝐯𝐞 𝐥𝐞 𝐦𝐨𝐝𝐢𝐟𝐢𝐜𝐡𝐞`}, {quoted: m}); 26 | } 27 | } catch (err) { 28 | console.error('Errore', err); 29 | await conn.sendMessage(m.chat, {text: 'Errore'}, {quoted: m}); 30 | } 31 | }; 32 | 33 | handler.help = ['del_reg_in_session_owner']; 34 | handler.tags = ['owner']; 35 | handler.command = /^(stop|sdbots)$/i; 36 | handler.rowner = true; 37 | 38 | export default handler; 39 | -------------------------------------------------------------------------------- /plugins/owner-unbanuser.js: -------------------------------------------------------------------------------- 1 | let handler = async (message, { conn, text }) => { 2 | if (!text && !message.mentionedJid?.[0] && !message.quoted) { 3 | return conn.reply(message.chat, '❗ Tagga, rispondi o scrivi il numero (es: 3934xxxxxxx)', message); 4 | } 5 | 6 | let target; 7 | 8 | if (message.mentionedJid?.[0]) { 9 | target = message.mentionedJid[0]; 10 | } else if (message.quoted) { 11 | target = message.quoted.sender; 12 | } else if (text) { 13 | let number = text.replace(/\D/g, ''); 14 | if (number.length < 8) return conn.reply(message.chat, '❗ Numero non valido.', message); 15 | target = number + '@s.whatsapp.net'; 16 | } 17 | 18 | let users = global.db.data.users; 19 | if (!users[target]) users[target] = {}; 20 | users[target].banned = false; 21 | 22 | let fakeMsg = { 23 | key: { 24 | participants: "0@s.whatsapp.net", 25 | fromMe: false, 26 | id: "Halo" 27 | }, 28 | message: { 29 | locationMessage: { 30 | name: "Utente sbloccato", 31 | jpegThumbnail: await (await fetch("https://telegra.ph/file/592a9dbbe01cfaecbefb8.png")).buffer(), 32 | vcard: `BEGIN:VCARD 33 | VERSION:5.0 34 | N:;Unlimited;;; 35 | FN:Unlimited 36 | ORG:Unlimited 37 | TITLE: 38 | item1.TEL;waid=19709001746:+1 (970) 900-1746 39 | item1.X-ABLabel:Unlimited 40 | X-WA-BIZ-DESCRIPTION:ofc 41 | X-WA-BIZ-NAME:Unlimited 42 | END:VCARD` 43 | } 44 | }, 45 | participant: "0@s.whatsapp.net" 46 | }; 47 | 48 | conn.reply(message.chat, "✅ 𝐐𝐮𝐞𝐬𝐭𝐨 𝐮𝐭𝐞𝐧𝐭𝐞 𝐩𝐨𝐭𝐫𝐚' 𝐞𝐬𝐞𝐠𝐮𝐢𝐫𝐞 𝐝𝐢 𝐧𝐮𝐨𝐯𝐨 𝐢 𝐜𝐨𝐦𝐚𝐧𝐝𝐢", fakeMsg); 49 | }; 50 | 51 | handler.command = /^unbanuser|unban$/i; 52 | handler.rowner = true; 53 | 54 | export default handler; -------------------------------------------------------------------------------- /plugins/owner-banuser.js: -------------------------------------------------------------------------------- 1 | let handler = async (message, { conn, text, participants }) => { 2 | if (!text && !message.mentionedJid?.[0] && !message.quoted) { 3 | return conn.reply(message.chat, '❗ Per favore tagga un utente, rispondi a un messaggio o scrivi il numero di telefono (es: 3934xxxxxxx)', message); 4 | } 5 | 6 | let target; 7 | 8 | if (message.mentionedJid?.[0]) { 9 | target = message.mentionedJid[0]; 10 | } else if (message.quoted) { 11 | target = message.quoted.sender; 12 | } else if (text) { 13 | let number = text.replace(/\D/g, ''); 14 | if (number.length < 8) return conn.reply(message.chat, '❗ Numero non valido.', message); 15 | target = number + '@s.whatsapp.net'; 16 | } 17 | 18 | let users = global.db.data.users; 19 | if (!users[target]) users[target] = {}; 20 | users[target].banned = true; 21 | 22 | let fakeMsg = { 23 | key: { 24 | participants: "0@s.whatsapp.net", 25 | fromMe: false, 26 | id: "Halo" 27 | }, 28 | message: { 29 | locationMessage: { 30 | name: "Utente bloccato", 31 | jpegThumbnail: await (await fetch("https://telegra.ph/file/710185c7e0247662d8ca6.png")).buffer(), 32 | vcard: `BEGIN:VCARD 33 | VERSION:5.0 34 | N:;Unlimited;;; 35 | FN:Unlimited 36 | ORG:Unlimited 37 | TITLE: 38 | item1.TEL;waid=19709001746:+1 (970) 900-1746 39 | item1.X-ABLabel:Unlimited 40 | X-WA-BIZ-DESCRIPTION:ofc 41 | X-WA-BIZ-NAME:Unlimited 42 | END:VCARD` 43 | } 44 | }, 45 | participant: "0@s.whatsapp.net" 46 | }; 47 | 48 | conn.reply(message.chat, "✅ 𝐐𝐮𝐞𝐬𝐭𝐨 𝐮𝐭𝐞𝐧𝐭𝐞 è 𝐬𝐭𝐚𝐭𝐨 𝐛𝐥𝐨𝐜𝐜𝐚𝐭𝐨 𝐝𝐚𝐥 𝐛𝐨𝐭", fakeMsg); 49 | }; 50 | 51 | handler.command = /^banuser$/i; 52 | handler.rowner = true; 53 | 54 | export default handler; -------------------------------------------------------------------------------- /plugins/sticker-sticker.js: -------------------------------------------------------------------------------- 1 | import { sticker } from '../lib/sticker.js' 2 | import uploadFile from '../lib/uploadFile.js' 3 | import uploadImage from '../lib/uploadImage.js' 4 | import { webp2png } from '../lib/webp2mp4.js' 5 | 6 | let handler = async (m, { conn, args, usedPrefix, command }) => { 7 | let stiker = false 8 | try { 9 | let q = m.quoted ? m.quoted : m 10 | let mime = (q.msg || q).mimetype || q.mediaType || '' 11 | if (/webp|image|video/g.test(mime)) { 12 | if (/video/g.test(mime)) if ((q.msg || q).seconds > 9) return 13 | m.reply('ⓘ 𝐂𝐚𝐫𝐢𝐜𝐚𝐦𝐞𝐧𝐭𝐨 ...') 14 | let img = await q.download?.() 15 | 16 | if (!img) return 17 | 18 | let out 19 | try { 20 | stiker = await sticker(img, false, global.packname, global.author) 21 | } catch (e) { 22 | console.error(e) 23 | } finally { 24 | if (!stiker) { 25 | if (/webp/g.test(mime)) out = await webp2png(img) 26 | else if (/image/g.test(mime)) out = await uploadImage(img) 27 | else if (/video/g.test(mime)) out = await uploadFile(img) 28 | if (typeof out !== 'string') out = await uploadImage(img) 29 | stiker = sticker(false, out, global.packname, global.author) 30 | }} 31 | } else if (args[0]) { 32 | if (isUrl(args[0])) stiker = await sticker(false, args[0], global.packname, global.author) 33 | 34 | else return 35 | 36 | } 37 | } catch (e) { 38 | console.error(e) 39 | if (!stiker) stiker = e 40 | } finally { 41 | if (stiker) conn.sendFile(m.chat, stiker, 'sticker.webp', '', m) 42 | 43 | else return 44 | 45 | }} 46 | handler.help = ['stiker (caption|reply media)', 'stiker ', 'stikergif (caption|reply media)', 'stikergif '] 47 | handler.tags = ['sticker'] 48 | handler.command = /^s(tic?ker)?(gif)?(wm)?$/i 49 | export default handler 50 | 51 | const isUrl = (text) => { 52 | return text.match(new RegExp(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)(jpe?g|gif|png)/, 'gi'))} 53 | -------------------------------------------------------------------------------- /plugins/templateResponse.js: -------------------------------------------------------------------------------- 1 | const { proto, generateWAMessage, areJidsSameUser } = (await import('@chatunity/baileys')).default 2 | 3 | export async function all(m, chatUpdate) { 4 | if (m.isBaileys) return 5 | if (!m.message) return 6 | 7 | if (!(m.message.buttonsResponseMessage || m.message.templateButtonReplyMessage || m.message.listResponseMessage || m.message.interactiveResponseMessage)) { 8 | return 9 | } 10 | 11 | let id 12 | if (m.message.buttonsResponseMessage) { 13 | id = m.message.buttonsResponseMessage.selectedButtonId 14 | } else if (m.message.templateButtonReplyMessage) { 15 | id = m.message.templateButtonReplyMessage.selectedId 16 | } else if (m.message.listResponseMessage) { 17 | id = m.message.listResponseMessage.singleSelectReply?.selectedRowId 18 | } else if (m.message.interactiveResponseMessage) { 19 | try { 20 | id = JSON.parse(m.message.interactiveResponseMessage.nativeFlowResponseMessage.paramsJson).id 21 | } catch (e) { 22 | return 23 | } 24 | } 25 | 26 | if (!id) return 27 | 28 | console.log('🟢 Trasformazione bottone:', id) 29 | 30 | try { 31 | const fakeMsg = { 32 | key: { 33 | remoteJid: m.chat, 34 | fromMe: false, 35 | id: `FAKE-${Date.now()}`, 36 | participant: m.sender 37 | }, 38 | message: { 39 | conversation: id, 40 | extendedTextMessage: { 41 | text: id 42 | } 43 | }, 44 | messageTimestamp: Math.floor(Date.now() / 1000), 45 | pushName: m.pushName || m.name, 46 | participant: m.sender 47 | } 48 | 49 | console.log('🟢 Emissione evento per:', id) 50 | 51 | this.ev.emit('messages.upsert', { 52 | messages: [fakeMsg], 53 | type: 'notify' 54 | }) 55 | } catch (error) { 56 | console.error('❌ Errore trasformazione bottone:', error) 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /plugins/antitrava.js: -------------------------------------------------------------------------------- 1 | 2 | export async function before(m, { conn, isAdmin, isBotAdmin }) { 3 | if (m.isBaileys && m.fromMe) { 4 | return true; 5 | } 6 | if (!m.isGroup) { 7 | return false; 8 | } 9 | 10 | let chat = global.db.data.chats[m.chat] || {}; 11 | let bot = global.db.data.settings[this.user.jid] || {}; 12 | 13 | if (chat.antiTraba && m.text.length > 4000) { 14 | const name = await conn.getName(m.sender); 15 | 16 | if (isAdmin) { 17 | return await conn.sendMessage(m.chat, { 18 | text: `HEY] @${m.sender.split("@")[0]} PER CASO TI DIVERTI A MANDARE TRAVA QUI? CHE FORTUNA PER TE CHE SEI ADM. -.-!`, 19 | mentions: [m.sender] 20 | }); 21 | } 22 | 23 | if (isBotAdmin) { 24 | await conn.sendMessage(m.chat, { 25 | delete: { 26 | remoteJid: m.chat, 27 | fromMe: false, 28 | id: m.key.id, 29 | participant: m.key.participant 30 | } 31 | }); 32 | 33 | setTimeout(async () => { 34 | await conn.sendMessage(m.chat, { 35 | text: ` RILEVATO MESSAGGIO LUNGO (ANTI-TRAVA)\n\n• L'utente @${m.sender.split("@")[0]} ha inviato un messaggio troppo lungo e verrà rimosso.`, 36 | mentions: [m.sender] 37 | }); 38 | }, 0); 39 | 40 | setTimeout(async () => { 41 | await conn.groupParticipantsUpdate(m.chat, [m.sender], 'remove'); 42 | }, 1000); 43 | 44 | } else if (!bot.restrict) { 45 | return m.reply(' Non ho i permessi da amministratore per rimuovere chi invia trava.]'); 46 | } 47 | } 48 | 49 | return true; 50 | } 51 | -------------------------------------------------------------------------------- /plugins/gp-ricette.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const ricettaPlugin = async (m, { conn, text, usedPrefix, command }) => { 4 | if (!text) { 5 | return conn.reply(m.chat, `🍽️ Usa così:\n${usedPrefix + command} \nEsempio: *${usedPrefix + command} zucchine, patate*`, m); 6 | } 7 | 8 | const ingredienti = text.trim(); 9 | 10 | const prompt = ` 11 | Agisci come un assistente di cucina italiano. 12 | Suggerisci una ricetta **facile ma gustosa** usando questi ingredienti: ${ingredienti} 13 | 14 | ✦ Il formato deve essere chiaro e ordinato: 15 | 1. Nome della ricetta (creativo ma realistico) 16 | 2. Ingredienti (con quantità indicative) 17 | 3. Procedimento (max 5-6 passi, in stile conversazionale) 18 | 4. Dosi: per quante persone? 19 | 5. Tempo di preparazione 20 | 21 | ✦ Il tono deve essere amichevole e semplice. 22 | ✦ Rispondi **solo in italiano**, e usa emoji da cucina dove utile. 23 | 24 | Esempio stile: 25 | 🍝 *Pasta cremosa alle zucchine* 26 | 🧂 Ingredienti: ... 27 | 👨‍🍳 Procedimento: ... 28 | `; 29 | 30 | try { 31 | await conn.sendPresenceUpdate('composing', m.chat); 32 | 33 | const res = await axios.post("https://luminai.my.id", { 34 | content: prompt, 35 | user: m.pushName || "utente", 36 | prompt: `Rispondi sempre in italiano.`, 37 | webSearchMode: false 38 | }); 39 | 40 | const risposta = res.data.result; 41 | if (!risposta) throw new Error("Risposta vuota dall'API."); 42 | 43 | return conn.reply(m.chat, risposta, m); 44 | 45 | } catch (err) { 46 | console.error('[❌ ricetta plugin errore]', err); 47 | return conn.reply(m.chat, '⚠️ Errore nel generare la ricetta. Riprova tra poco!', m); 48 | } 49 | }; 50 | 51 | ricettaPlugin.help = ['ricetta ']; 52 | ricettaPlugin.tags = ['cucina', 'ai', 'utilità']; 53 | ricettaPlugin.command = /^ricetta$/i; 54 | 55 | export default ricettaPlugin; -------------------------------------------------------------------------------- /plugins/rpg-dona.js: -------------------------------------------------------------------------------- 1 | import MessageType from '@chatunity/baileys' 2 | 3 | let tassa = 0.02 // 2% di tassa sulle transazioni 4 | 5 | let handler = async (m, { conn, text }) => { 6 | let who 7 | if (m.isGroup) who = m.mentionedJid[0] // Se in gruppo, prende l'utente menzionato 8 | else who = m.chat // Se in privato, usa l'utente corrente 9 | 10 | if (!who) throw '🚩 𝚍𝚎𝚟𝚒 𝚖𝚎𝚗𝚣𝚒𝚘𝚗𝚊𝚛𝚎 𝚒𝚕 destinatario @user*' 11 | 12 | let txt = text.replace('@' + who.split`@`[0], '').trim() 13 | if (!txt) throw '🚩 𝚒𝚗𝚜𝚎𝚛𝚒𝚜𝚌𝚒 𝚕𝚊 𝚚𝚞𝚊𝚗𝚝𝚒𝚝𝚊 𝚍𝚒 💶 𝚞𝚗𝚒𝚝𝚢𝚌𝚘𝚒𝚗𝚜 𝚍𝚊 𝚝𝚛𝚊𝚜𝚏𝚎𝚛𝚒𝚛𝚎' 14 | if (isNaN(txt)) throw '𝚖𝚊 𝚑𝚘 𝚜𝚎𝚒 𝚏𝚛𝚘𝚌𝚒𝚘? 𝚜𝚌𝚛𝚒𝚟𝚒 𝚜𝚘𝚕𝚘 𝚗𝚞𝚖𝚎𝚛𝚒' 15 | 16 | let Unitycoins = parseInt(txt) 17 | let costo = Unitycoins 18 | let tassaImporto = Math.ceil(Unitycoins * tassa) 19 | costo += tassaImporto 20 | 21 | if (costo < 1) throw '🚩 𝚒𝚕 𝚖𝚒𝚗𝚒𝚖𝚘 𝚍𝚊 𝚝𝚛𝚊𝚜𝚏𝚛𝚒𝚛𝚎 𝚎 1 𝚞𝚗𝚒𝚝𝚢𝚌𝚘𝚒𝚗𝚜' 22 | let users = global.db.data.users 23 | if (costo > users[m.sender].limit) throw '𝚗𝚘𝚗 𝚑𝚊𝚒 𝚊𝚋𝚋𝚊𝚜𝚝𝚊𝚗𝚣𝚊 💶 𝚞𝚗𝚒𝚝𝚢𝚌𝚘𝚒𝚗𝚜 𝚙𝚎𝚛 𝚚𝚞𝚎𝚜𝚝𝚘 𝚝𝚛𝚊𝚜𝚏𝚎𝚛𝚒𝚖𝚎𝚗𝚝𝚘' 24 | 25 | // Esegui la transazione 26 | users[m.sender].limit -= costo 27 | users[who].limit += Unitycoins 28 | 29 | await m.reply(`*${-Unitycoins}* 💶 𝚞𝚗𝚒𝚝𝚢𝚌𝚘𝚒𝚗𝚜 30 | 𝚝𝚊𝚜𝚜𝚊 2% : *${-tassaImporto}* 💶 𝚝𝚊𝚜𝚜𝚊 𝚒𝚖𝚙𝚘𝚛𝚝o 31 | 𝚝𝚘𝚝𝚊𝚕𝚎 𝚊𝚍𝚍𝚎𝚋𝚒𝚝𝚘: *${-costo}* 💶 𝚞𝚗𝚒𝚝𝚢𝚌𝚘𝚒𝚗𝚜`) 32 | 33 | // Notifica il destinatario 34 | conn.fakeReply(m.chat, `*+${Unitycoins}* 💶 𝚞𝚗𝚒𝚝𝚢𝚌𝚘𝚒𝚗𝚜 𝚛𝚒𝚌𝚎𝚟𝚞𝚝𝚎!`, who, m.text) 35 | } 36 | 37 | handler.help = ['daiUnitycoins *@user *'] 38 | handler.tags = ['rpg'] 39 | handler.command = ['daiUnitycoins', 'bonifico', 'trasferisci','donauc'] 40 | handler.register = true 41 | 42 | export default handler 43 | -------------------------------------------------------------------------------- /plugins/tops.js: -------------------------------------------------------------------------------- 1 | import util from 'util' 2 | import path from 'path' 3 | 4 | let user = a => '@' + a.split('@')[0] 5 | 6 | function handler(m, { groupMetadata, command, conn, participants }) { 7 | let ps = groupMetadata.participants.map(v => v.id) 8 | let a = ps.getRandom() 9 | let b = ps.getRandom() 10 | let c = ps.getRandom() 11 | let d = ps.getRandom() 12 | let e = ps.getRandom() 13 | let f = ps.getRandom() 14 | let g = ps.getRandom() 15 | let h = ps.getRandom() 16 | let i = ps.getRandom() 17 | let j = ps.getRandom() 18 | 19 | if (command == 'topgays') { 20 | let vn = './media/gay2.mp3' 21 | let top = ` 22 | ⋆ ︵︵ ★ 🌈 TOP 10 LGBT 🌈 ★ ︵︵ ⋆ 23 | 24 | ꒷꒦ ✦ ୧・︶ : ︶ ꒷꒦ ‧₊ ୧ 25 | ୧ 1️⃣ ${user(a)} 26 | ୧ 2️⃣ ${user(b)} 27 | ୧ 3️⃣ ${user(c)} 28 | ୧ 4️⃣ ${user(d)} 29 | ୧ 5️⃣ ${user(e)} 30 | ୧ 6️⃣ ${user(f)} 31 | ୧ 7️⃣ ${user(g)} 32 | ୧ 8️⃣ ${user(h)} 33 | ୧ 9️⃣ ${user(i)} 34 | ୧ 🔟 ${user(j)} 35 | ꒷꒦ ✦ ୧・︶ : ︶ ꒷꒦ ‧₊ ୧ 36 | 37 | ╰♡꒷ ๑ ⋆˚₊⋆───ʚ˚ɞ───⋆˚₊⋆ ๑ ⪩ 38 | > Classifica casuale 39 | ╰♡꒷ ๑ ⋆˚₊⋆───ʚ˚ɞ───⋆˚₊⋆ ๑ ⪩ 40 | ` 41 | m.reply(top, null, { mentions: [a, b, c, d, e, f, g, h, i, j]}) 42 | conn.sendMessage(m.chat, { quoted: m }) 43 | } 44 | 45 | if (command == 'topnazi') { 46 | let vn = './media/otaku.mp3' 47 | let top = ` 48 | ⋆ ︵︵ ★ ⚡ TOP 10 NAZI ⚡ ★ ︵︵ ⋆ 49 | 50 | ꒷꒦ ✦ ୧・︶ : ︶ ꒷꒦ ‧₊ ୧ 51 | ୧ 1️⃣ ${user(a)} 52 | ୧ 2️⃣ ${user(b)} 53 | ୧ 3️⃣ ${user(c)} 54 | ୧ 4️⃣ ${user(d)} 55 | ୧ 5️⃣ ${user(e)} 56 | ୧ 6️⃣ ${user(f)} 57 | ୧ 7️⃣ ${user(g)} 58 | ୧ 8️⃣ ${user(h)} 59 | ୧ 9️⃣ ${user(i)} 60 | ୧ 🔟 ${user(j)} 61 | ꒷꒦ ✦ ୧・︶ : ︶ ꒷꒦ ‧₊ ୧ 62 | 63 | ╰♡꒷ ๑ ⋆˚₊⋆───ʚ˚ɞ───⋆˚₊⋆ ๑ ⪩ 64 | > Classifica casuale 65 | ╰♡꒷ ๑ ⋆˚₊⋆───ʚ˚ɞ───⋆˚₊⋆ ๑ ⪩ 66 | ` 67 | m.reply(top, null, { mentions: [a, b, c, d, e, f, g, h, i, j]}) 68 | conn.sendMessage(m.chat, { quoted: m }) 69 | } 70 | } 71 | 72 | handler.help = handler.command = ['topgays','topnazi'] 73 | handler.tags = ['games'] 74 | handler.group = true 75 | 76 | export default handler 77 | -------------------------------------------------------------------------------- /plugins/owner-podcast.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, isOwner, text }) => { 2 | if (!isOwner) return m.reply("❌ Solo l'owner può usare questo comando!"); 3 | 4 | // Usa il testo che l'owner inserisce dopo il comando o usa un messaggio predefinito se il testo è vuoto 5 | let customMessage = text || "Questo è un messaggio predefinito che sarà inviato ai gruppi."; 6 | 7 | let chats = Object.keys(conn.chats); // Ottiene tutte le chat 8 | let groups = chats.filter(chat => chat.endsWith('@g.us')); // Filtra solo i gruppi 9 | 10 | if (groups.length === 0) return m.reply("❌ Il bot non è in nessun gruppo!"); 11 | 12 | let hiddenTag = "‎"; // Carattere invisibile per il tag nascosto 13 | 14 | for (let group of groups) { 15 | let participants = (await conn.groupMetadata(group)).participants.map(u => u.id); 16 | let mentionedJids = participants.map(u => u.replace(/@s.whatsapp.net/g, '')); // Lista membri 17 | 18 | try { 19 | await conn.sendMessage(group, { 20 | text: ` 21 | 🌟 *Messaggio da ChatUnity* 🌟 22 | 23 | 👑 Cari membro del gruppo, è arrivato un nuovo messaggio da parte dell'owner: 24 | 25 | 📝 Testo del messaggio: 26 | ${customMessage} 27 | 28 | ✨ Tag dei membri: 29 | 30 | ${hiddenTag}${mentionedJids.map(jid => `@${jid}`).join(" ")}${hiddenTag} 31 | 32 | ⚠ Nota: Questo messaggio è stato inviato a tutti i membri del gruppo! 33 | 34 | 35 | > © ᴘᴏᴡᴇʀᴇᴅ ʙʏ ChatUnity 36 | 37 | ${hiddenTag} 38 | `, 39 | mentions: participants 40 | }); 41 | await new Promise(resolve => setTimeout(resolve, 2000)); // Pausa per evitare spam 42 | } catch (err) { 43 | console.error(`Errore nell'invio del messaggio a ${group}:`, err); 44 | } 45 | } 46 | 47 | m.reply(`✅ **Messaggio inviato con tag nascosto in ${groups.length} gruppi!**`); 48 | }; 49 | 50 | 51 | handler.command = /^everygroup$/i; 52 | handler.owner = true; 53 | handler.tags = ['owner']; 54 | export default handler; -------------------------------------------------------------------------------- /plugins/info-creatore.js: -------------------------------------------------------------------------------- 1 | import pkg from '@chatunity/baileys' 2 | const { generateWAMessageFromContent } = pkg 3 | 4 | let handler = async (m, { conn }) => { 5 | // vCard primo contatto 6 | let vcard1 = `BEGIN:VCARD 7 | VERSION:3.0 8 | FN: vale 9 | ORG: vale 10 | TEL;type=CELL;type=VOICE;waid=‪393773842461‬:‪+39 377 384 2461‬ 11 | END:VCARD` 12 | 13 | 14 | 15 | 16 | // primo invio -> entrambi i contatti insieme 17 | await conn.sendMessage(m.chat, { 18 | contacts: { 19 | displayName: "Owners", 20 | contacts: [ 21 | { vcard: vcard1 }, 22 | 23 | ] 24 | } 25 | }, { quoted: m }) 26 | 27 | // secondo invio -> messaggio CTA URL con più bottoni 28 | let msg = generateWAMessageFromContent(m.chat, { 29 | viewOnceMessage: { 30 | message: { 31 | interactiveMessage: { 32 | header: { title: "I miei social" }, 33 | body: { text: "Puoi contattarmi anche qua: 👇" }, 34 | footer: { text: nomebot }, 35 | nativeFlowMessage: { 36 | buttons: [ 37 | { 38 | name: "cta_url", 39 | buttonParamsJson: JSON.stringify({ 40 | display_text: "『 💻 』 GitHub", 41 | url: "https://github.com/chatunitycenter", 42 | merchant_url: "https://github.com/chatunitycenter" 43 | }) 44 | }, 45 | { 46 | name: "cta_url", 47 | buttonParamsJson: JSON.stringify({ 48 | display_text: "『 📸 』 Instagram", 49 | url: "https://instagram.com/yyktv.vale", 50 | merchant_url: "https://instagram.com/yyktv.vale" 51 | }) 52 | } 53 | ] 54 | } 55 | } 56 | } 57 | } 58 | }, { userJid: m.sender }) 59 | 60 | await conn.relayMessage(m.chat, msg.message, { messageId: msg.key.id }) 61 | } 62 | handler.help = ['owner'] 63 | handler.tags = ['main'] 64 | handler.command = ['creatore'] 65 | export default handler -------------------------------------------------------------------------------- /plugins/ai-img.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | 3 | var handler = async (m, { text, usedPrefix, command, conn }) => { 4 | if (!text) { 5 | await m.reply("Per favore, scrivi una descrizione per generare l'immagine."); 6 | return; 7 | } 8 | 9 | try { 10 | await conn.sendPresenceUpdate("composing", m.chat); 11 | await m.reply("> CREO IMMAGINE ...🔥"); 12 | 13 | let apiUrl; 14 | switch (command) { 15 | case "fluxai": 16 | case "immagine": 17 | case "flux": 18 | apiUrl = `https://api.siputzx.my.id/api/ai/flux?prompt=${encodeURIComponent(text)}`; 19 | break; 20 | case "stablediffusion": 21 | case "sdiffusion": 22 | case "immagine2": 23 | apiUrl = `https://api.siputzx.my.id/api/ai/stable-diffusion?prompt=${encodeURIComponent(text)}`; 24 | break; 25 | case "stabilityai": 26 | case "stability": 27 | case "immagine3": 28 | apiUrl = `https://api.siputzx.my.id/api/ai/stabilityai?prompt=${encodeURIComponent(text)}`; 29 | break; 30 | default: 31 | return m.reply("Comando non riconosciuto."); 32 | } 33 | 34 | const response = await axios.get(apiUrl, { responseType: "arraybuffer" }); 35 | if (!response || !response.data) { 36 | return m.reply("Errore: l'API non ha restituito un'immagine valida. Riprova più tardi."); 37 | } 38 | 39 | const imageBuffer = Buffer.from(response.data, "binary"); 40 | 41 | await conn.sendMessage(m.chat, { 42 | image: imageBuffer, 43 | caption: `💸 *Immagine generata da chatunity IA developed by onix & origin* 🚀\n✨ Prompt: *${text}*` 44 | }); 45 | } catch (error) { 46 | console.error("FluxAI Error:", error); 47 | await m.reply(`Si è verificato un errore: ${error.response?.data?.message || error.message || "Errore sconosciuto"}`); 48 | } 49 | }; 50 | 51 | handler.command = [ 52 | "fluxai", "flux", "immagine", 53 | "stablediffusion", "sdiffusion", "immagine2", 54 | "stabilityai", "stability", "immagine3" 55 | ]; 56 | 57 | export default handler; -------------------------------------------------------------------------------- /plugins/ai-immagini.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | 3 | var handler = async (m, { text, usedPrefix, command, conn }) => { 4 | if (!text) { 5 | await m.reply("Per favore, scrivi una descrizione per generare l'immagine."); 6 | return; 7 | } 8 | 9 | try { 10 | await conn.sendPresenceUpdate("composing", m.chat); 11 | await m.reply("> CREO IMMAGINE ...🔥"); 12 | 13 | let apiUrl; 14 | switch (command) { 15 | case "fluxai": 16 | case "immagine": 17 | case "flux": 18 | apiUrl = `https://api.siputzx.my.id/api/ai/flux?prompt=${encodeURIComponent(text)}`; 19 | break; 20 | case "stablediffusion": 21 | case "sdiffusion": 22 | case "immagine2": 23 | apiUrl = `https://api.siputzx.my.id/api/ai/stable-diffusion?prompt=${encodeURIComponent(text)}`; 24 | break; 25 | case "stabilityai": 26 | case "stability": 27 | case "immagine3": 28 | apiUrl = `https://api.siputzx.my.id/api/ai/stabilityai?prompt=${encodeURIComponent(text)}`; 29 | break; 30 | default: 31 | return m.reply("Comando non riconosciuto."); 32 | } 33 | 34 | const response = await axios.get(apiUrl, { responseType: "arraybuffer" }); 35 | if (!response || !response.data) { 36 | return m.reply("Errore: l'API non ha restituito un'immagine valida. Riprova più tardi."); 37 | } 38 | 39 | const imageBuffer = Buffer.from(response.data, "binary"); 40 | 41 | await conn.sendMessage(m.chat, { 42 | image: imageBuffer, 43 | caption: `💸 *Immagine generata da chatunity IA developed by onix & origin* 🚀\n✨ Prompt: *${text}*` 44 | }); 45 | } catch (error) { 46 | console.error("FluxAI Error:", error); 47 | await m.reply(`Si è verificato un errore: ${error.response?.data?.message || error.message || "Errore sconosciuto"}`); 48 | } 49 | }; 50 | 51 | handler.command = [ 52 | "fluxai", "flux", "immagine", 53 | "stablediffusion", "sdiffusion", "immagine2", 54 | "stabilityai", "stability", "immagine3" 55 | ]; 56 | 57 | export default handler; 58 | -------------------------------------------------------------------------------- /plugins/OWNER_off&on.js: -------------------------------------------------------------------------------- 1 | //Plugins fatto da Gabs333 Velocizzato 2 | import fs from 'fs' 3 | import path from 'path' 4 | 5 | const handler = async (m, { conn, args, command }) => { 6 | try { 7 | if (!args[0]) throw new Error('Scrivi il nome dello script, esempio: .offscript info'); 8 | 9 | let file = args[0].endsWith('.js') ? args[0] : args[0] + '.js'; 10 | const filePath = path.join('./plugins', file); 11 | 12 | if (!fs.existsSync(filePath)) throw new Error('File non trovato.'); 13 | 14 | let content = fs.readFileSync(filePath, 'utf-8'); 15 | 16 | if (command === 'offscript') { 17 | if (content.includes('/*') && content.includes('*/')) { 18 | throw new Error('Script è già spento.'); 19 | } 20 | 21 | const lines = content.split('\n'); 22 | const preservedLine = lines.find(line => line.includes('Plugin fatto da Gabs & 333 Staff')); 23 | const restLines = lines.filter(line => !line.includes('Plugin fatto da Gabs & 333 Staff')); 24 | const newContent = `${preservedLine || ''}\n/*\n${restLines.join('\n')}\n*/`; 25 | 26 | fs.writeFileSync(filePath, newContent); 27 | return m.reply(`Script ${file} spento.`); 28 | } 29 | 30 | if (command === 'onscript') { 31 | const newContent = content.replace(/^\/\*/gm, '').replace(/\*\/$/gm, ''); 32 | fs.writeFileSync(filePath, newContent.trim()); 33 | return m.reply(`Script ${file} riattivato.`); 34 | } 35 | 36 | } catch (e) { 37 | if (e.message && (e.message.includes('Scrivi il nome') || e.message.includes('File non') || e.message.includes('già spento'))) { 38 | return m.reply(e.message); 39 | } 40 | 41 | console.error('[SCRIPT_TOGGLE_ERROR]', e); 42 | return m.reply('Errore durante la modifica dello script.'); 43 | } 44 | }; 45 | 46 | handler.command = /^(offscript|onscript)$/i; 47 | handler.rowner = true; 48 | 49 | export default handler; -------------------------------------------------------------------------------- /plugins/fun-nomeninja.js: -------------------------------------------------------------------------------- 1 | function handler(m, { text }) { 2 | if (!text) return conn.sendMessage(m.chat, { 3 | text: `🚩 Inserisci il tuo nome accanto al comando.`, 4 | contextInfo: { 5 | forwardingScore: 99, 6 | isForwarded: true, 7 | forwardedNewsletterMessageInfo: { 8 | newsletterJid: '120363259442839354@newsletter', 9 | serverMessageId: '', 10 | newsletterName: 'ChatUnity' 11 | } 12 | } 13 | }, { quoted: m }); 14 | 15 | let teks = text ? text : m.quoted && m.quoted.text ? m.quoted.text : m.text; 16 | let ninjaName = teks.replace(/[a-z]/gi, v => { 17 | return { 18 | 'a': 'ka', 19 | 'b': 'tsu', 20 | 'c': 'mi', 21 | 'd': 'te', 22 | 'e': 'ku', 23 | 'f': 'hi', 24 | 'g': 'ji', 25 | 'h': 'ri', 26 | 'i': 'ki', 27 | 'j': 'zu', 28 | 'k': 'me', 29 | 'l': 'ta', 30 | 'm': 'rin', 31 | 'n': 'to', 32 | 'o': 'mo', 33 | 'p': 'no', 34 | 'q': 'ke', 35 | 'r': 'shi', 36 | 's': 'ari', 37 | 't': 'chi', 38 | 'u': 'do', 39 | 'v': 'ru', 40 | 'w': 'mei', 41 | 'x': 'na', 42 | 'y': 'fu', 43 | 'z': 'mori' 44 | }[v.toLowerCase()] || v; 45 | }); 46 | 47 | conn.sendMessage(m.chat, { 48 | text: ninjaName, 49 | contextInfo: { 50 | forwardingScore: 99, 51 | isForwarded: true, 52 | forwardedNewsletterMessageInfo: { 53 | newsletterJid: '120363259442839354@newsletter', 54 | serverMessageId: '', 55 | newsletterName: 'ChatUnity' 56 | } 57 | } 58 | }, { quoted: m }); 59 | } 60 | 61 | handler.help = ['nomeninja **']; 62 | handler.tags = ['fun']; 63 | handler.command = ['nomeninja']; 64 | handler.register = true; 65 | 66 | export default handler; -------------------------------------------------------------------------------- /plugins/combatti.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, participants, args }) => { 2 | global.db.data.users = global.db.data.users || {} 3 | let user1 = m.sender 4 | let mentionedJid = (m.mentionedJid && m.mentionedJid[0]) || '' 5 | if (!mentionedJid) return m.reply('⚔️ Tagga un utente per combattere!\n\nEsempio: *.combatti @utente*') 6 | 7 | let user2 = mentionedJid 8 | 9 | let p1 = global.db.data.users[user1]?.pokemons || [] 10 | let p2 = global.db.data.users[user2]?.pokemons || [] 11 | 12 | if (!p1.length) return m.reply('😓 Non hai Pokémon per combattere!') 13 | if (!p2.length) return m.reply('😓 Il tuo avversario non ha Pokémon per combattere!') 14 | 15 | let poke1 = pickRandom(p1) 16 | let poke2 = pickRandom(p2) 17 | 18 | let power1 = poke1.level + randBetween(-10, 10) 19 | let power2 = poke2.level + randBetween(-10, 10) 20 | 21 | let winner, loser, resultText 22 | 23 | if (power1 > power2) { 24 | winner = user1 25 | loser = user2 26 | resultText = `🏆 @${user1.split('@')[0]} vince il combattimento!` 27 | } else if (power2 > power1) { 28 | winner = user2 29 | loser = user1 30 | resultText = `🏆 @${user2.split('@')[0]} vince il combattimento!` 31 | } else { 32 | resultText = `🤝 Pareggio! Entrambi i Pokémon sono esausti.` 33 | } 34 | 35 | let battleText = ` 36 | ⚔️ *Combattimento Pokémon!* 37 | 38 | 👤 @${user1.split('@')[0]} ha scelto *${poke1.name}* (Lv. ${poke1.level}) 39 | 👤 @${user2.split('@')[0]} ha scelto *${poke2.name}* (Lv. ${poke2.level}) 40 | 41 | ${resultText} 42 | `.trim() 43 | 44 | await conn.sendMessage(m.chat, { text: battleText, mentions: [user1, user2] }, { quoted: m }) 45 | } 46 | 47 | handler.help = ['combatti @utente'] 48 | handler.tags = ['pokemon'] 49 | handler.command = /^combatti$/i 50 | 51 | export default handler 52 | 53 | function pickRandom(arr) { 54 | return arr[Math.floor(Math.random() * arr.length)] 55 | } 56 | 57 | function randBetween(min, max) { 58 | return Math.floor(Math.random() * (max - min + 1)) + min 59 | } 60 | -------------------------------------------------------------------------------- /plugins/owner-blacklist.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | 3 | // Percorso del file blacklist 4 | const path = './blacklist.json'; 5 | 6 | // Carica la blacklist 7 | let blacklist = fs.existsSync(path) ? JSON.parse(fs.readFileSync(path, 'utf-8')) : []; 8 | 9 | const handler = async (m, { conn, usedPrefix, text, isOwner }) => { 10 | if (!isOwner) return m.reply("❌ Solo l'owner può gestire la blacklist!"); 11 | 12 | let args = text.split(" "); 13 | let command = args[0]?.toLowerCase(); 14 | let number = args[1]?.replace(/[^0-9]/g, '') + '@s.whatsapp.net'; 15 | 16 | if (!command) { 17 | return m.reply(`⚠ *Usa il comando così:*\n\n${usedPrefix}blacklist add @utente\n${usedPrefix}blacklist remove @utente\n${usedPrefix}blacklist list`); 18 | } 19 | 20 | if (command === 'add') { 21 | if (!number) return m.reply("❌ Devi menzionare un utente!"); 22 | if (blacklist.includes(number)) return m.reply("⚠ L'utente è già in blacklist!"); 23 | 24 | blacklist.push(number); 25 | fs.writeFileSync(path, JSON.stringify(blacklist, null, 2)); 26 | return m.reply("✅ *Utente aggiunto alla blacklist!* 🚫"); 27 | } 28 | 29 | if (command === 'remove') { 30 | if (!number) return m.reply("❌ Devi menzionare un utente!"); 31 | if (!blacklist.includes(number)) return m.reply("⚠ L'utente non è in blacklist!"); 32 | 33 | blacklist = blacklist.filter(u => u !== number); 34 | fs.writeFileSync(path, JSON.stringify(blacklist, null, 2)); 35 | return m.reply("✅ *Utente rimosso dalla blacklist!*"); 36 | } 37 | 38 | if (command === 'list') { 39 | if (blacklist.length === 0) return m.reply("📃 La blacklist è vuota!"); 40 | 41 | let list = blacklist.map((u, i) => `${i + 1}. @${u.split('@')[0]}`).join("\n"); 42 | return conn.sendMessage(m.chat, { text: `📌 *Blacklist utenti:*\n\n${list}`, mentions: blacklist }, { quoted: m }); 43 | } 44 | 45 | return m.reply("❌ Comando non valido!"); 46 | }; 47 | 48 | handler.command = /^(blacklist)$/i; 49 | handler.owner = true; 50 | 51 | export default handler; -------------------------------------------------------------------------------- /plugins/ai-shazam.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import acrcloud from 'acrcloud' 3 | let acr = new acrcloud({ 4 | host: 'identify-eu-west-1.acrcloud.com', 5 | access_key: 'c33c767d683f78bd17d4bd4991955d81', 6 | access_secret: 'bvgaIAEtADBTbLwiPGYlxupWqkNGIjT7J9Ag2vIu' 7 | }) 8 | 9 | let handler = async (m) => { 10 | let q = m.quoted ? m.quoted : m 11 | let mime = (q.msg || q).mimetype || '' 12 | if (/audio|video/.test(mime)) { 13 | if ((q.msg || q).seconds > 20) return m.reply('╰⊱⚠️⊱ *ATTENZIONE | WARNING* ⊱⚠️⊱╮\n\nIl file che hai caricato è troppo grande, ti consigliamo di tagliare il file in un frammento più piccolo. 10-20 secondi di audio sono sufficienti per l\'identificazione') 14 | await conn.reply(m.chat, wait, m) 15 | let media = await q.download() 16 | let ext = mime.split('/')[1] 17 | fs.writeFileSync(`./tmp/${m.sender}.${ext}`, media) 18 | let res = await acr.identify(fs.readFileSync(`./tmp/${m.sender}.${ext}`)) 19 | let { code, msg } = res.status 20 | if (code !== 0) throw msg 21 | let { title, artists, album, genres, release_date } = res.metadata.music[0] 22 | let txt = ` 23 | RISULTATO DELLA RICERCA 24 | 25 | • 📌 TITOLO: ${title} 26 | • 👨‍🎤 ARTISTA: ${artists !== undefined ? artists.map(v => v.name).join(', ') : 'Non trovato'} 27 | • 💾 ALBUM: ${album.name || 'Non trovato'} 28 | • 🌐 GENERE: ${genres !== undefined ? genres.map(v => v.name).join(', ') : 'Non trovato'} 29 | • 📆 DATA DI PUBBLICAZIONE: ${release_date || 'Non trovato'} 30 | `.trim() 31 | fs.unlinkSync(`./tmp/${m.sender}.${ext}`) 32 | 33 | const messageOptions = { 34 | contextInfo: { 35 | forwardingScore: 1, 36 | isForwarded: true, 37 | forwardedNewsletterMessageInfo: { 38 | newsletterJid: '120363259442839354@newsletter', 39 | serverMessageId: '', 40 | newsletterName: `ChatUnity` 41 | }, 42 | } 43 | }; 44 | 45 | 46 | m.reply(txt, null, { ...messageOptions }) 47 | } else throw '╰⊱❗️⊱ *USO ERRATO* ⊱❗️⊱╮\n\nRISPONDI A UN AUDIO O VIDEO' 48 | } 49 | handler.command = /^shazam$/i 50 | export default handler -------------------------------------------------------------------------------- /lib/uploadFile.js: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch'; 2 | import {FormData, Blob} from 'formdata-node'; 3 | import {fileTypeFromBuffer} from 'file-type'; 4 | /** 5 | * Upload epheremal file to file.io 6 | * `Expired in 1 day` 7 | * `100MB Max Filesize` 8 | * @param {Buffer} buffer File Buffer 9 | */ 10 | const fileIO = async (buffer) => { 11 | const {ext, mime} = await fileTypeFromBuffer(buffer) || {}; 12 | const form = new FormData(); 13 | const blob = new Blob([buffer.toArrayBuffer()], {type: mime}); 14 | form.append('file', blob, 'tmp.' + ext); 15 | const res = await fetch('https://file.io/?expires=1d', { // 1 Day Expiry Date 16 | method: 'POST', 17 | body: form, 18 | }); 19 | const json = await res.json(); 20 | if (!json.success) throw json; 21 | return json.link; 22 | }; 23 | 24 | /** 25 | * Upload file to storage.restfulapi.my.id 26 | * @param {Buffer|ReadableStream|(Buffer|ReadableStream)[]} inp File Buffer/Stream or Array of them 27 | * @return {string|null|(string|null)[]} 28 | */ 29 | const RESTfulAPI = async (inp) => { 30 | const form = new FormData(); 31 | let buffers = inp; 32 | if (!Array.isArray(inp)) buffers = [inp]; 33 | for (const buffer of buffers) { 34 | const blob = new Blob([buffer.toArrayBuffer()]); 35 | form.append('file', blob); 36 | } 37 | const res = await fetch('https://storage.restfulapi.my.id/upload', { 38 | method: 'POST', 39 | body: form, 40 | }); 41 | let json = await res.text(); 42 | try { 43 | json = JSON.parse(json); 44 | if (!Array.isArray(inp)) return json.files[0].url; 45 | return json.files.map((res) => res.url); 46 | } catch (e) { 47 | throw json; 48 | } 49 | }; 50 | 51 | /** 52 | * Upload file to various services 53 | * @param {Buffer} inp 54 | * @return {Promise} 55 | */ 56 | const uploadFile = async (inp) => { 57 | let err = false; 58 | for (const upload of [RESTfulAPI, fileIO]) { 59 | try { 60 | return await upload(inp); 61 | } catch (e) { 62 | err = e; 63 | } 64 | } 65 | if (err) throw err; 66 | return null; 67 | }; 68 | 69 | export default uploadFile; 70 | -------------------------------------------------------------------------------- /plugins/fun-minaccia.js: -------------------------------------------------------------------------------- 1 | const handler = async (m, { 2 | conn, text, 3 | }) => { 4 | if (!m.isGroup) { 5 | throw ''; 6 | } 7 | const gruppi = global.db.data.chats[m.chat]; 8 | if (gruppi.spacobot === false) { 9 | throw ''; 10 | } 11 | const menzione = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : text; 12 | if (!menzione) throw 'Chi vuoi minacciare?'; 13 | 14 | const message = `@${menzione.split`@`[0]} ${pickRandom(['spaco botilia e ti amazo familia', 'ti farò guardare Milley Cyrus 24/7', 'ti infilo una mano in culo, ti sfilo la spina dorsale e la uso per frustarti', 'ti do un calcio in culo così forte che rimane dentro la scarpa', 'ti inculo con sabbia, sale, e cocci di vetro', 'ti do mezza ora di schiaffi in cinque minuti', 'ti faccio inculare dai negri sordi, così quanno dici basta non ti sentono', 'ti smonto e do fuoco alle istruzioni', 'ti metto un dito in bocca, uno nel culo e ti sciaqquo come una damigiana', 'ti do un calcio che ti mando le palle a far salotto con le tonsille', 'ti infilo un bastone nel culo e ti sventolo come na bandiera', 'ti piglio per le orecchie e ti scarto come una golia', 'ti stacco le palle e le appendo all albero di natale', 'ti stacco le braccia e le uso per menarti', 'ti faccio due occhi neri che se te metti a masticare il bambù il WWF te protegge'])}`; 15 | const messageOptions = { 16 | contextInfo: { 17 | forwardingScore: 1, 18 | isForwarded: true, 19 | forwardedNewsletterMessageInfo: { 20 | newsletterJid: '120363259442839354@newsletter', 21 | serverMessageId: '', 22 | newsletterName: `ChatUnity` 23 | }, 24 | } 25 | }; 26 | 27 | // Invia il messaggio con le menzioni e le opzioni 28 | m.reply(message, null, { mentions: [menzione], ...messageOptions }); 29 | }; 30 | 31 | handler.command = /^\minaccia$/i; // Modifica per accettare solo il comando `.minaccia` 32 | export default handler; 33 | 34 | function pickRandom(list) { 35 | return list[Math.floor(Math.random() * list.length)]; 36 | } 37 | -------------------------------------------------------------------------------- /plugins/fun-infame.js: -------------------------------------------------------------------------------- 1 | const handler = async (msg, { client, conn }) => { 2 | const percent = Math.floor(Math.random() * 101); 3 | 4 | if (!conn?.sendMessage) throw new Error("Bro, manca il conn 😒"); 5 | 6 | // Frasi da social media (no cringe boomer) 🔥 7 | const savageReactions = [ 8 | `🧢 *"Nah, sei pulito"* (ma sotto il ${percent}% sei un po' sospetto...)`, 9 | `👀 *"Fra, ma sei la pecora nera della chat?"*`, 10 | `💀 *"Sei il motivo per cui le nonne nascondono il portafoglio"*`, 11 | `🤡 *"Se l'infamia fosse un TikTok, saresti virale"*`, 12 | `🚓 *"Polizia locale? No, DITTATORIALE con sto livello"*`, 13 | `🤑 *"Se rubassi come infami, saresti Jeff Bezos"*`, 14 | `📸 *"Sei lo screenshot che non dovevi fare"*`, 15 | `🔥 *"Hai più scheletri nell'armadio che followers"*` 16 | ]; 17 | 18 | const randomSavage = savageReactions[Math.floor(Math.random() * savageReactions.length)]; 19 | 20 | let response = `📊 *TEST INFAME-Z* 📊\n\n` + 21 | `👤 *Il tuo livello di infame:* **${percent}%**\n` + 22 | `${percent > 80 ? "🚨 *SEI L'ADMIN DEGLI SBIRRI!* 🚨" : percent > 50 ? "😎 *Sei nella zona pericolosa...*" : "🧼 *Pulito... forse.*"}\n\n` + 23 | `${randomSavage}`; 24 | 25 | await conn.sendMessage( 26 | msg.chat, 27 | { 28 | text: response, 29 | mentions: [msg.sender], 30 | contextInfo: { 31 | forwardingScore: 999, 32 | isForwarded: true, 33 | externalAdReply: { 34 | title: "⚠️ Sei stato GIOBATO ⚠️", 35 | body: "Risultati ufficiali (e inappellabili)", 36 | thumbnail: Buffer.alloc(0) // Puoi aggiungere un'immagine qui 37 | } 38 | } 39 | }, 40 | { quoted: msg } 41 | ); 42 | }; 43 | 44 | handler.command = ['infame', 'quantosbirro', 'sbirrocheck']; 45 | handler.tags = ['social']; 46 | handler.help = ['infame @user', 'quantosbirro (scopri quanto sei infame)']; 47 | export default handler; -------------------------------------------------------------------------------- /plugins/info-owner2.js: -------------------------------------------------------------------------------- 1 | const _0x393e08=_0x5986;(function(_0x97d674,_0x370265){const _0x44dcee=_0x5986,_0x13bb36=_0x97d674();while(!![]){try{const _0x1f0a56=-parseInt(_0x44dcee(0x127))/0x1+-parseInt(_0x44dcee(0x130))/0x2*(parseInt(_0x44dcee(0x12f))/0x3)+parseInt(_0x44dcee(0x11c))/0x4*(parseInt(_0x44dcee(0x11a))/0x5)+-parseInt(_0x44dcee(0x129))/0x6+parseInt(_0x44dcee(0x128))/0x7*(parseInt(_0x44dcee(0x12d))/0x8)+-parseInt(_0x44dcee(0x11f))/0x9*(parseInt(_0x44dcee(0x11e))/0xa)+parseInt(_0x44dcee(0x120))/0xb;if(_0x1f0a56===_0x370265)break;else _0x13bb36['push'](_0x13bb36['shift']());}catch(_0x5bfc75){_0x13bb36['push'](_0x13bb36['shift']());}}}(_0x581f,0x51488));function handler(_0x57ffa3){const _0xc6befa=_0x5986;let _0x2507ec={'key':{'participants':_0xc6befa(0x12a),'fromMe':![],'id':_0xc6befa(0x122)},'message':{'extendedTextMessage':{'text':_0xc6befa(0x119),'vcard':_0xc6befa(0x118)}},'participant':_0xc6befa(0x12a)};const _0xc06d49=global[_0xc6befa(0x11d)][_0xc6befa(0x124)](([_0x38ba61,_0x437c83])=>_0x38ba61&&_0x437c83);this[_0xc6befa(0x121)](_0x57ffa3[_0xc6befa(0x12c)],_0xc06d49[_0xc6befa(0x125)](([_0x42018f,_0x1302d8])=>[_0x42018f,_0x1302d8]),_0x2507ec);}handler[_0x393e08(0x12b)]=[_0x393e08(0x11d)],handler[_0x393e08(0x12e)]=[_0x393e08(0x11b)],handler['command']=['owner',_0x393e08(0x123),_0x393e08(0x126),'fgowner'];function _0x581f(){const _0x28a297=['2403618kkIOrP','0@s.whatsapp.net','help','chat','6696iPmJHW','tags','3zdkLgp','452024pPdPzc','BEGIN:VCARD\x0aVERSION:3.0\x0aN:;Unlimited;;;\x0aFN:Unlimited\x0aORG:Unlimited\x0aTITLE:\x0aitem1.TEL;waid=19709001746:+1\x20(970)\x20900-1746\x0aitem1.X-ABLabel:Unlimited\x0aX-WA-BIZ-DESCRIPTION:ofc\x0aX-WA-BIZ-NAME:Unlimited\x0aEND:VCARD','𝐎𝐰𝐧𝐞𝐫\x20𝐂𝐡𝐚𝐭𝐔𝐧𝐢𝐭𝐲','27085DXPJcB','main','440ADyhZU','owner','1790CNRxOe','8739PPFDwZ','7873184bSpQbi','sendContact','Halo','creador','filter','map','dueño','619353jwuibX','3689kioSZg'];_0x581f=function(){return _0x28a297;};return _0x581f();}function _0x5986(_0x43946b,_0x3487ed){const _0x581f4e=_0x581f();return _0x5986=function(_0x59861f,_0x3b2401){_0x59861f=_0x59861f-0x118;let _0x9a00c6=_0x581f4e[_0x59861f];return _0x9a00c6;},_0x5986(_0x43946b,_0x3487ed);}export default handler; 2 | -------------------------------------------------------------------------------- /plugins/rpg-rubaxp.js: -------------------------------------------------------------------------------- 1 | const limiteXP = 3000; // Massimo XP rubabile 2 | 3 | const handler = async (m, {conn, usedPrefix, command}) => { 4 | // Controllo tempo di attesa 5 | const tempoAttesa = global.db.data.users[m.sender].ultimoFurto + 7200000; // 2 ore 6 | if (new Date() - global.db.data.users[m.sender].ultimoFurto < 7200000) { 7 | return conn.reply(m.chat, 8 | `⏳ ᴅᴇᴠɪ ᴀsᴘᴇᴛᴛᴀʀᴇ ᴀɴᴄᴏʀᴀ ${formattaTempo(tempoAttesa - new Date())} ᴘʀɪᴍᴀ ᴅɪ ʀᴜʙᴀʀᴇ ᴀɴᴄᴏʀᴀ`, 9 | m 10 | ); 11 | } 12 | 13 | // Identifica l'utente target 14 | let target; 15 | if (m.isGroup) { 16 | target = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : false; 17 | } else { 18 | target = m.chat; 19 | } 20 | 21 | // Verifiche target 22 | if (!target) return conn.reply(m.chat, `📍 ᴅᴇᴠɪ ᴛᴀɢɢᴀʀᴇ ɪʟ ғʀᴏᴄɪᴏ!`, m); 23 | if (!(target in global.db.data.users)) { 24 | return conn.reply(m.chat, `⚠️ ᴜᴛᴇɴᴛᴇ ɴᴏɴ ᴛʀᴏᴠᴀᴛᴏ ɴᴇʟ ᴅᴀᴛᴀʙᴀsᴇ`, m); 25 | } 26 | 27 | // Calcolo furto 28 | const user = global.db.data.users[target]; 29 | const xpRubati = Math.floor(Math.random() * limiteXP); 30 | 31 | if (user.exp < xpRubati) { 32 | return conn.reply(m.chat, 33 | `😢 @${target.split('@')[0]} ʜᴀ ᴍᴇɴᴏ ᴅɪ *${limiteXP} XP*\nɴᴏɴ ʀᴜʙᴀʀᴇ ʜᴀɪ ᴘᴏᴠᴇʀɪ ғʀᴏᴄɪᴏ`, 34 | m, 35 | { mentions: [target] } 36 | ); 37 | } 38 | 39 | // Esecuzione furto 40 | global.db.data.users[m.sender].exp += xpRubati; 41 | global.db.data.users[target].exp -= xpRubati; 42 | 43 | await conn.reply(m.chat, 44 | `💰 ʜᴀɪ ʀᴜʙᴀᴛᴏ ${xpRubati} XP ᴀ @${target.split('@')[0]}!`, 45 | m, 46 | { mentions: [target] } 47 | ); 48 | 49 | global.db.data.users[m.sender].ultimoFurto = new Date().getTime(); 50 | }; 51 | 52 | // Funzione formattazione tempo 53 | function formattaTempo(durata) { 54 | const secondi = Math.floor((durata / 1000) % 60); 55 | const minuti = Math.floor((durata / (1000 * 60)) % 60); 56 | const ore = Math.floor((durata / (1000 * 60 * 60)) % 24); 57 | 58 | return `${ore} Ora(e) ${minuti} Minuto(i) ${secondi} Secondo(i)`; 59 | } 60 | 61 | handler.help = ['rubaxp']; 62 | handler.tags = ['rpg']; 63 | handler.command = ['rubaxp']; 64 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-infoanimali.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const infoAnimalePlugin = async (m, { conn, text, usedPrefix, command }) => { 4 | if (!text) { 5 | return conn.reply(m.chat, `﹒⋆❛ ${usedPrefix + command} \n❥ Per favore indica un animale di cui vuoi informazioni!\nEsempio: *${usedPrefix + command} fennec*`, m); 6 | } 7 | 8 | const animale = text.trim(); 9 | 10 | const prompt = ` 11 | Crea una scheda informativa decorata e leggibile per l'animale "*${animale}*". 12 | 13 | ❥ Il tono deve essere divulgativo ma leggero. Usa simboli estetici ma non esagerati. 14 | ❥ Rispondi sempre in italiano. 15 | ❥ Il formato deve essere **esattamente** questo (modifica solo i dati reali, non lo stile): 16 | 17 | ★·.·´¯\`·.·★ ⟡ ˚。⋆『 ˗ˏˋ ${animale.toUpperCase()} ˎˊ˗ 』⋆。˚⟡ ★·.·´¯\`·.·★ 18 | 19 | 🦊 *Nome comune:* ${animale} 20 | 📚 *Nome scientifico:* (es. Vulpes vulpes) 21 | 🌍 *Habitat:* (es. Foreste temperate, deserti, savane...) 22 | 🍽️ *Dieta:* (erbivoro, onnivoro, carnivoro – dettaglia con esempi) 23 | 📏 *Dimensioni:* (lunghezza/peso medio) 24 | 🧠 *Comportamento:* (solitario, sociale, notturno, ecc.) 25 | 🎨 *Caratteristiche:* (es. pelo, becco, artigli, dentatura...) 26 | 27 | ╭─❍ 『 💫 』 *CURIOSITÀ* 28 | │• Inserisci 2-3 curiosità interessanti e brevi 29 | ╰─────────────── 30 | 𖦹﹒✧・゚゚・:*:・゚✧﹒𖦹 31 | `; 32 | 33 | try { 34 | await conn.sendPresenceUpdate('composing', m.chat); 35 | const res = await axios.post("https://luminai.my.id", { 36 | content: prompt, 37 | user: m.pushName || "utente", 38 | prompt: `Rispondi sempre in italiano.`, 39 | webSearchMode: false 40 | }); 41 | 42 | const risposta = res.data.result; 43 | if (!risposta) throw new Error("Risposta vuota dall'API."); 44 | 45 | return await conn.reply(m.chat, risposta, m); 46 | 47 | } catch (err) { 48 | console.error('[❌ infoanimale plugin errore]', err); 49 | return await conn.reply(m.chat, '⚠️ Errore durante l’elaborazione della scheda animale. Riprova più tardi.', m); 50 | } 51 | }; 52 | 53 | infoAnimalePlugin.help = ['infoanimale ']; 54 | infoAnimalePlugin.tags = ['animali', 'ai', 'divulgazione']; 55 | infoAnimalePlugin.command = /^infoanimale$/i; 56 | 57 | export default infoAnimalePlugin; -------------------------------------------------------------------------------- /plugins/owner-resetgruppi.js: -------------------------------------------------------------------------------- 1 | const _0x51e3a0=_0x3fc5;(function(_0x57d2fa,_0x29af65){const _0x4b3aa8=_0x3fc5,_0x4b1dce=_0x57d2fa();while(!![]){try{const _0x47122a=parseInt(_0x4b3aa8(0x1d3))/0x1*(-parseInt(_0x4b3aa8(0x1cf))/0x2)+parseInt(_0x4b3aa8(0x1d0))/0x3*(-parseInt(_0x4b3aa8(0x1ca))/0x4)+parseInt(_0x4b3aa8(0x1c0))/0x5*(-parseInt(_0x4b3aa8(0x1c9))/0x6)+parseInt(_0x4b3aa8(0x1c3))/0x7*(-parseInt(_0x4b3aa8(0x1d2))/0x8)+parseInt(_0x4b3aa8(0x1c2))/0x9+-parseInt(_0x4b3aa8(0x1cc))/0xa*(-parseInt(_0x4b3aa8(0x1c1))/0xb)+parseInt(_0x4b3aa8(0x1c4))/0xc*(parseInt(_0x4b3aa8(0x1cb))/0xd);if(_0x47122a===_0x29af65)break;else _0x4b1dce['push'](_0x4b1dce['shift']());}catch(_0x4f362b){_0x4b1dce['push'](_0x4b1dce['shift']());}}}(_0xcc18,0x8071e));const handler=async(_0x2682b5,{conn:_0x1d78bd,usedPrefix:_0x412c7c})=>{const _0x5cc6a4=_0x3fc5,_0x4177f3=_0x2682b5[_0x5cc6a4(0x1d5)],_0x42eef9=global['db'][_0x5cc6a4(0x1d1)][_0x5cc6a4(0x1c5)][_0x4177f3];if(!_0x42eef9)return _0x1d78bd[_0x5cc6a4(0x1cd)](_0x2682b5[_0x5cc6a4(0x1c6)],_0x5cc6a4(0x1ce));if(/^(\D|_)resetgruppi/i[_0x5cc6a4(0x1c8)](_0x2682b5['text'])){const _0x17b3fc=_0x2682b5['mentionedJid'][0x0];if(!_0x17b3fc)return _0x42eef9[_0x5cc6a4(0x1bf)]=undefined,_0x1d78bd[_0x5cc6a4(0x1cd)](_0x2682b5[_0x5cc6a4(0x1c6)],_0x5cc6a4(0x1c7),null,{'quoted':_0x2682b5});return global['db']['data'][_0x5cc6a4(0x1c5)][_0x17b3fc][_0x5cc6a4(0x1bf)]=undefined,_0x1d78bd[_0x5cc6a4(0x1cd)](_0x2682b5[_0x5cc6a4(0x1c6)],'ⓘ\x20Gruppi\x20resettati\x20con\x20successo\x20per\x20l\x27utente\x20taggato.',null,{'quoted':_0x2682b5});}};handler['command']=/^(resetgruppi)$/i,handler[_0x51e3a0(0x1d4)]=!![];function _0x3fc5(_0x4a7a6f,_0x335852){const _0xcc1803=_0xcc18();return _0x3fc5=function(_0x3fc5a8,_0xe680cb){_0x3fc5a8=_0x3fc5a8-0x1bf;let _0x25f16e=_0xcc1803[_0x3fc5a8];return _0x25f16e;},_0x3fc5(_0x4a7a6f,_0x335852);}export default handler;function _0xcc18(){const _0x32a068=['2217gjCsku','data','8NpGBbl','109haYEiG','rowner','sender','gruppiincuieadmin','70wUkNQC','10336689ytvMeq','1429938Mcbjrw','3064117lyWNyF','12jWCCXX','users','chat','ⓘ\x20I\x20tuoi\x20gruppi\x20sono\x20stati\x20resettati\x20con\x20successo.','test','109842zJDoEf','2168IqNxQe','12990874WXtfbh','10CUlnYr','reply','Errore:\x20Utente\x20specificato\x20non\x20trovato.','8756abLCKy'];_0xcc18=function(){return _0x32a068;};return _0xcc18();} -------------------------------------------------------------------------------- /plugins/rpg-mina.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs/promises' 2 | import path from 'path' 3 | 4 | const dbPath = path.resolve('./xp-counter.json') 5 | let cooldowns = {} 6 | 7 | // Funzioni di gestione DB 8 | async function readDB() { 9 | try { 10 | const data = await fs.readFile(dbPath, 'utf-8') 11 | return JSON.parse(data) 12 | } catch (e) { 13 | if (e.code === 'ENOENT') { 14 | await fs.writeFile(dbPath, '{}', 'utf-8') 15 | return {} 16 | } else throw e 17 | } 18 | } 19 | 20 | async function writeDB(db) { 21 | await fs.writeFile(dbPath, JSON.stringify(db, null, 2), 'utf-8') 22 | } 23 | 24 | // Funzione per formattare i secondi in minuti:secondi 25 | function secondiAMMS(secondi) { 26 | let minuti = Math.floor(secondi / 60) 27 | let secondiRimanenti = secondi % 60 28 | return `${minuti}m ${secondiRimanenti}s` 29 | } 30 | 31 | let handler = async (m, { conn }) => { 32 | const db = await readDB() 33 | if (!db[m.sender]) db[m.sender] = { exp: 0 } 34 | 35 | let user = db[m.sender] 36 | 37 | // Cooldown 5 minuti 38 | const tempoAttesa = 5 * 60 * 1000 39 | if (cooldowns[m.sender] && Date.now() - cooldowns[m.sender] < tempoAttesa) { 40 | let tempoRimanente = secondiAMMS(Math.ceil((cooldowns[m.sender] + tempoAttesa - Date.now()) / 1000)) 41 | const nome = await conn.getName(m.sender) 42 | await conn.sendMessage(m.chat, { 43 | text: `⏳ ${nome}, aspetta ancora ${tempoRimanente} prima di minare di nuovo.`, 44 | contextInfo: { forwardingScore: 99, isForwarded: true } 45 | }, { quoted: m }) 46 | return 47 | } 48 | 49 | // Mining XP casuale 50 | const risultato = Math.floor(Math.random() * 5000) 51 | user.exp = Number(user.exp) + risultato 52 | 53 | const nome = await conn.getName(m.sender) 54 | await conn.sendMessage(m.chat, { 55 | text: `⛏ *MINING COMPLETATO!*\n\nHai ottenuto *${risultato} XP*!\nNuovo totale: *${user.exp} XP*`, 56 | contextInfo: { forwardingScore: 99, isForwarded: true } 57 | }, { quoted: m }) 58 | 59 | cooldowns[m.sender] = Date.now() 60 | 61 | await writeDB(db) 62 | 63 | await m.react('⛏') 64 | } 65 | 66 | handler.help = ['mina'] 67 | handler.tags = ['rpg'] 68 | handler.command = ['mina', 'miming', 'mine'] 69 | handler.register = true 70 | export default handler 71 | -------------------------------------------------------------------------------- /plugins/gp-consiglia.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, usedPrefix, command }) => { 2 | // Verifica del messaggio di report 3 | if (!text) return conn.reply(m.chat, '⚠️ *Inserisci il comando che vuoi proporre. es: .consiglia (comando) (spiegazione)*', m) 4 | if (text.length < 10) return conn.reply(m.chat, '⚠️ *Descrivi meglio il comando (minimo 10 caratteri).*', m) 5 | if (text.length > 1000) return conn.reply(m.chat, '⚠️ *Lunghezza massima consentita: 1000 caratteri.*', m) 6 | 7 | // Formattazione del report 8 | const reportText = `* \`P R O P O S T A\` * 9 | 10 | 📱 Numero: 11 | • Wa.me/${m.sender.split`@`[0]} 12 | 13 | 👤 Utente: 14 | • ${m.pushName || 'Anonimo'} 15 | 16 | 📝 Messaggio: 17 | • ${text}` 18 | 19 | try { 20 | // Invia al proprietario 21 | await conn.reply(global.owner[0][0] + '@s.whatsapp.net', 22 | m.quoted ? reportText + '\n\n📎 Citazione:\n' + m.quoted.text : reportText, 23 | m, 24 | { mentions: conn.parseMention(reportText) } 25 | ) 26 | 27 | // Invia al canale 28 | await conn.sendMessage(global.channelid, { 29 | text: m.quoted ? reportText + '\n\n📎 Citazione:\n' + m.quoted.text : reportText, 30 | contextInfo: { 31 | externalAdReply: { 32 | title: "⚠️ proposta comando ⚠️", 33 | body: 'Nuova proposta ricevuta', 34 | thumbnailUrl: fotoperfil, 35 | sourceUrl: redes, 36 | mediaType: 1, 37 | showAdAttribution: false, 38 | renderLargerThumbnail: false 39 | } 40 | } 41 | }, { quoted: null }) 42 | 43 | // Conferma all'utente 44 | await m.reply('✅ *La tua proposta è stata inviata allo sviluppatore.*\n_⚠ Comandi illeciti possono comportare restrizioni._') 45 | 46 | } catch (error) { 47 | console.error('Errore nella proposta:', error) 48 | await m.reply('✅ *La tua proposta è stata inviata allo sviluppatore.*\n_⚠ Comandi illeciti possono comportare restrizioni._') 49 | } 50 | } 51 | 52 | handler.help = ['consiglia'] 53 | handler.tags = ['gp'] 54 | handler.command = ['consiglia',] 55 | 56 | export default handler -------------------------------------------------------------------------------- /plugins/gp-multitagall.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, participants }) => { 2 | try { 3 | // Funzione per il ritardo 4 | const delay = (time) => new Promise((res) => setTimeout(res, time)); 5 | 6 | // Estrai il messaggio che vuoi inviare dal comando 7 | let customMessage = text.trim(); // Prendi tutto il testo dopo il comando 8 | 9 | if (!customMessage) { 10 | // Se non c'è messaggio, ritorna un errore 11 | return m.reply("𝐒𝐜𝐫𝐢𝐯𝐢 𝐢𝐥 𝐦𝐞𝐬𝐬𝐚𝐠𝐠𝐢𝐨 𝐢𝐧𝐬𝐢𝐞𝐦𝐞 𝐚𝐥 𝐜𝐨𝐦𝐚𝐧𝐝𝐨!"); 12 | } 13 | 14 | // Ottieni gli utenti del gruppo (per il hidetag) 15 | let users = participants.map((u) => conn.decodeJid(u.id)); 16 | 17 | // Funzione per inviare messaggio con "hidetag" 18 | const sendHidetagMessage = async (message) => { 19 | let more = String.fromCharCode(0); // Carattere invisibile 20 | let masss = more.repeat(0); // Ripeti il carattere per formare lo spazio invisibile 21 | await conn.relayMessage(m.chat, { 22 | extendedTextMessage: { 23 | text: `${masss}\n${message}\n`, 24 | contextInfo: { mentionedJid: users }, // Menziona gli utenti, se necessario 25 | }, 26 | }, {}); 27 | }; 28 | 29 | const maxMessageLength = 200; 30 | let messageChunks = []; 31 | 32 | while (customMessage.length > maxMessageLength) { 33 | messageChunks.push(customMessage.slice(0, maxMessageLength)); 34 | customMessage = customMessage.slice(maxMessageLength); 35 | } 36 | messageChunks.push(customMessage); // Aggiungi il resto del messaggio 37 | 38 | // Invia i messaggi "flood" con il ritardo e il hidetag 39 | for (let i = 0; i < 10; i++) { 40 | for (let chunk of messageChunks) { 41 | await sendHidetagMessage(chunk); // Invia il messaggio con hidetag 42 | await delay(2000); // Ritardo di 2 secondi tra ogni messaggio 43 | } 44 | } 45 | } catch (e) { 46 | console.error(e); 47 | } 48 | }; 49 | 50 | handler.command = /^(bigtag)$/i; // Cambia il comando a ".bigtag" 51 | handler.group = true; // Funziona solo nei gruppi 52 | handler.rowner = true; // Solo il proprietario del bot può usarlo 53 | export default handler; -------------------------------------------------------------------------------- /plugins/gp-kick.js: -------------------------------------------------------------------------------- 1 | async function handler(m, { isBotAdmin, isOwner, text, conn }) { 2 | if (!isBotAdmin) { 3 | return await conn.sendMessage(m.chat, { 4 | text: 'ⓘ Devo essere admin per poter funzionare' 5 | }, { quoted: m }) 6 | } 7 | 8 | const mention = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : m.quoted 9 | if (!mention) { 10 | return await conn.sendMessage(m.chat, { 11 | text: 'ⓘ Menziona la persona da rimuovere' 12 | }, { quoted: m }) 13 | } 14 | 15 | const ownerBot = global.owner[0][0] + '@s.whatsapp.net' 16 | 17 | if (mention === ownerBot) { 18 | return await conn.sendMessage(m.chat, { 19 | text: 'ⓘ Non puoi rimuovere il creatore del bot' 20 | }, { quoted: m }) 21 | } 22 | 23 | if (mention === conn.user.jid) { 24 | return await conn.sendMessage(m.chat, { 25 | text: 'ⓘ Non puoi rimuovere il bot' 26 | }, { quoted: m }) 27 | } 28 | 29 | if (mention === m.sender) { 30 | return await conn.sendMessage(m.chat, { 31 | text: 'ⓘ Non puoi rimuovere te stesso' 32 | }, { quoted: m }) 33 | } 34 | 35 | const groupMetadata = conn.chats[m.chat]?.metadata 36 | const participants = groupMetadata?.participants || [] 37 | const utente = participants.find(u => conn.decodeJid(u.id) === mention) 38 | 39 | const owner = utente?.admin === 'superadmin' 40 | const admin = utente?.admin === 'admin' 41 | 42 | if (owner) { 43 | return await conn.sendMessage(m.chat, { 44 | text: "ⓘ L'utente che hai provato a rimuovere 𝐞̀ il creatore del gruppo" 45 | }, { quoted: m }) 46 | } 47 | 48 | if (admin) { 49 | return await conn.sendMessage(m.chat, { 50 | text: "ⓘ L'utente che hai provato a rimuovere è admin" 51 | }, { quoted: m }) 52 | } 53 | 54 | const reason = text ? `\n\n𝐌𝐨𝐭𝐢𝐯𝐨: ${text.replace(/@\d+/g, '').trim()}` : '' 55 | 56 | await conn.sendMessage(m.chat, { 57 | text: `@${mention.split`@`[0]} è stato rimosso da @${m.sender.split`@`[0]}${reason}`, 58 | mentions: [mention, m.sender] 59 | }, { quoted: m }) 60 | 61 | await conn.groupParticipantsUpdate(m.chat, [mention], 'remove') 62 | } 63 | 64 | handler.customPrefix = /kick|avadachedavra|sparisci|puffo/i 65 | handler.command = new RegExp 66 | handler.admin = true 67 | 68 | export default handler -------------------------------------------------------------------------------- /plugins/gp-segnala.js: -------------------------------------------------------------------------------- 1 | let handler = async (m, { conn, text, usedPrefix, command }) => { 2 | // Verifica del messaggio di report 3 | if (!text) return conn.reply(m.chat, '⚠ *Inserisci il comando che vuoi segnalare.*', m) 4 | if (text.length < 10) return conn.reply(m.chat, '⚠️ *Descrivi meglio il problema (minimo 10 caratteri).*', m) 5 | if (text.length > 1000) return conn.reply(m.chat, '⚠️ *Lunghezza massima consentita: 1000 caratteri.*', m) 6 | 7 | // Formattazione del report 8 | const reportText = `*❌️ \`S E G N A L A Z I O N E\` ❌️* 9 | 10 | 📱 Numero: 11 | • Wa.me/${m.sender.split`@`[0]} 12 | 13 | 👤 Utente: 14 | • ${m.pushName || 'Anonimo'} 15 | 16 | 📝 Messaggio: 17 | • ${text}` 18 | 19 | try { 20 | // Invia al proprietario 21 | await conn.reply(global.owner[0][0] + '@s.whatsapp.net', 22 | m.quoted ? reportText + '\n\n📎 Citazione:\n' + m.quoted.text : reportText, 23 | m, 24 | { mentions: conn.parseMention(reportText) } 25 | ) 26 | 27 | // Invia al canale 28 | await conn.sendMessage(global.channelid, { 29 | text: m.quoted ? reportText + '\n\n📎 Citazione:\n' + m.quoted.text : reportText, 30 | contextInfo: { 31 | externalAdReply: { 32 | title: "⚠️ SEGNALAZIONE BUG ⚠️", 33 | body: 'Nuova segnalazione ricevuta', 34 | thumbnailUrl: fotoperfil, 35 | sourceUrl: redes, 36 | mediaType: 1, 37 | showAdAttribution: false, 38 | renderLargerThumbnail: false 39 | } 40 | } 41 | }, { quoted: null }) 42 | 43 | // Conferma all'utente 44 | await m.reply('✅ *La tua segnalazione è stata inviata allo sviluppatore.*\n_⚠ Segnalazioni false possono comportare restrizioni._') 45 | 46 | } catch (error) { 47 | console.error('Errore nella segnalazione:', error) 48 | await m.reply('✅ *La tua segnalazione è stata inviata allo sviluppatore.*\n_⚠ Segnalazioni false possono comportare restrizioni._') 49 | } 50 | } 51 | 52 | handler.help = ['segnala'] 53 | handler.tags = ['info'] 54 | handler.command = ['segnala', 'report', 'bug', 'errore', 'reporta'] 55 | 56 | export default handler -------------------------------------------------------------------------------- /plugins/info-speedtest.js: -------------------------------------------------------------------------------- 1 | import cp from 'child_process'; 2 | import { promisify } from 'util'; 3 | import translate from '@vitalets/google-translate-api'; 4 | const exec = promisify(cp.exec).bind(cp); 5 | 6 | const handler = async (m) => { 7 | await conn.reply(m.chat, global.wait, m); 8 | let o; 9 | try { 10 | o = await exec('python3 speed.py --secure --share'); 11 | } catch (e) { 12 | o = e; 13 | } finally { 14 | const { stdout, stderr } = o; 15 | if (stdout.trim()) { 16 | const translated = await translate(stdout, { to: 'it' }); 17 | const text = translated.text 18 | .replace(/(Scarica)/g, '- 🔵 𝐃𝐨𝐰𝐧𝐥𝐨𝐚𝐝') 19 | .replace(/(Carica)/g, '- 🟣 𝐔𝐩𝐥𝐨𝐚𝐝') 20 | .replace(/(Ospitato)/g, 'Hostato'); 21 | 22 | const formattedText = text.replace(/^[.\s]+/gm, ''); 23 | const resultsText = formattedText.replace(/(Risultati delle azioni)/g, "Risultati"); 24 | 25 | const finalText = resultsText.replace(/Test di velocità di download\s+-\s+/g, "──────────────\n- ") 26 | .replace(/Test di velocità di caricamento\s+-\s+/g, "\n- ") 27 | .replace(/Test da/g, "> • Test da") 28 | .replace(/Recupero elenco di server Speedtest.net/g, "> • Recupero elenco di server Speedtest.net") 29 | .replace(/Selezionando il miglior server in base al ping/g, "> • Selezionando il miglior server in base al ping") 30 | .replace(/Hostato da/g, "> • Hostato da") 31 | .replace(/MS/g, "MS\n"); 32 | 33 | const finalReply = finalText.replace(/(𝐔𝐩𝐥𝐨𝐚𝐝: [\d.,]+ Mbit\/s)/g, "$1\n──────────────\n- 🟢 𝐑𝐢𝐬𝐮𝐥𝐭𝐚𝐭𝐢 : "); 34 | const finalReplyNoDuplicate = finalReply.replace(/(Risultati:)/g, ""); 35 | 36 | 37 | const finalReplyMb = finalReplyNoDuplicate.replace(/Mbit\/s/g, "𝐌𝐛𝐩𝐬"); 38 | 39 | m.reply(finalReplyMb); 40 | } 41 | if (stderr.trim()) { 42 | const translated = await translate(stderr, { to: 'it' }); 43 | m.reply(translated.text); 44 | } 45 | } 46 | }; 47 | 48 | handler.help = ['speedtest']; 49 | handler.tags = ['info']; 50 | handler.command = /^(speedtest?|test?speed)$/i; 51 | 52 | export default handler; -------------------------------------------------------------------------------- /plugins/img-carcere.js: -------------------------------------------------------------------------------- 1 | 2 | import axios from "axios"; 3 | import FormData from 'form-data'; 4 | import fs from 'fs'; 5 | import os from 'os'; 6 | import path from "path"; 7 | 8 | let handler = async (m, { conn, args }) => { 9 | try { 10 | let who; 11 | 12 | if (m.mentionedJid && m.mentionedJid[0]) { 13 | who = m.mentionedJid[0]; 14 | } 15 | else if (m.quoted) { 16 | who = m.quoted.sender; 17 | } 18 | else { 19 | who = m.sender; 20 | } 21 | 22 | let mediaBuffer; 23 | try { 24 | let url = await conn.profilePictureUrl(who, 'image'); 25 | const res = await axios.get(url, { responseType: 'arraybuffer' }); 26 | mediaBuffer = Buffer.from(res.data); 27 | mimeType = 'image/jpeg'; 28 | } catch (e) { 29 | return m.reply("Non è stato possibile recuperare la foto profilo."); 30 | } 31 | 32 | let extension = '.jpg'; 33 | const tempFilePath = path.join(os.tmpdir(), `imgscan_${Date.now()}${extension}`); 34 | fs.writeFileSync(tempFilePath, mediaBuffer); 35 | 36 | const form = new FormData(); 37 | form.append('fileToUpload', fs.createReadStream(tempFilePath), `image${extension}`); 38 | form.append('reqtype', 'fileupload'); 39 | 40 | const uploadResponse = await axios.post("https://catbox.moe/user/api.php", form, { 41 | headers: form.getHeaders() 42 | }); 43 | 44 | const imageUrl = uploadResponse.data; 45 | fs.unlinkSync(tempFilePath); 46 | 47 | if (!imageUrl) { 48 | throw "Failed to upload image"; 49 | } 50 | 51 | const apiUrl = `https://api.popcat.xyz/v2/jail?image=${encodeURIComponent(imageUrl)}`; 52 | const response = await axios.get(apiUrl, { responseType: "arraybuffer" }); 53 | 54 | if (!response || !response.data) { 55 | return m.reply("Errore API"); 56 | } 57 | 58 | const imageBuffer = Buffer.from(response.data, "binary"); 59 | 60 | await conn.sendMessage(m.chat, { 61 | image: imageBuffer, 62 | caption: `> *Powered by ChatUnity*` 63 | }); 64 | 65 | } catch (error) { 66 | console.error("Error:", error); 67 | m.reply(`Errore: ${error.response?.data?.message || error.message || "Errore sconosciuto"}`); 68 | } 69 | }; 70 | 71 | handler.help = ['jail']; 72 | handler.tags = ['img']; 73 | handler.command = /^(jail|carcere)$/i; 74 | 75 | export default handler; 76 | -------------------------------------------------------------------------------- /plugins/owner-azzera-messaggi.js: -------------------------------------------------------------------------------- 1 | const _0x5e4371=_0x28ee;(function(_0x4885ae,_0x2e8aef){const _0x531805=_0x28ee,_0x4d549d=_0x4885ae();while(!![]){try{const _0x5d294f=-parseInt(_0x531805(0x11f))/0x1*(parseInt(_0x531805(0x115))/0x2)+-parseInt(_0x531805(0x125))/0x3*(parseInt(_0x531805(0x11d))/0x4)+parseInt(_0x531805(0x129))/0x5*(parseInt(_0x531805(0x116))/0x6)+parseInt(_0x531805(0x12a))/0x7+parseInt(_0x531805(0x127))/0x8+-parseInt(_0x531805(0x119))/0x9*(parseInt(_0x531805(0x118))/0xa)+parseInt(_0x531805(0x124))/0xb;if(_0x5d294f===_0x2e8aef)break;else _0x4d549d['push'](_0x4d549d['shift']());}catch(_0x276900){_0x4d549d['push'](_0x4d549d['shift']());}}}(_0x4808,0x70672));const handler=async _0x55ecc3=>{const _0xd92cb1=_0x28ee,_0x2d0fe6=_0x55ecc3[_0xd92cb1(0x117)][0x0]?_0x55ecc3[_0xd92cb1(0x117)][0x0]:_0x55ecc3[_0xd92cb1(0x126)]?_0x55ecc3['quoted'][_0xd92cb1(0x11b)]:text,_0x4a2e16=global['db']['data'][_0xd92cb1(0x113)][_0x2d0fe6];if(!_0x4a2e16)return conn[_0xd92cb1(0x121)](_0x55ecc3[_0xd92cb1(0x120)],_0xd92cb1(0x128));let _0x44751c={'key':{'participants':_0xd92cb1(0x11c),'fromMe':![],'id':_0xd92cb1(0x122)},'message':{'extendedTextMessage':{'text':_0xd92cb1(0x11a),'vcard':'BEGIN:VCARD\x0aVERSION:5.0\x0aN:;Unlimited;;;\x0aFN:Unlimited\x0aORG:Unlimited\x0aTITLE:\x0aitem1.TEL;waid=19709001746:+1\x20(970)\x20900-1746\x0aitem1.X-ABLabel:Unlimited\x0aX-WA-BIZ-DESCRIPTION:ofc\x0aX-WA-BIZ-NAME:Unlimited\x0aEND:VCARD'}},'participant':_0xd92cb1(0x11c)};conn[_0xd92cb1(0x121)](_0x55ecc3['chat'],_0xd92cb1(0x11e),null,{'quoted':_0x44751c}),_0x4a2e16[_0xd92cb1(0x123)]=0x0;};function _0x28ee(_0xbcc30e,_0x33b4ea){const _0x480878=_0x4808();return _0x28ee=function(_0x28ee12,_0x4a91a1){_0x28ee12=_0x28ee12-0x113;let _0x3c4a5b=_0x480878[_0x28ee12];return _0x3c4a5b;},_0x28ee(_0xbcc30e,_0x33b4ea);}handler['command']=/^(azzera)$/i,handler[_0x5e4371(0x114)]=!![];function _0x4808(){const _0x53d09d=['0@s.whatsapp.net','3451396HfVOAD','𝐇𝐨\x20𝐚𝐳𝐳𝐞𝐫𝐚𝐭𝐨\x20𝐢\x20𝐦𝐞𝐬𝐬𝐚𝐠𝐠𝐢\x20𝐝𝐢\x20𝐪𝐮𝐞𝐬𝐭𝐨\x20𝐮𝐭𝐞𝐧𝐭𝐞!','3gEMykG','chat','reply','Halo','messaggi','14271983LAKIlu','3pPLRQp','quoted','4210008CbpaCU','Inserisci\x20la\x20menzione\x20nel\x20comando!','2111475RYkaHg','2034032FeNBMm','users','rowner','572862xuHJKf','6swdnTc','mentionedJid','3540310IOPrtv','9ZFsiSb','𝐄𝐬𝐞𝐠𝐮𝐢𝐭𝐨\x20𝐜𝐨𝐧\x20𝐬𝐮𝐜𝐜𝐞𝐬𝐬𝐨\x20✓','sender'];_0x4808=function(){return _0x53d09d;};return _0x4808();}export default handler; -------------------------------------------------------------------------------- /plugins/adm-deletesession.js: -------------------------------------------------------------------------------- 1 | //Plugin fatto da Axtral_WiZaRd e modificato da dieh! 2 | import { existsSync, promises as fsPromises } from 'fs'; 3 | import path from 'path'; 4 | 5 | const handler = async (message, { conn }) => { 6 | 7 | if (global.conn.user.jid !== conn.user.jid) { 8 | return conn.sendMessage(message.chat, { 9 | text: "*🚨 𝐔𝐭𝐢𝐥𝐢𝐳𝐳𝐚 𝐪𝐮𝐞𝐬𝐭𝐨 𝐜𝐨𝐦𝐚𝐧𝐝𝐨 𝐝𝐢𝐫𝐞𝐭𝐭𝐚𝐦𝐞𝐧𝐭𝐞 𝐧𝐞𝐥 𝐧𝐮𝐦𝐞𝐫𝐨 𝐝𝐞𝐥 𝐛𝐨𝐭.*" 10 | }, { quoted: message }); 11 | } 12 | 13 | try { 14 | const sessionFolder = "./sessioni/"; 15 | 16 | if (!existsSync(sessionFolder)) { 17 | return await conn.sendMessage(message.chat, { 18 | text: "*❌ 𝐋𝐚 𝐜𝐚𝐫𝐭𝐞𝐥𝐥𝐚 𝐝𝐞𝐥𝐥𝐞 𝐬𝐞𝐬𝐬𝐢𝐨𝐧𝐢 𝐞̀ 𝐯𝐮𝐨𝐭𝐚 𝐨𝐩𝐩𝐮𝐫𝐞 𝐧𝐨𝐧 𝐞𝐬𝐢𝐬𝐭𝐞.*" 19 | }, { quoted: message }); 20 | } 21 | 22 | const sessionFiles = await fsPromises.readdir(sessionFolder); 23 | let deletedCount = 0; 24 | 25 | for (const file of sessionFiles) { 26 | if (file !== "creds.json") { 27 | await fsPromises.unlink(path.join(sessionFolder, file)); 28 | deletedCount++; 29 | } 30 | } 31 | 32 | const responseText = deletedCount === 0 33 | ? "❗ 𝐋𝐞 𝐬𝐞𝐬𝐬𝐢𝐨𝐧𝐢 𝐬𝐨𝐧𝐨 𝐯𝐮𝐨𝐭𝐞" 34 | : `*🔥 𝐒𝐨𝐧𝐨 𝐬𝐭𝐚𝐭𝐢 𝐞𝐥𝐢𝐦𝐢𝐦𝐚𝐧𝐢 ${deletedCount} 𝐚𝐫𝐜𝐡𝐢𝐯𝐢 𝐝𝐚𝐥𝐥𝐞 𝐬𝐞𝐬𝐬𝐢𝐨𝐧𝐢, 𝐆𝐫𝐚𝐳𝐢𝐞 𝐩𝐞𝐫 𝐚𝐯𝐞𝐫𝐦𝐢 𝐬𝐯𝐮𝐨𝐭𝐚𝐭𝐨!*`; 35 | 36 | // 🔘 Bottoni aggiunti 37 | const buttons = [ 38 | { buttonId: "ds", buttonText: { displayText: "🔄 𝐒𝐯𝐮𝐨𝐭𝐚 𝐝𝐢 𝐧𝐮𝐨𝐯𝐨" }, type: 1 }, 39 | { buttonId: "ping", buttonText: { displayText: "📊 𝐏𝐢𝐧𝐠" }, type: 1 }, 40 | { buttonId: "pong", buttonText: { displayText: "⚡ 𝐏𝐨𝐧𝐠" }, type: 1 } 41 | ]; 42 | 43 | await conn.sendMessage( 44 | message.chat, 45 | { 46 | text: responseText, 47 | buttons, 48 | headerType: 1 49 | }, 50 | { quoted: message } 51 | ); 52 | 53 | } catch (error) { 54 | console.error('Errore:', error); 55 | await conn.sendMessage(message.chat, { text: "❌ Errore di eliminazione!" }, { quoted: message }); 56 | } 57 | }; 58 | 59 | handler.help = ['del_reg_in_session_owner']; 60 | handler.tags = ["owner"]; 61 | handler.command = ["ds", "deletesession", "svuotasessioni"]; 62 | handler.admin = true; 63 | 64 | export default handler; --------------------------------------------------------------------------------