phaticusthiccy / WhatsAsenaDuplicated

New Repository for WhatsAsena. Also First UserBot for WhatsApp.
GNU General Public License v3.0
275 stars 1.27k forks source link

Update config.js #207

Closed Breanne2541 closed 2 years ago

Breanne2541 commented 2 years ago

let util = require('util') let simple = require('./lib/simple') let { MessageType } = require('@adiwajshing/baileys')

const isNumber = x => typeof x === 'number' && !isNaN(x) const delay = ms => isNumber(ms) && new Promise(resolve => setTimeout(resolve, ms)) module.exports = { async handler(chatUpdate) { // console.log(chatUpdate) if (!chatUpdate.hasNewMessage) return if (!chatUpdate.messages && !chatUpdate.count) return let m = chatUpdate.messages.all()[0] try { simple.smsg(this, m) switch (m.mtype) { case MessageType.image: case MessageType.video: case MessageType.audio: if (!m.key.fromMe) await delay(1000) if (!m.msg.url) await this.updateMediaMessage(m) break } m.exp = 0 m.limit = false try { let user = global.db.data.users[m.sender] if (typeof user !== 'object') global.db.data.users[m.sender] = {} if (user) { if (!isNumber(user.exp)) user.exp = 0 if (!isNumber(user.limit)) user.limit = 10 if (!isNumber(user.lastclaim)) user.lastclaim = 0 if (!('registered' in user)) user.registered = false if (!user.registered) { if (!('name' in user)) user.name = this.getName(m.sender) if (!isNumber(user.age)) user.age = -1 if (!isNumber(user.regTime)) user.regTime = -1 } if (!isNumber(user.afk)) user.afk = -1 if (!('afkReason' in user)) user.afkReason = '' if (!('banned' in user)) user.banned = false if (!isNumber(user.level)) user.level = 0 if (!user.role) user.role = 'Beginner' if (!('autolevelup' in user)) user.autolevelup = false } else global.db.data.users[m.sender] = { exp: 0, limit: 10, lastclaim: 0, registered: false, name: this.getName(m.sender), age: -1, regTime: -1, afk: -1, afkReason: '', banned: false, level: 0, role: 'Beginner', autolevelup: false, }

    let chat = global.db.data.chats[m.chat]
    if (typeof chat !== 'object') global.db.data.chats[m.chat] = {}
    if (chat) {
      if (!('isBanned' in chat)) chat.isBanned = false
      if (!('welcome' in chat)) chat.welcome = false
      if (!('detect' in chat)) chat.detect = false
      if (!('sWelcome' in chat)) chat.sWelcome = ''
      if (!('sBye' in chat)) chat.sBye = ''
      if (!('sPromote' in chat)) chat.sPromote = ''
      if (!('sDemote' in chat)) chat.sDemote = ''
      if (!('delete' in chat)) chat.delete = true
      if (!('antiLink' in chat)) chat.antiLink = false
      if (!('viewonce' in chat)) chat.viewonce = false
    } else global.db.data.chats[m.chat] = {
      isBanned: false,
      welcome: false,
      detect: false,
      sWelcome: '',
      sBye: '',
      sPromote: '',
      sDemote: '',
      delete: true,
      antiLink: false,
      viewonce: false,
    }
  } catch (e) {
    console.error(e)
  }
  if (opts['nyimak']) return
  if (!m.fromMe && opts['self']) return
  if (opts['pconly'] && m.chat.endsWith('g.us')) return
  if (opts['gconly'] && !m.chat.endsWith('g.us')) return
  if (opts['swonly'] && m.chat !== 'status@broadcast') return
  if (typeof m.text !== 'string') m.text = ''
  for (let name in global.plugins) {
    let plugin = global.plugins[name]
    if (!plugin) continue
    if (plugin.disabled) continue
    if (!plugin.all) continue
    if (typeof plugin.all !== 'function') continue
    try {
      await plugin.all.call(this, m, chatUpdate)
    } catch (e) {
      if (typeof e === 'string') continue
      console.error(e)
    }
  }
  if (m.isBaileys) return
  m.exp += Math.ceil(Math.random() * 10)

  let usedPrefix
  let _user = global.db.data && global.db.data.users && global.db.data.users[m.sender]

  let isROwner = [global.conn.user.jid, ...global.owner].map(v => v.replace(/[^0-9]/g, '') + '@s.whatsapp.net').includes(m.sender)
  let isOwner = isROwner || m.fromMe
  let isMods = isOwner || global.mods.map(v => v.replace(/[^0-9]/g, '') + '@s.whatsapp.net').includes(m.sender)
  let isPrems = isROwner || global.prems.map(v => v.replace(/[^0-9]/g, '') + '@s.whatsapp.net').includes(m.sender)
  let groupMetadata = m.isGroup ? this.chats.get(m.chat).metadata || await this.groupMetadata(m.chat) : {} || {}
  let participants = m.isGroup ? groupMetadata.participants : [] || []
  let user = m.isGroup ? participants.find(u => u.jid == m.sender) : {} // User Data
  let bot = m.isGroup ? participants.find(u => u.jid == this.user.jid) : {} // Your Data
  let isAdmin = user.isAdmin || user.isSuperAdmin || false // Is User Admin?
  let isBotAdmin = bot.isAdmin || bot.isSuperAdmin || false // Are you Admin?
  for (let name in global.plugins) {
    let plugin = global.plugins[name]
    if (!plugin) continue
    if (plugin.disabled) continue
    if (!opts['restrict']) if (plugin.tags && plugin.tags.includes('admin')) continue
    const str2Regex = str => str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&')
    let _prefix = plugin.customPrefix ? plugin.customPrefix : conn.prefix ? conn.prefix : global.prefix
    let match = (_prefix instanceof RegExp ? // RegExp Mode?
      [[_prefix.exec(m.text), _prefix]] :
      Array.isArray(_prefix) ? // Array?
        _prefix.map(p => {
          let re = p instanceof RegExp ? // RegExp in Array?
            p :
            new RegExp(str2Regex(p))
          return [re.exec(m.text), re]
        }) :
        typeof _prefix === 'string' ? // String?
          [[new RegExp(str2Regex(_prefix)).exec(m.text), new RegExp(str2Regex(_prefix))]] :
          [[[], new RegExp]]
    ).find(p => p[1])
    if (typeof plugin.before === 'function') if (await plugin.before.call(this, m, {
      match,
      conn: this,
      participants,
      groupMetadata,
      user,
      bot,
      isROwner,
      isOwner,
      isAdmin,
      isBotAdmin,
      isPrems,
      chatUpdate,
    })) continue
    if (typeof plugin !== 'function') continue
    if ((usedPrefix = (match[0] || '')[0])) {
      let noPrefix = m.text.replace(usedPrefix, '')
      let [command, ...args] = noPrefix.trim().split` `.filter(v => v)
      args = args || []
      let _args = noPrefix.trim().split` `.slice(1)
      let text = _args.join` `
      command = (command || '').toLowerCase()
      let fail = plugin.fail || global.dfail // When failed
      let isAccept = plugin.command instanceof RegExp ? // RegExp Mode?
        plugin.command.test(command) :
        Array.isArray(plugin.command) ? // Array?
          plugin.command.some(cmd => cmd instanceof RegExp ? // RegExp in Array?
            cmd.test(command) :
            cmd === command
          ) :
          typeof plugin.command === 'string' ? // String?
            plugin.command === command :
            false

      if (!isAccept) continue
      m.plugin = name
      if (m.chat in global.db.data.chats || m.sender in global.db.data.users) {
        let chat = global.db.data.chats[m.chat]
        let user = global.db.data.users[m.sender]
        if (name != 'unbanchat.js' && chat && chat.isBanned) return // Except this
        if (name != 'unbanuser.js' && user && user.banned) return
      }
      if (plugin.rowner && plugin.owner && !(isROwner || isOwner)) { // Both Owner
        fail('owner', m, this)
        continue
      }
      if (plugin.rowner && !isROwner) { // Real Owner
        fail('rowner', m, this)
        continue
      }
      if (plugin.owner && !isOwner) { // Number Owner
        fail('owner', m, this)
        continue
      }
      if (plugin.mods && !isMods) { // Moderator
        fail('mods', m, this)
        continue
      }
      if (plugin.premium && !isPrems) { // Premium
        fail('premium', m, this)
        continue
      }
      if (plugin.group && !m.isGroup) { // Group Only
        fail('group', m, this)
        continue
      } else if (plugin.botAdmin && !isBotAdmin) { // You Admin
        fail('botAdmin', m, this)
        continue
      } else if (plugin.admin && !isAdmin) { // User Admin
        fail('admin', m, this)
        continue
      }
      if (plugin.private && m.isGroup) { // Private Chat Only
        fail('private', m, this)
        continue
      }
      if (plugin.register == true && _user.registered == false) { // Butuh daftar?
        fail('unreg', m, this)
        continue
      }

      m.isCommand = true
      let xp = 'exp' in plugin ? parseInt(plugin.exp) : 17 // XP Earning per command
      if (xp > 200) m.reply('Ngecit -_-') // Hehehe
      else m.exp += xp
      if (!isPrems && plugin.limit && global.db.data.users[m.sender].limit < plugin.limit * 1) {
        this.reply(m.chat, `Limit anda habis, silahkan beli melalui *${usedPrefix}buy*`, m)
        continue // Limit habis
      }
      if (plugin.level > _user.level) {
        this.reply(m.chat, `diperlukan level ${plugin.level} untuk menggunakan perintah ini. Level kamu ${_user.level}`, m)
        continue // If the level has not been reached
      }
      let extra = {
        match,
        usedPrefix,
        noPrefix,
        _args,
        args,
        command,
        text,
        conn: this,
        participants,
        groupMetadata,
        user,
        bot,
        isROwner,
        isOwner,
        isAdmin,
        isBotAdmin,
        isPrems,
        chatUpdate,
      }
      try {
        await plugin.call(this, m, extra)
        if (!isPrems) m.limit = m.limit || plugin.limit || false
      } catch (e) {
        // Error occured
        m.error = e
        console.error(e)
        if (e) {
          let text = util.format(e.message ? e.message : e)
          for (let key of Object.values(global.APIKeys))
            text = text.replace(new RegExp(key, 'g'), '#HIDDEN#')
          m.reply(text)
        }
      } finally {
        // m.reply(util.format(_user))
        if (typeof plugin.after === 'function') {
          try {
            await plugin.after.call(this, m, extra)
          } catch (e) {
            console.error(e)
          }
        }
        if (m.limit) m.reply(+ m.limit + ' Limit terpakai')
      }
      break
    }
  }
} finally {
  //console.log(global.db.data.users[m.sender])
  let user, stats = global.db.data.stats
  if (m) {
    if (m.sender && (user = global.db.data.users[m.sender])) {
      user.exp += m.exp
      user.limit -= m.limit * 1
    }

    let stat
    if (m.plugin) {
      let now = + new Date
      if (m.plugin in stats) {
        stat = stats[m.plugin]
        if (!isNumber(stat.total)) stat.total = 1
        if (!isNumber(stat.success)) stat.success = m.error != null ? 0 : 1
        if (!isNumber(stat.last)) stat.last = now
        if (!isNumber(stat.lastSuccess)) stat.lastSuccess = m.error != null ? 0 : now
      } else stat = stats[m.plugin] = {
        total: 1,
        success: m.error != null ? 0 : 1,
        last: now,
        lastSuccess: m.error != null ? 0 : now
      }
      stat.total += 1
      stat.last = now
      if (m.error == null) {
        stat.success += 1
        stat.lastSuccess = now
      }
    }
  }

  try {
    require('./lib/print')(m, this)
  } catch (e) {
    console.log(m, m.quoted, e)
  }
  if (opts['autoread']) await this.chatRead(m.chat).catch(() => { })
}

}, async participantsUpdate({ jid, participants, action }) { let chat = global.db.data.chats[jid] || {} let text = '' switch (action) { case 'add': case 'remove': if (chat.welcome) { let groupMetadata = await this.groupMetadata(jid) for (let user of participants) { let pp = './src/avatar_contact.png' try { pp = await this.getProfilePicture(user) } catch (e) { } finally { text = (action === 'add' ? (chat.sWelcome || this.welcome || conn.welcome || 'Welcome, @user!').replace('@subject', this.getName(jid)).replace('@desc', groupMetadata.desc) : (chat.sBye || this.bye || conn.bye || 'Bye, @user!')).replace('@user', '@' + user.split('@')[0]) this.sendFile(jid, pp, 'pp.jpg', text, null, false, { contextInfo: { mentionedJid: [user] } }) } } } break case 'promote': text = (chat.sPromote || this.spromote || conn.spromote || '@user is now Admin') case 'demote': if (!text) text = (chat.sDemote || this.sdemote || conn.sdemote || '@user is no longer Admin') text = text.replace('@user', '@' + participants[0].split('@')[0]) if (chat.detect) this.sendMessage(jid, text, MessageType.extendedText, { contextInfo: { mentionedJid: this.parseMention(text) } }) break } }, async delete(m) { if (m.key.fromMe) return let chat = global.db.data.chats[m.key.remoteJid] if (chat.delete) return await this.reply(m.key.remoteJid, Terdeteksi @${m.participant.split@[0]} telah menghapus pesan Untuk mematikan fitur ini, ketik *.enable delete* .trim(), m.message, { contextInfo: { mentionedJid: [m.participant] } }) this.copyNForward(m.key.remoteJid, m.message).catch(e => console.log(e, m)) }, async onCall(json) { let { from } = json[2][0][1] let users = global.db.data.users let user = users[from] || {} if (user.whitelist) return switch (this.callWhitelistMode) { case 'mycontact': if (from in this.contacts && 'short' in this.contacts[from]) return break } await this.sendMessage(from, 'Maaf, karena anda menelfon bot. anda diblokir otomatis', MessageType.extendedText) await this.blockUser(from, 'add') } }

