Untitled

 avatar
unknown
plain_text
a month ago
4.5 kB
2
Indexable
javascript:(function()%7Bvar _contacts %3D %5B%5D%3B%0Aclass ContactFinder %7B%0A  %23db%3B%0A  %23chatToFind%3B%0A  %23dbName %3D "model-storage"%3B%0A  %23chatsCol %3D "chat"%3B%0A  %23contactCol %3D "contact"%3B%0A  %23groupCol %3D "participant"%3B%0A%0A  constructor(chatGroupName) %7B%0A    this.%23chatToFind %3D chatGroupName%3B%0A  %7D%0A%0A  async openConnection() %7B%0A    if (!this.%23db) %7B%0A      const dbName %3D this.%23dbName%3B%0A      this.%23db %3D await new Promise((resolve%2C reject) %3D> %7B%0A        let request %3D indexedDB.open(dbName)%3B%0A        request.onerror %3D (event) %3D> %7B%0A          reject(event)%3B%0A        %7D%3B%0A        request.onsuccess %3D (event) %3D> %7B%0A          resolve(event.target.result)%3B%0A        %7D%3B%0A      %7D)%3B%0A    %7D%0A    return this.%23db%3B%0A  %7D%0A%0A  async %23promisifyCol(collection%2C query%2C count) %7B%0A    const db %3D await this.openConnection()%3B%0A    return new Promise((resolve%2C reject) %3D> %7B%0A      const request %3D db.transaction(collection).objectStore(collection).getAll(query%2C count)%3B%0A%0A      request.onerror %3D (event) %3D> %7B%0A        reject(event)%3B%0A      %7D%3B%0A      request.onsuccess %3D (event) %3D> %7B%0A        resolve(event.target.result)%3B%0A      %7D%3B%0A    %7D)%3B%0A  %7D%0A%0A  async %23getChats() %7B%0A    const allChats %3D await this.%23promisifyCol(this.%23chatsCol)%3B%0A    const chatToFind %3D this.%23chatToFind%3B%0A    return allChats.filter((chat) %3D> %7B%0A      return chat.name %26%26 chat.name.includes(chatToFind)%3B%0A    %7D)%3B%0A  %7D%0A%0A  async %23getGroups() %7B%0A    const chats %3D (await this.%23getChats()).map((chat) %3D> chat.id)%3B%0A    const allGroups %3D await this.%23promisifyCol(this.%23groupCol)%3B%0A%0A    return allGroups.filter((group) %3D> %7B%0A      return group.groupId %26%26 chats.includes(group.groupId)%3B%0A    %7D)%3B%0A  %7D%0A%0A  async %23getGroupParticipants() %7B%0A    const groups %3D await this.%23getGroups()%3B%0A    const map %3D new Map()%3B%0A%0A    groups.forEach((group) %3D> %7B%0A      group.participants.forEach((par) %3D> %7B%0A        const num %3D par.replace("%40c.us"%2C "")%3B%0A        map.set(num%2C num)%3B%0A      %7D)%3B%0A    %7D)%3B%0A%0A    return map%3B%0A  %7D%0A%0A  async %23getContacts() %7B%0A    return this.%23promisifyCol(this.%23contactCol)%3B%0A  %7D%0A%0A  async getGroupMembers() %7B%0A    const members %3D await this.%23getGroupParticipants()%3B%0A    const contacts %3D await this.%23getContacts()%3B%0A%0A    contacts.forEach((contact) %3D> %7B%0A      var num%3B%0A      if (contact.phoneNumber) %7B%0A        num %3D contact.phoneNumber.split("%40")%5B0%5D%3B%0A      %7D else if (contact.id) %7B%0A        num %3D contact.id.split("%40")%5B0%5D%3B%0A      %7D%0A      if (num %26%26 members.get(num)) %7B%0A        var m %3D %7B%0A          phoneNum%3A num%2C%0A          name%3A contact.name%2C%0A          pushname%3A contact.pushname%2C%0A        %7D%3B%0A        members.set(num%2C m)%3B%0A        _contacts.push(m)%3B%0A      %7D%0A    %7D)%3B%0A    return members%3B%0A  %7D%0A%0A%0A  async downloadMembersAsCSV() %7B%0A    const members %3D await this.getGroupMembers()%3B%0A    let csvContent %3D "data%3Atext%2Fcsv%3Bcharset%3Dutf-8%2C"%3B%0A        csvContent %2B%3D '"Phone"%2C"Name"%2C"Push Name"%5Cr%5Cn'%3B%0A%0A    for (const %5Bkey%2C value%5D of members.entries()) %7B%0A      const values %3D %5B%0A        value.phoneNum %7C%7C ""%2C%0A        value.name %7C%7C ""%2C%0A        value.pushname %7C%7C ""%2C%0A      %5D%3B%0A      const row %3D values.map((value) %3D> %60"%24%7Bvalue%7D"%60).join("%2C")%3B%0A      csvContent %2B%3D row %2B "%5Cr%5Cn"%3B%0A    %7D%0A    console.log(csvContent)%3B%0A%0A    const encodedUri %3D encodeURI(csvContent)%3B%0A    var link %3D document.createElement("a")%3B%0A    link.setAttribute("href"%2C encodedUri)%3B%0A    link.setAttribute("download"%2C "WhatsAppContacts.csv")%3B%0A    document.body.appendChild(link)%3B %2F%2F Required for FF%0A    link.click()%3B%0A  %7D%0A%0A%0A%0A%7D%0A%0A(async () %3D> %7B%0A  const contactFinder %3D new ContactFinder(window.prompt("Nombre del grupo%3A"))%3B%0A  const members %3D await contactFinder.getGroupMembers()%3B %2F%2F This will return a JS Map Object%0A  await contactFinder.downloadMembersAsCSV()%3B %2F%2F This will download the contacts as CSV%0A  console.log(_contacts)%3B%0A%7D)()%3B%7D)()%3B
Leave a Comment