BrunoSobrino/TheMystic-Bot-MD

thanks to you who make me want to discover and create new things

Fabri115 opened this issue ยท 3 comments

//this is an 'AUDIO' version of lolhuman's openai plugin

import fetch from 'node-fetch'
import gtts from 'node-gtts'
import { readFileSync, unlinkSync } from 'fs'
import { join } from 'path'

const defaultLang = 'it'

let handler = async (m, { text, conn, args, usedPrefix, command }) => {
if (!text) throw 'Inserisci un testo da elaborare.'

await m.reply('Aspetta un attimo...')

let zykomd = await fetch(https://api.lolhuman.xyz/api/openai?apikey=BrunoSobrino_2&text=${text}&user=user-unique-id)
let hasil = await zykomd.json()

let lang = args[0]
let ttsText = hasil.result

if ((args[0] || '').length !== 2) {
lang = defaultLang
ttsText = hasil.result
}

let res

try {
res = await tts(ttsText, lang)
} catch (e) {
m.reply(e + '')
ttsText = args.join(' ')
if (!ttsText) return
res = await tts(ttsText, defaultLang)
} finally {
if (res) conn.sendFile(m.chat, res, 'tts.opus', null, m, true)
}
}

handler.help = ['tts ']
handler.tags = ['tools']
handler.command = /^ai_voce$/i

export default handler

function tts(text, lang = 'it') {
console.log(lang, text)
return new Promise((resolve, reject) => {
try {
let tts = gtts(lang)
let filePath = join(global.__dirname(import.meta.url), '../tmp', (1 * new Date) + '.wav')
tts.save(filePath, text, () => {
resolve(readFileSync(filePath))
unlinkSync(filePath)
})
} catch (e) {
reject(e)
}
})
}

//momentarily it is set on the Italian language
//I have many questions to ask you and plugins to modify. I kindly ask you to contact me to try to do something together and collaborate :)
@Fabri115

@Fabri115 Thank you for your input and we still appreciate your comment, we will improve the command and add it to MysticBot. Anything we can be of use to can comment on these issues

try this plugin ๐Ÿ‘๐Ÿป

*mute user

let handler = async (m, { conn, participants, usedPrefix, command, isAdmin }) => {
let BANtext = chi? tagga qualcuno
if (!m.mentionedJid[0] && !m.quoted) return
let who
if (m.isGroup) who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted.sender
else who = m.chat
let users = global.db.data.users
users[who].muto = true
m.reply('Mutato ๐œ๐จ๐ง ๐ฌ๐ฎ๐œ๐œ๐ž๐ฌ๐ฌ๐จ โœ“ tutti i messaggi inviati ti verranno eliminati. soffri.') }
handler.command = /^muta$/i
handler.admin = true
export default handler

*unmute user

let handler = async (m, { conn, text}) => {
if (!text) return
let who
if (m.isGroup) who = m.mentionedJid[0]
else who = m.chat
if (!who) return
let users = global.db.data.users
users[who].muto = false
conn.reply(m.chat, *smutato* ๐œ๐จ๐ง ๐ฌ๐ฎ๐œ๐œ๐ž๐ฌ๐ฌ๐จ, โœ“ *non eliminerรฒ piรน i suoi messaggi*, m)
}
handler.help = ['unbanuser']
handler.tags = ['owner']
handler.command = /^smuta|unmute$/i
handler.admin = true
export default handler


*list muteusers
let handler = async (m, { conn, isAdmin }) => {
let chats = Object.entries(global.db.data.chats).filter(chat => chat[1].ismuto)
let users = Object.entries(global.db.data.users).filter(user => user[1].muto)
let caption = โ”Œใ€”๐”๐ญ๐ž๐ง๐ญ๐ข *mutati* ๐Ÿ‘จ๐Ÿปโ€โœˆ๏ธใ€• โ”œ ๐“๐จ๐ญ๐š๐ฅ๐ž : ${users.length} ${users ? '\n' + users.map(([jid], i) =>
โ”œ ${isAdmin ? '@' + jid.split@[0] : jid}.trim()).join('\n') : 'โ”œ'} โ””โ”€โ”€โ”€โ”€ .trim()
m.reply(caption, null, {mentions: conn.parseMention(caption)})}
handler.command = /^mutelist(ned)?|mute(ed)?list|mutati?$/i
handler.admin = true
export default handler


  • checkativo :)