global.dfail = (type, m, conn) => { let msg = { rowner: 'Perintah ini hanya dapat digunakan oleh OWWNER!1!1!', owner: 'Perintah ini hanya dapat digunakan oleh Owner Bot!', mods: 'Perintah ini hanya dapat digunakan oleh Moderator !', premium: 'Perintah ini hanya untuk member Premium !', group: 'Perintah ini hanya dapat digunakan di grup!', private: 'Perintah ini hanya dapat digunakan di Chat Pribadi!', admin: 'Perintah ini hanya untuk Admin grup!', botAdmin: 'Jadikan bot sebagai Admin untuk menggunakan perintah ini!', unreg: 'Silahkan daftar untuk menggunakan fitur ini dengan cara mengetik:\n\n#daftar nama.umur\n\nContoh: #daftar Manusia.16' }[type] if (msg) return m.reply(msg) }

let fs = require('fs') let chalk = require('chalk') let file = require.resolve(__filename) fs.watchFile(file, () => { fs.unwatchFile(file) console.log(chalk.redBright("Update 'handler.js'")) delete require.cache[file] if (global.reloadHandler) console.log(global.reloadHandler()) })

github-actions[bot] commented 2 years ago

This PR is stale because it has been open 5 days with no activity. Remove the stale label or comment or this will be closed in 2 days