Maison  >  Article  >  développement back-end  >  Données de conversation Miaou

Données de conversation Miaou

PHPz
PHPzavant
2024-02-10 10:10:08672parcourir

Données de conversation Miaou

L'éditeur PHP Zimo vous propose un outil magique appelé "Meow Dialogue Data". Cet outil peut aider les utilisateurs à traiter et analyser rapidement les données de conversation, et fournit des fonctions pratiques de gestion des données de conversation et de statistiques. Les utilisateurs n'ont qu'à saisir le texte de la conversation, et les données de la conversation Meow peuvent être automatiquement traitées et diverses informations statistiques utiles peuvent être générées, telles que la fréquence des conversations, l'analyse des mots clés, etc. Cet outil est simple à utiliser et puissant, et convient parfaitement aux utilisateurs qui ont besoin d'analyser les données de conversation.

Contenu de la question

J'essaie de créer un client Tui pour WhatsApp en utilisant Whatsmeow.

Après une demi-journée de recherche et de lecture de documentation, je ne trouve toujours pas le moyen d'obtenir les données de conversation d'un seul contact. Toute aide serait grandement appréciée.

J'ai trouvé parsewebmessage mais je ne sais pas trop comment l'utiliser.

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

En fait, je ne suis même pas sûr que c'est ce que je recherche

Solution de contournement

Eh bien, vous avez essentiellement créé un lien vers la section de la documentation qui contient les informations que vous recherchez. parsewebmessage 调用的返回类型是 events.message,记录在 此处。它包含类型为 messageinfoinfo 字段(同样, 记录在此处)。反过来,这个 messageinfo 类型嵌入 messagesource Types Voir la documentation ici comme suit :

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
}

Donc, pour avoir les contacts qui ont envoyé un message donné, compte tenu de votre code evt, err := cli.parsewebmessage(), vous devez vérifier :

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)
}

Vous pouvez également ignorer les messages envoyés en procédant simplement comme suit :

if evt.info.isfromme {
    continue
}

Les types de champs evt.info.chat et evt.info.sender sont tous deux jid , Enregistré ici evt.info.chatevt.info.sender 字段的类型均为 jid 记录在此处。此 id 类型本质上有 2 种变体:用户和服务器 jid 以及 ad-jid(用户、代理和设备)。您可以通过检查 jid.ad. Il existe essentiellement 2 variantes de ce type d'identifiant : jid utilisateur et serveur et ad-jid (utilisateur, agent et appareil). Vous pouvez distinguer les deux en vérifiant l'indicateur jid.ad.

Je n'ai pas du tout utilisé ce module, j'ai juste jeté un bref coup d'œil à la documentation, mais d'après ce que j'ai compris, ce module permet d'écrire un handler qui recevra un events.messagepour tout vous recevez > Tapez. En vérifiant evt.info.isgroup, vous pouvez déterminer si le message que nous envoyons est dans une discussion de groupe ou s'il s'agit de quelque chose dans vos conversations individuelles. En vous basant sur evt.info.sender et evt.info.chat, vous pouvez découvrir qui a envoyé le message. evt.info.sender comme jid vous permet à son tour d'appeler getuserinfo Méthode events.message 类型。通过检查evt.info.isgroup,你可以弄清楚我们发送的消息是在群聊中,还是在你们的个人对话中的事情。根据evt.info.senderevt.info.chat,您可以查出​​消息是谁发送的。 evt.info.sender 作为 jid 反过来允许您调用 getuserinfo 方法,传入 jid,返回一个 userinfo, passe en jid, renvoie un objet userinfo tel qu'enregistré ici , nom d'affichage, image, statut, etc...

Donc je suppose que vous cherchez quelque chose de similaire :

// 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)
    }
}

Notez que le type contatinfo n'est pas apparu tout de suite dans la documentation, mais je suis tombé dessus dans le référentiel.

Quoi qu'il en soit, je ne suis pas sûr de ce que vous voulez faire et comment/pourquoi vous êtes bloqué. Tout ce que vous avez à faire pour trouver ces informations est de vérifier le type de retour de la méthode parsewebmessage que vous avez mentionnée, de vérifier quelques types, puis de faire défiler certaines des méthodes répertoriées/documentées pour avoir une idée générale de la façon d'obtenir toutes les informations. les données dont vous pourriez avoir besoin...

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer