Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Data perbualan meow

Data perbualan meow

PHPz
PHPzke hadapan
2024-02-10 10:10:08671semak imbas

Data perbualan meow

Editor PHP Zimo membawakan anda alat ajaib yang dipanggil "Data Dialog Meow". Alat ini boleh membantu pengguna memproses dan menganalisis data perbualan dengan cepat, serta menyediakan pengurusan data perbualan dan fungsi statistik yang mudah. Pengguna hanya perlu memasukkan teks perbualan, dan data perbualan Meow Meow boleh diproses secara automatik dan pelbagai maklumat statistik berguna boleh dijana, seperti kekerapan perbualan, analisis kata kunci, dsb. Alat ini mudah dikendalikan dan berkuasa, dan sangat sesuai untuk pengguna yang perlu menganalisis data perbualan.

Isi soalan

Saya sedang cuba membina client tui untuk whatsapp menggunakan whatsmeow.

Selepas setengah hari mencari dan membaca dokumentasi, saya masih tidak dapat mencari cara untuk mendapatkan data perbualan satu kenalan. Sebarang bantuan amatlah dihargai.

Saya menjumpai parsewebmessage tetapi saya tidak pasti cara menggunakannya.

chatJID, err := types.ParseJID(conv.GetId())
for _, historyMsg := range conv.GetMessages() {
    evt, err := cli.ParseWebMessage(chatJID, historyMsg.GetMessage())
    yourNormalEventHandler(evt)
}

Malah, saya pun tidak pasti sama ada ini yang saya cari

Penyelesaian

Nah, anda pada asasnya memaut ke bahagian dokumentasi yang mengandungi maklumat yang anda cari. parsewebmessage 调用的返回类型是 events.message,记录在 此处。它包含类型为 messageinfoinfo 字段(同样, 记录在此处)。反过来,这个 messageinfo 类型嵌入 messagesource Jenis Lihat dokumentasi di sini seperti berikut:

type messagesource struct {
    chat     jid  // the chat where the message was sent.
    sender   jid  // the user who sent the message.
    isfromme bool // whether the message was sent by the current user instead of someone else.
    isgroup  bool // whether the chat is a group chat or broadcast list.

    // when sending a read receipt to a broadcast list message, the chat is the broadcast list
    // and sender is you, so this field contains the recipient of the read receipt.
    broadcastlistowner jid
}

Jadi, untuk mendapatkan kenalan yang menghantar mesej yang diberikan, diberikan kod anda evt, err := cli.parsewebmessage(), anda perlu menyemak:

evt, err := cli.parsewebmessage(chatjid, historymsg.getmessage())
if err != nil {
    // handle error, of course
}
fmt.printf("sender id: %s\nsent in chat: %s\n", evt.info.sender, evt.info.chat)
if evt.info.isgroup {
    fmt.printf("%s is a group chat\n", evt.info.chat)
}

Anda juga boleh melangkau mesej yang dihantar dengan hanya melakukan perkara berikut:

if evt.info.isfromme {
    continue
}

Jenis medan evt.info.chat dan evt.info.sender adalah kedua-duanya jid , Dirakam di sinievt.info.chatevt.info.sender 字段的类型均为 jid 记录在此处。此 id 类型本质上有 2 种变体:用户和服务器 jid 以及 ad-jid(用户、代理和设备)。您可以通过检查 jid.ad. Pada asasnya terdapat 2 variasi jenis id ini: pengguna dan pelayan jid dan ad-jid (pengguna, ejen dan peranti). Anda boleh membezakan antara kedua-duanya dengan menyemak bendera jid.ad.

Saya tidak menggunakan modul ini sama sekali, saya hanya melihat sekilas dokumentasi, tetapi dari apa yang saya faham, modul ini membolehkan anda menulis pengendali yang akan menerima events.messageuntuk segala-galanya anda terima > Taip. Dengan menyemak evt.info.isgroup, anda boleh mengetahui sama ada mesej yang kami hantar adalah dalam sembang kumpulan atau sama ada ia sesuatu dalam perbualan individu anda. Berdasarkan evt.info.sender dan evt.info.chat anda boleh mengetahui siapa yang menghantar mesej. evt.info.sender sebagai jid seterusnya membolehkan anda memanggil getuserinfo Kaedah <code>events.message 类型。通过检查evt.info.isgroup,你可以弄清楚我们发送的消息是在群聊中,还是在你们的个人对话中的事情。根据evt.info.senderevt.info.chat,您可以查出​​消息是谁发送的。 evt.info.sender 作为 jid 反过来允许您调用 getuserinfo 方法,传入 jid,返回一个 userinfo, masukkan jid, kembalikan objek info pengguna seperti yang direkodkan di sini , nama paparan, gambar, status, dll...

Jadi saya rasa anda sedang mencari sesuatu yang serupa:

// some map of all messages from a given person, sent directly to you
contacts := cli.GetAllContacts() // returns map[JID]ContactInfo
personMsg := map[string][]*events.Message
evt, err := cli.ParseWebMessage(chatJID, historyMsg.GetMessage())
if err != nil {
    // handle
}
if !evt.Info.IsFromMe && !evt.Info.IsGroup {// not a group, not sent by me
    info, _ := cli.GetUserInfo([]types.JID{evt.Info.Sender})
    if contact, ok := contacts[info[evt.Info.Sender]; ok {
        msgs, ok := personMsg[contact.PushName]
        if !ok {
            msgs := []*events.Message{}
        }
        personMsg[contact.PushName] = append(msgs, evt)
    }
}

Perhatikan bahawa jenis contatinfo tidak muncul dalam dokumentasi serta-merta, tetapi saya terjumpanya dalam repositori.

Apa pun, saya tidak pasti apa yang anda mahu lakukan dan bagaimana/mengapa anda tersekat. Apa yang anda perlu lakukan untuk mencari maklumat ini ialah semak jenis pemulangan kaedah parsewebmessage yang anda nyatakan, semak beberapa jenis, dan kemudian tatal melalui beberapa kaedah yang disenaraikan/didokumenkan untuk mendapatkan gambaran kasar tentang cara mendapatkan semua data yang mungkin anda perlukan...

Atas ialah kandungan terperinci Data perbualan meow. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam