menu-menus.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. import { promises } from 'fs'
  2. import { join } from 'path'
  3. import fetch from 'node-fetch'
  4. import moment from 'moment-timezone'
  5. import { xpRange } from '../lib/levelling.js'
  6. //import { plugins } from '../lib/plugins.js'
  7. let tags = {'main': 'โšก INFOBOT',
  8. 'jadibot': '๐Ÿ‘ฝ SER SUB BOT',
  9. 'downloader': '๐Ÿš€ DESCARGAS',
  10. 'game': '๐ŸŽ‰ JUEGOS',
  11. 'gacha': '๐Ÿ›๏ธ NEW - RPG GACHA',
  12. 'rg': '๐Ÿ”ฐ REGISTRO',
  13. 'group': 'โš™๏ธ GRUPO',
  14. 'nable': '๐Ÿ•น ENABLE/DISABLE',
  15. 'nsfw': '๐Ÿฅต COMANDO +18',
  16. 'buscadores': '๐Ÿ” BUSCADORES',
  17. 'sticker': '๐Ÿ“‚ STICKER',
  18. 'econ': '๐Ÿ›  RPG',
  19. 'convertidor': 'โš’๏ธ CONVERTIDORES',
  20. 'logo': '๐Ÿ‘ป LOGOS',
  21. // 'prem': 'PREMIUM',
  22. 'tools': '๐Ÿ”ง HERRAMIENTA',
  23. 'randow': '๐ŸŠ RANDOW',
  24. 'efec': '๐ŸŽ™ EFECTO NOTA DE VOZ',
  25. 'cmd': 'DATABASE',
  26. 'ansfw': 'NSFW ANIME',
  27. 'owner': '๐Ÿ‘‘ OWNER',
  28. }
  29. const defaultMenu = {
  30. before: `> ใ€Œ %wm ใ€
  31. โ•ฐโ”ˆโžค ๐Š๐š๐ง๐ญ๐ฎ - ๐๐จ๐ญ
  32. โ”โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  33. โ”Š ใ€Ž *Info User* ใ€
  34. โ”Š ใ€Œ ๊›• ใ€ ๐‘ซ๐’†๐’— ๐‘ฉ๐’š ๐‘ช๐’“๐’™๐’”๐‘ด๐’๐’…๐’”
  35. โ”—โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ
  36. โ”‚แ‰โดฐ๐Ÿ‘คโ”Š *Usuario:* %name
  37. โ”‚แ‰โดฐ๐ŸŒโ”Š *Hora:* %hora
  38. โ”‚แ‰โดฐโšกโ”Š *Exp:* %totalexp XP
  39. โ”‚แ‰โดฐ๐Ÿ’ฐโ”Š *Tu limite:* %limit
  40. โ”‚แ‰โดฐโญ๏ธโ”Š *Rango:* %role
  41. โ”‚แ‰โดฐ๐Ÿง‹โ”Š *Nivel ยป* %level
  42. โ•ฐื„โ”€ื…โ”€ื„โ”€โญ’โ”€ื„โ”€ื…โ”€ื„โ”€โญ’โ”€ื„โ”€ื…โ”€ื„โ”€โญ’โ”€ื„โ”€ื…โ”€ื„โ”€โญ’
  43. โ”โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  44. โ”Š ใ€Ž *Info Bot* ใ€
  45. โ”Š ใ€Œ ๊›• ใ€ ๐‘ซ๐’†๐’— ๐‘ฉ๐’š ๐‘ช๐’“๐’™๐’”๐‘ด๐’๐’…๐’”
  46. โ”—โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ
  47. โ”‚แ‰โดฐ๐Ÿ‘‘โ”Š *Author* ยป ๐‘ช๐’“๐’™๐’”๐‘ด๐’๐’…๐’”
  48. โ”‚แ‰โดฐ๐Ÿ’Žโ”Š *Tiempo activo:* %muptime
  49. %botOfc
  50. โ”‚แ‰โดฐโ˜๏ธโ”Š *Librerรญa ยป Baileys
  51. โ”‚แ‰โดฐ๐Ÿ“†โ”Š *Fecha:* %fecha
  52. โ”‚แ‰โดฐ๐Ÿ‘ฅ๏ธ๏ธโ”Š *Usuarios ยป* %rtotalreg de %totalreg
  53. โ•ฐโ”€ื„โ”€ื…โ”€ื„โ”€โญ’โ”€ื„โ”€ื…โ”€ื„โ”€โญ’โ”€ื„โ”€ื…โ”€ื„โ”€โญ’โ”€ื„โ”€ื…โ”€ื„โ”€โญ’
  54. ${[`*\`โœ… Streaming Barato:\`*\nhttps://hackstorex.com`, `Prefieres scrips para tu web?\nhttps://MexSpin.fun`].getRandom()}
  55. `.trimStart(),
  56. header: 'โ”โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\nโ”Š\nโ”Š `ใ€Ž *%category* ใ€`\nโ”Š\nโ”Š ใ€Œ ๊›• ใ€ ๐‘ซ๐’†๐’— ๐‘ช๐’“๐’™๐’”๐‘ด๐’๐’…๐’”\nโ”—โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ ',
  57. body: ' โ”‚แ‰โดฐ๐Ÿ’Žโ”Š %cmd %islimit %isPremium',
  58. footer: `โ•šโ€ข \n`,
  59. after: `
  60. `,
  61. }
  62. let handler = async (m, { conn, usedPrefix: _p, __dirname }) => {
  63. try {
  64. let _package = JSON.parse(await promises.readFile(join(__dirname, '../package.json')).catch(_ => ({}))) || {}
  65. let { exp, limit, level, role } = global.db.data.users[m.sender]
  66. let { min, xp, max } = xpRange(level, global.multiplier)
  67. let name = await conn.getName(m.sender)
  68. let d = new Date(new Date + 3600000)
  69. let locale = 'es'
  70. let fecha = moment.tz('America/Bogota').format('DD/MM/YYYY')
  71. let hora = moment.tz('America/Mexico_City').format('LT')
  72. let weton = ['Pahing', 'Pon', 'Wage', 'Kliwon', 'Legi'][Math.floor(d / 84600000) % 5]
  73. let week = d.toLocaleDateString(locale, { weekday: 'long' })
  74. let date = d.toLocaleDateString(locale, {
  75. day: 'numeric',
  76. month: 'long',
  77. year: 'numeric'
  78. })
  79. let dateIslamic = Intl.DateTimeFormat(locale + '-TN-u-ca-islamic', {
  80. day: 'numeric',
  81. month: 'long',
  82. year: 'numeric'
  83. }).format(d)
  84. let time = d.toLocaleTimeString(locale, {
  85. hour: 'numeric',
  86. minute: 'numeric',
  87. second: 'numeric'
  88. })
  89. let _uptime = process.uptime() * 1000
  90. let _muptime
  91. if (process.send) {
  92. process.send('uptime')
  93. _muptime = await new Promise(resolve => {
  94. process.once('message', resolve)
  95. setTimeout(resolve, 1000)}) * 1000
  96. }
  97. let muptime = clockString(_muptime)
  98. let uptime = clockString(_uptime)
  99. let taguser = '@' + m.sender.split('@s.whatsapp.net')[0];
  100. let totalreg = Object.keys(global.db.data.users).length
  101. let rtotalreg = Object.values(global.db.data.users).filter(user => user.registered == true).length
  102. let toUsers = `${toNum(totalreg)}`
  103. let toUserReg = `${toNum(rtotalreg)}`
  104. let botOfc = (conn.user.jid == global.conn.user.jid) ? `*โ€ข Bot Ofc:* wa.me/${global.conn.user.jid.split`@`[0]}` : `*โ€ข Soy un sub bot del:* wa.me/${global.conn.user.jid.split`@`[0]}`
  105. let help = Object.values(global.plugins).filter(plugin => !plugin.disabled).map(plugin => {
  106. return {
  107. help: Array.isArray(plugin.tags) ? plugin.help : [plugin.help],
  108. tags: Array.isArray(plugin.tags) ? plugin.tags : [plugin.tags],
  109. prefix: 'customPrefix' in plugin,
  110. limit: plugin.limit,
  111. premium: plugin.premium,
  112. enabled: !plugin.disabled,
  113. }})
  114. for (let plugin of help)
  115. if (plugin && 'tags' in plugin)
  116. for (let tag of plugin.tags)
  117. if (!(tag in tags) && tag) tags[tag] = tag
  118. conn.menu = conn.menu ? conn.menu : {}
  119. let before = conn.menu.before || defaultMenu.before
  120. let header = conn.menu.header || defaultMenu.header
  121. let body = conn.menu.body || defaultMenu.body
  122. let footer = conn.menu.footer || defaultMenu.footer
  123. let after = conn.menu.after || (conn.user.jid == conn.user.jid ? '' : `Powered by https://wa.me/${conn.user.jid.split`@`[0]}`) + defaultMenu.after
  124. let _text = [before, ...Object.keys(tags).map(tag => {
  125. return header.replace(/%category/g, tags[tag]) + '\n' + [...help.filter(menu => menu.tags && menu.tags.includes(tag) && menu.help).map(menu => {
  126. return menu.help.map(help => {
  127. return body.replace(/%cmd/g, menu.prefix ? help : '%p' + help)
  128. .replace(/%islimit/g, menu.limit ? '(๐Ÿฃ)' : '')
  129. .replace(/%isPremium/g, menu.premium ? '(๐Ÿ†)' : '')
  130. .trim()}).join('\n')
  131. }),
  132. footer
  133. ].join('\n')}),
  134. after
  135. ].join('\n')
  136. let text = typeof conn.menu == 'string' ? conn.menu : typeof conn.menu == 'object' ? _text : ''
  137. let replace = {'%': '%',
  138. p: _p, uptime, muptime,
  139. me: conn.getName(conn.user.jid),
  140. npmname: _package.name,
  141. npmdesc: _package.description,
  142. version: _package.version,
  143. exp: exp - min,
  144. maxexp: xp,
  145. totalexp: exp,
  146. xp4levelup: max - exp,
  147. github: _package.homepage ? _package.homepage.url || _package.homepage : '[unknown github url]',
  148. level, limit, name, weton, week, date, dateIslamic, time, totalreg, rtotalreg, toUsers, toUserReg, role,
  149. readmore: readMore,
  150. fecha,
  151. hora,
  152. botOfc,
  153. wm
  154. }
  155. text = text.replace(new RegExp(`%(${Object.keys(replace).sort((a, b) => b.length - a.length).join`|`})`, 'g'), (_, name) => '' + replace[name])
  156. let pp = './menu.jpg'
  157. conn.sendMessage(m.chat, { text: text,
  158. contextInfo:{
  159. forwardedNewsletterMessageInfo: {
  160. newsletterJid: '120363371008200788@newsletter',
  161. serverMessageId: '',
  162. newsletterName: 'Kantu Bot โœจ๏ธ' },
  163. forwardingScore: 9999999,
  164. isForwarded: true,
  165. mentionedJid:[m.sender],
  166. externalAdReply: {
  167. showAdAttribution: true,
  168. renderLargerThumbnail: true,
  169. title: `${name} ๐Ÿ‘‹`,
  170. body: wm,
  171. containsAutoReply: true,
  172. mediaType: 1,
  173. thumbnail: imagen2,
  174. sourceUrl: [nna, nna2, nnaa].getRandom()
  175. }}}, { quoted: m })
  176. //conn.sendFile(m.chat, pp, 'menu.jpg', text.trim(), m, null, fake2)
  177. m.react('๐Ÿฃ')
  178. } catch (e) {
  179. m.react(`โŒ`)
  180. throw e
  181. }}
  182. handler.help = ['help']
  183. handler.tags = ['main']
  184. //handler.command = ['menucompleto', 'help', 'fullmenu']
  185. handler.command = /^(menu|menรบ|memu|memรบ|help|info|comandos|2help|menu1.2|ayuda|commands|commandos|m|\?)$/i
  186. handler.register = false
  187. handler.exp = 3
  188. export default handler
  189. const more = String.fromCharCode(8206)
  190. const readMore = more.repeat(4001)
  191. function clockString(ms) {
  192. let h = isNaN(ms) ? '--' : Math.floor(ms / 3600000)
  193. let m = isNaN(ms) ? '--' : Math.floor(ms / 60000) % 60
  194. let s = isNaN(ms) ? '--' : Math.floor(ms / 1000) % 60
  195. return [h, m, s].map(v => v.toString().padStart(2, 0)).join(':')
  196. }
  197. function toNum(number) {
  198. if (number >= 1000 && number < 1000000) {
  199. return (number / 1000).toFixed(1) + 'k';
  200. } else if (number >= 1000000) {
  201. return (number / 1000000).toFixed(1) + 'M';
  202. } else if (number <= -1000 && number > -1000000) {
  203. return (number / 1000).toFixed(1) + 'k';
  204. } else if (number <= -1000000) {
  205. return (number / 1000000).toFixed(1) + 'M';
  206. } else {
  207. return number.toString();
  208. }
  209. }