import { createHash } from 'crypto'
import PhoneNumber from 'awesome-phonenumber'
import { canLevelUp, xpRange } from '../lib/levelling.js'
//import db from '../lib/database.js'

let handler = async (m, { conn, usedPrefix, command}) => {

let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
if (!(who in global.db.data.users)) throw *L'utente deve ancora scrivere un msg*
let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './src/avatar_contact.png')
let user = global.db.data.users[who]
let { name, exp, messaggi, lastclaim, registered, regTime, age, level, role, warn } = global.db.data.users[who]
let { min, xp, max } = xpRange(user.level, global.multiplier)
let username = conn.getName(who)
let math = max - xp
let prem = global.prems.includes(who.split@[0])
let sn = createHash('md5').update(who).digest('hex')
m.reply(*Total Message* : *${user.messaggi}*)
}
handler.help = ['Checkativo @user']
handler.tags = ['group']
handler.command = /^checkativo$/i

export default handler


*top groups message :)

import { areJidsSameUser } from '@adiwajshing/baileys'

var leaderboards = [
'messaggi'
]
var handler = async (m, {
conn,
args,
participants,
usedPrefix,
command,
groupMetadata
}) => {
var users = Object.entries(db.data.chats).map(([key, value]) => {
return {
...value,
subject: key
}
})
var leaderboard = leaderboards.filter(v => v && users.filter(chats => chats && chats[v]).length)
var type = (args[0] || '').toLowerCase()
var getPage = (item) => Math.ceil((users.filter(chats => chats && chats[item]).length) / 25)
var wrong = `
Use format ${usedPrefix}${command} [type] [page]
example ${usedPrefix}${command} messaggi 1

๐Ÿ“ Type list
${leaderboard.map(v => ${v}.trim()).join('\n')}
.trim() if (!leaderboard.includes(type)) return m.reply(wrong) var page = isNumber(args[1]) ? Math.min(Math.max(parseInt(args[1]), 0), getPage(type)) : 0 var sortedItem = users.map(toNumber(type)).sort(sort(type)) var userItem = sortedItem.map(enumGetSubject) // var len = args[0] && args[0].length > 0 ? Math.min(100, Math.max(parseInt(args[0]), 5)) : Math.min(5, sortedExp.length) var text = ${sortedItem.slice(page * 5, page * 5 + 5).map((user, i) => ${i + 1}. ${participants.some(p => isJidGroup(user.subject, p.subject)) ? (${groupMetadata.subject}) : '@'}${user.subject.split@[0]} *${user[type]} ${type}*).join\n}
`.trim()
return m.reply(text, null, {
mentions: [...userItem.slice(page * 5, page * 5 + 5)].filter(v => !participants.some(p => isJidGroup(v, p.id)))
})
}
handler.help = ['leaderboard jumlah user', 'lb jumlah user']
handler.tags = ['xp']
handler.command = /^(gruppi)$/i

export default handler

function sort(property, ascending = true) {
if (property) return (...args) => args[ascending & 1][property] - args[!ascending & 1][property]
else return (...args) => args[ascending & 1] - args[!ascending & 1]
}

function toNumber(property, _default = 0) {
if (property) return (a, i, b) => {
return {
...b[i],
[property]: a[property] === undefined ? _default : a[property]
}
}
else return a => a === undefined ? _default : a
}

function enumGetSubject(a) {
return a.subject
}

/**

  • Detect Number
  • @param {Number} x
    */
    function isNumber(number) {
    if (!number) return number
    number = parseInt(number)
    return typeof number == 'number' && !isNaN(number)
    }

*Top users message

import { areJidsSameUser } from '@adiwajshing/baileys'

var leaderboards = [
'messaggi'
]
var handler = async (m, {
conn,
args,
participants,
usedPrefix,
command
}) => {

if (!m.chat) {

    }
    var groupId = m.chat.id
var users = 
Object.entries(db.data.chats[groupId]).map(([key, value]) => {
            return {
                    ...value,
                    Id: key
            }
    })
var leaderboard = leaderboards.filter(v => v && users.filter(user => user && user[v]).length)
var type = (args[0] || '').toLowerCase()
var getPage = (item) => Math.ceil((users.filter(user => user && user[item]).length) / 25)
var wrong = `

Usa il formato ${usedPrefix}${command} [messaggi]

๐Ÿ“ Tipo di lista:
${leaderboard.map(v => ${v}.trim()).join('\n')}
.trim() if (!leaderboard.includes(type)) return m.reply(wrong) var page = isNumber(args[1]) ? Math.min(Math.max(parseInt(args[1]), 0), getPage(type)) : 0 var sortedItem = users.map(toNumber(type)).sort(sort(type)) var userItem = sortedItem.map(enumGetKey) // var len = args[0] && args[0].length > 0 ? Math.min(100, Math.max(parseInt(args[0]), 5)) : Math.min(5, sortedExp.length) var text =
โ€ข * Top 50 ${type}* โ€ข

Tu sei: ${userItem.indexOf(m.sender) + 1} of ${userItem.length}

${sortedItem.slice(page * 50, page * 50 + 50).map((user, i) => ${i + 1}. ${participants.some(p => areJidsSameUser(user.jid, p.id)) ? ${conn.getName(user.jid)} wa.me/ : '@'}${user.jid.split@[0]} *${user[type]} ${type}*).join\n}
`.trim()
return m.reply(text, null, {
mentions: [...userItem.slice(page * 50, page * 50 + 50)].filter(v => !participants.some(p => areJidsSameUser(v, p.id)))
})
}
handler.help = ['leaderboard jumlah user', 'lb jumlah user']
handler.tags = ['xp']
handler.command = /^(top)$/i

export default handler

function sort(property, ascending = true) {
if (property) return (...args) => args[ascending & 1][property] - args[!ascending & 1][property]
else return (...args) => args[ascending & 1] - args[!ascending & 1]
}

function toNumber(property, _default = 0) {
if (property) return (a, i, b) => {
return {
...b[i],
[property]: a[property] === undefined ? _default : a[property]
}
}
else return a => a === undefined ? _default : a
}

function enumGetKey(a) {
return a.jid
}

/**

  • Detect Number
  • @param {Number} x
    */
    function isNumber(number) {
    if (!number) return number
    number = parseInt(number)
    return typeof number == 'number' && !isNaN(number)
    }

handler modify = ++

