print.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import {WAMessageStubType} from '@whiskeysockets/baileys';
  2. import PhoneNumber from 'awesome-phonenumber'
  3. import chalk from 'chalk'
  4. import { watchFile } from 'fs'
  5. const terminalImage = global.opts['img'] ? require('terminal-image') : ''
  6. const urlRegex = (await import('url-regex-safe')).default({ strict: false })
  7. export default async function (m, conn = { user: {} }) {
  8. let _name = await conn.getName(m.sender)
  9. let sender = PhoneNumber('+' + m.sender.replace('@s.whatsapp.net', '')).getNumber('international') + (_name ? ' ~' + _name : '')
  10. let chat = await conn.getName(m.chat)
  11. let img
  12. try {
  13. if (global.opts['img'])
  14. img = /sticker|image/gi.test(m.mtype) ? await terminalImage.buffer(await m.download()) : false
  15. } catch (e) {
  16. console.error(e)
  17. }
  18. let filesize = (m.msg ?
  19. m.msg.vcard ?
  20. m.msg.vcard.length :
  21. m.msg.fileLength ?
  22. m.msg.fileLength.low || m.msg.fileLength :
  23. m.msg.axolotlSenderKeyDistributionMessage ?
  24. m.msg.axolotlSenderKeyDistributionMessage.length :
  25. m.text ?
  26. m.text.length :
  27. 0
  28. : m.text ? m.text.length : 0) || 0
  29. let user = global.db.data.users[m.sender]
  30. let me = PhoneNumber('+' + (conn.user?.jid).replace('@s.whatsapp.net', '')).getNumber('international')
  31. console.log(`${chalk.redBright('%s')} ${chalk.black(chalk.bgYellow('%s'))} ${chalk.black(chalk.bgGreen('%s'))} ${chalk.magenta('%s [%s %sB]')}
  32. ${chalk.green('%s')} ${chalk.yellow('%s%s')} ${chalk.blueBright('-')} ${chalk.green('%s')} ${chalk.cyanBright(chalk.blueBright('%s'))}`.trim(),
  33. me + ' ~' + conn.user.name + `${conn.user.jid == global.conn.user.jid ? '' : ' (𝗦𝗨𝗕 𝗕𝗢𝗧)'}`,
  34. (m.messageTimestamp ? new Date(1000 * (m.messageTimestamp.low || m.messageTimestamp)) : new Date).toTimeString(),
  35. m.messageStubType ? WAMessageStubType[m.messageStubType] : '',
  36. filesize,
  37. filesize === 0 ? 0 : (filesize / 1009 ** Math.floor(Math.log(filesize) / Math.log(1000))).toFixed(1),
  38. ['', ...'KMGTP'][Math.floor(Math.log(filesize) / Math.log(1000))] || '',
  39. sender,
  40. m ? m.exp : '?',
  41. user ? '|' + user.exp + '|' + user.money : '' + ('|' + user.level + user.limit ),
  42. //user ? '|' + user.exp + '|' + user.money + '|' + user.limit : '' + ('|' + user.level),
  43. m.chat + (chat ? ' ~' + chat : ''),
  44. m.mtype ? m.mtype.replace(/message$/i, '').replace('audio', m.msg.ptt ? 'PTT' : 'audio').replace(/^./, v => v.toUpperCase()) : ''
  45. )
  46. if (img) console.log(img.trimEnd())
  47. if (typeof m.text === 'string' && m.text) {
  48. let log = m.text.replace(/\u200e+/g, '')
  49. // Nuevos formatos/estilos para el texto en consola
  50. // Créditos para: https://github.com/GataNina-Li
  51. let mdRegex = /(?<=(?:^|[\s\n])\S?)(?:([*_~`])(?!`)(.+?)\1|```((?:.|[\n\r])+?)```|`([^`]+?)`)(?=\S?(?:[\s\n]|$))/g
  52. let mdFormat = (depth = 4) => (_, type, text, monospace) => {
  53. let types = {
  54. '_': 'italic',
  55. '*': 'bold',
  56. '~': 'strikethrough',
  57. '`': 'bgGray'
  58. }
  59. text = text || monospace
  60. let formatted = !types[type] || depth < 1 ? text : chalk[types[type]](text.replace(/`/g, '').replace(mdRegex, mdFormat(depth - 1)))
  61. return formatted
  62. }
  63. log = log.replace(mdRegex, mdFormat(4))
  64. log = log.split('\n').map(line => {
  65. if (line.trim().startsWith('>')) {
  66. return chalk.bgGray.dim(line.replace(/^>/, '┃'))
  67. } else if (/^([1-9]|[1-9][0-9])\./.test(line.trim())) {
  68. return line.replace(/^(\d+)\./, (match, number) => {
  69. const padding = number.length === 1 ? ' ' : ' '
  70. return padding + number + '.'
  71. })
  72. } else if (/^[-*]\s/.test(line.trim())) {
  73. return line.replace(/^[*-]/, ' •')
  74. }
  75. return line
  76. }).join('\n')
  77. if (log.length < 1024)
  78. log = log.replace(urlRegex, (url, i, text) => {
  79. let end = url.length + i
  80. return i === 0 || end === text.length || (/^\s$/.test(text[end]) && /^\s$/.test(text[i - 1])) ? chalk.blueBright(url) : url
  81. })
  82. log = log.replace(mdRegex, mdFormat(4))
  83. if (m.mentionedJid) for (let user of m.mentionedJid) log = log.replace('@' + user.split`@`[0], chalk.blueBright('@' +await conn.getName(user)))
  84. console.log(m.error != null ? chalk.red(log) : m.isCommand ? chalk.yellow(log) : log)
  85. }
  86. if (m.messageStubParameters) console.log(m.messageStubParameters.map(jid => {
  87. jid = conn.decodeJid(jid)
  88. let name = conn.getName(jid)
  89. return chalk.gray(PhoneNumber('+' + jid.replace('@s.whatsapp.net', '')).getNumber('international') + (name ? ' ~' + name : ''))
  90. }).join(', '))
  91. if (/document/i.test(m.mtype)) console.log(`🗂️ ${m.msg.fileName || m.msg.displayName || 'Document'}`)
  92. else if (/ContactsArray/i.test(m.mtype)) console.log(`👨‍👩‍👧‍👦 ${' ' || ''}`)
  93. else if (/contact/i.test(m.mtype)) console.log(`👨 ${m.msg.displayName || ''}`)
  94. else if (/audio/i.test(m.mtype)) {
  95. const duration = m.msg.seconds
  96. console.log(`${m.msg.ptt ? '🎤ㅤ(PTT ' : '🎵ㅤ('}AUDIO) ${Math.floor(duration / 60).toString().padStart(2, 0)}:${(duration % 60).toString().padStart(2, 0)}`)
  97. }
  98. console.log()
  99. }
  100. let file = global.__filename(import.meta.url)
  101. watchFile(file, () => {
  102. console.log(chalk.redBright("Update 'lib/print.js'"))})