...
if (user) {
if (!isNumber(user.messaggi)) user.messaggi = 0
if (!('muto' in user)) user.muto = false

global.db.data.users[m.sender] = {
messaggi: 0,
muto: false,

if (chat) {
if (!isNumber(chat.messaggi)) chat.messaggi = 0


global.db.data.chats[m.chat] = {
messaggi: 0,

let utente = global.db.data.users[m.sender]
if (utente.muto == true) {
let bang = m.key.id
let cance = m.key.participant
await conn.sendMessage(m.chat, {
delete: {
remoteJid: m.chat, fromMe: false, id: bang, participant: cance }
})
}
if (m.sender && (user = global.db.data.users[m.sender]) && (chat = global.db.data.chats[m.chat])) {
user.exp += m.exp
user.limit -= m.limit * 1
user.messaggi +=1
chat.messaggi +=1
user.bestemmie +=1

        }

bonus fix wait message problems with plugin

import { readdirSync, statSync, unlinkSync, existsSync, readFileSync, watch, rmSync, promises as fs } from "fs";
import path, { join } from 'path';

let handler = async (m, { conn }, args) => {
let parentw = conn;
let who = m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender;
let uniqid = ${who.split@[0]};

if (global.conn.user.jid !== conn.user.jid) {
return conn.sendMessage(m.chat, { text: 'Utilizza questo comando direttamente sul numero principale del Bot' }, { quoted: m });
} else {
await conn.sendMessage(m.chat, { text: "๐Ÿ‘‹ Bang, Ora mi vedi" }, { quoted: m });
}

try {
const sessionPath = "./BotWhaItaSession/";
const files = await fs.readdir(sessionPath);
for (const file of files) {
await fs.unlink(path.join(sessionPath, file));
}
await conn.sendMessage(m.chat, { text: "Tutti i file della Sessione sono stati eliminati" }, { quoted: m });
} catch (err) {
console.error('La cartella o il file di sessione non esistono', err);
}
};

handler.help = ['deletebot'];
handler.tags = ['jadibot'];
handler.command = /^(deletebot|eliminarsesion|deletesession|ds)$/i;
handler.owner = true;
export default handler;

I hope to become your contributor

idea for new menu with buttons

import os from 'os'
import util from 'util'
import sizeFormatter from 'human-readable'
import MessageType from '@adiwajshing/baileys'
import fs from 'fs'
import { performance } from 'perf_hooks'
let handler = async (m, { conn, usedPrefix, usedPrefix: _p, __dirname, isPrems, groupMetadata }) => {
let pp = imagen4
let img = './Menu2.jpg'
let locale = 'it'
let d = new Date(new Date + 3600000)
let week = d.toLocaleDateString(locale, { weekday: 'long' })
let date = d.toLocaleDateString(locale, { day: 'numeric', month: 'long', year: 'numeric' })
let _uptime = process.uptime() * 1000
let uptime = clockString(_uptime)
let user = global.db.data.users[m.sender]
let { money, joincount } = global.db.data.users[m.sender]
let { exp, limit, level, role } = global.db.data.users[m.sender]
let rtotalreg = Object.values(global.db.data.users).filter(user => user.registered == true).length
let totaluser = Object.values(global.db.data.users).length
const chats = Object.entries(conn.chats).filter(([id, data]) => id && data.isChats)
let more = String.fromCharCode(8206)
let readMore = more.repeat(850)
let taguser = '@' + m.sender.split("@s.whatsapp.net")[0]
var doc = ['pdf','zip','vnd.openxmlformats-officedocument.presentationml.presentation','vnd.openxmlformats-officedocument.spreadsheetml.sheet','vnd.openxmlformats-officedocument.wordprocessingml.document']
var document = doc[Math.floor(Math.random() * doc.length)]
const groupsIn = chats.filter(([id]) => id.endsWith('@g.us'))
const groups = chats.filter(([id]) => id.endsWith('@g.us'))
const used = process.memoryUsage()
const { restrict } = global.db.data.settings[conn.user.jid] || {}
const { autoread } = global.opts
const grup = './no.png'
let name = await
conn.getName(m.sender)
let old = performance.now()
let neww = performance.now()
let speed = neww - old
let prova ={ "key": { "participants":"0@s.whatsapp.net", "remoteJid": "status@broadcast", "fromMe": true, "id": "Halo" }, "message": { "contactMessage": { "vcard": BEGIN:VCARD\nVERSION:3.0\nN:Sy;Bot;;;\nFN:y\nitem1.TEL;waid=${m.sender.split('@')[0]}:${m.sender.split('@')[0]}\nitem1.X-ABLabel:Ponsel\nEND:VCARD }}, "participant": "0@s.whatsapp.net" }

let text = ` โ˜๏ธ๐‘ด๐’๐’๐’๐‘ช๐’๐’๐’–๐’…๐’”โ‡๐แซ๐“|mษ™nลซโ˜๏ธ
โ”Œโ”€โ”€โ€ขโœง๐‘ถ๐’ˆ๐’ˆ๐’Šโœงโ€ขโ”€โ”€โ”€โ”€โ”€โ”
โ”Šโ”€โ€ขโœง๐˜ฟ๐˜ผ๐™๐˜ผ: ${date}
โ”Šโ”€โ€ขโœง๐™Š๐™๐˜ผ: ${bottime}
โ””โ”€โ”€โ”€โ”€ โ€ขโœงโœงโ€ข โ”€โ”€โ”€โ”€โ”˜

โ”Œโ”€โ”€โ€ขโœง๐‘ฐ๐’๐’‡๐’ ๐‘ผ๐’•๐’†๐’๐’•๐’†โœงโ€ขโ”€โ”€โ”€โ”€โ”€โ”
โ”Šโ”€โ€ขโœง๐‘ผ๐™๐‘ฌ๐™‰๐™๐‘ฌ: ${name} โœง
โ”Šโ”€โ€ขโœง๐‘ฎ๐™๐™๐™‹๐™‹๐™Š:
โ”Š* ${groupMetadata.subject}*
โ”Šโ”€โ€ขโœง๐™ˆ๐™€๐™Ž๐™Ž๐˜ผ๐‘ฎ๐‘ฎ๐‘ฐ: ${user.messaggi}
โ”Šโ”€โ€ขโœง๐™๐˜ผ๐™‰๐‘ฎ๐™Š: ${role}
โ””โ”€โ”€โ”€ โ€ขโœงโœงโ€ข โ”€โ”€โ”€โ”€โ”˜

โ”Œโ”€โ€ขโœง๐‘ฉ๐‘ถ๐‘ป ๐‘ฐ๐‘ต๐‘ญ๐‘ถโœงโ€ขโ”€โ”€โ”
โ”Šโ”€โ€ขโœง๐˜ฝ๐™Š๐™ ๐™‰๐˜ผ๐™ˆ๐™€:${gt}
โ”Šโ”€โ€ขโœง๐‘ฝ๐‘ฌ๐‘น๐‘บ๐‘ฐ๐‘ถ๐‘ต๐‘ฌ ๐˜ฝ๐™Š๐™:${vs}
โ”Šโ”€โ€ขโœง๐™‹๐™‡๐˜ผ๐™๐™๐™Š๐™๐™ˆ: ๐‘ณ๐’Š๐’๐’–๐’™ *
โ”Šโ”€โ€ขโœง
๐™‹๐™๐™€๐™๐™„๐™“:* ${usedPrefix}
โ”Šโ”€โ€ขโœง๐™๐™‹๐™๐™„๐™ˆ๐™€: ${uptime}
โ”Šโ”€โ€ขโœง๐˜ฟ๐˜ผ๐™๐˜ผ๐˜ฝ๐˜ผ๐™Ž๐™€: ${rtotalreg} ๐‘ญ๐‘น๐‘ถ๐‘ด ${totaluser}
โ”Šโ”€โ€ขโœง๐‘ผ๐™๐‘ฌ๐™‰๐™๐™„ ๐‘ป๐‘ถ๐‘ป๐‘จ๐‘ณ๐™„: ${totaluser}
โ””โ”€โ”€๐‘ฉ๐‘ถ๐‘ป๐‘พ๐‘ฏ๐‘จ๐‘ฐ๐‘ป๐‘จ V${vs}

โ”Œโ”€๐‘ฑ๐’๐’Š๐’ ๐’˜๐’Š๐’•๐’‰ ๐’–๐’”
โ”Šโ”€โ€ข ๐‘บ๐’„๐’‚๐’“๐’Š๐’„๐’‚๐’“๐’† ๐‘ด๐’๐’๐’๐‘ช๐’๐’๐’–๐’…๐’”โ‡๐แซ๐“

โ”Šโ”€โ€ข ๐‘ฌ๐’๐’•๐’“๐’‚ ๐’Š๐’ ๐Œ๊ฎป๊ฎป๐–“โ˜พ๏ธŽโ„“๊ฎป๐•ฆ๐œ•๐–˜

โ”Šโ”€โ€ข ๐‘ป๐’–๐’•๐’๐’“๐’Š๐’‚๐’:

โ””โ”€โ”€ โ‡ ๊ชถอข๐‘ดโ˜๏ธ๊ซ‚ แต‰แตˆแถฆแถป ยฒโฐยฒยณ`
const templateButtons = [
{index: 1, quickReplyButton: {displayText: '.menuowner'}},
{index: 2, quickReplyButton: {displayText: '.menuattiva'}},
{index: 3, quickReplyButton: {displayText: '.menugruppo'}},
{index: 4, quickReplyButton: {displayText: '.menuaudio'}},
{index: 5, quickReplyButton: {displayText: '.menumedia'}},
{index: 6, quickReplyButton: {displayText: '.comandi'}},
{index: 7, quickReplyButton: {displayText: '.news'}},

]
let tm = {
text: text,
footer: global.wm,
templateButtons: templateButtons,
image : 'no.png'
}
conn.sendMessage(m.chat,tm, m)
}
handler.help = ['text2']
handler.tags = ['maker']
handler.command = /^menuIos/i

export default handler

function clockString(ms) {
let h = Math.floor(ms / 3600000)
let m = Math.floor(ms / 60000) % 60
let s = Math.floor(ms / 1000) % 60
console.log({ms,h,m,s})
return [h, m, s].map(v => v.toString().padStart(2, 0) ).join(':')}

idea for new menu with buttons