Heim  >  Artikel  >  Backend-Entwicklung  >  Miau-Gesprächsdaten

Miau-Gesprächsdaten

PHPz
PHPznach vorne
2024-02-10 10:10:08671Durchsuche

Miau-Gesprächsdaten

Der PHP-Editor Zimo bringt Ihnen ein magisches Tool namens „Meow Dialogue Data“. Dieses Tool kann Benutzern helfen, Konversationsdaten schnell zu verarbeiten und zu analysieren und bietet praktische Konversationsdatenverwaltungs- und Statistikfunktionen. Benutzer müssen nur den Konversationstext eingeben, und die Meow-Konversationsdaten können automatisch verarbeitet und verschiedene nützliche statistische Informationen generiert werden, wie z. B. Konversationshäufigkeit, Schlüsselwortanalyse usw. Dieses Tool ist einfach zu bedienen und leistungsstark und eignet sich sehr gut für Benutzer, die Konversationsdaten analysieren müssen.

Frageninhalt

Ich versuche, mit whatsmeow einen TUI-Client für WhatsApp zu erstellen.

Nachdem ich einen halben Tag lang die Dokumentation durchsucht und gelesen habe, kann ich immer noch keine Möglichkeit finden, die Gesprächsdaten eines einzelnen Kontakts abzurufen. Jede Hilfe wäre sehr dankbar.

Ich habe parsewebmessage gefunden, bin mir aber nicht ganz sicher, wie ich es verwenden soll.

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

Tatsächlich bin ich mir nicht einmal sicher, ob das das ist, wonach ich suche

Workaround

Nun, Sie haben im Grunde auf den Abschnitt der Dokumentation verlinkt, der die gesuchten Informationen enthält. parsewebmessage 调用的返回类型是 events.message,记录在 此处。它包含类型为 messageinfoinfo 字段(同样, 记录在此处)。反过来,这个 messageinfo 类型嵌入 messagesource Typen Siehe Dokumentation hier wie folgt:

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
}

Um die Kontakte zu ermitteln, die eine bestimmte Nachricht gesendet haben, müssen Sie anhand Ihres Codes evt, err := cli.parsewebmessage() Folgendes überprüfen:

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

Sie können gesendete Nachrichten auch überspringen, indem Sie einfach Folgendes tun:

if evt.info.isfromme {
    continue
}

Die Typen der Felder evt.info.chat und evt.info.sender sind beide jid , Hier aufgezeichnetevt.info.chatevt.info.sender 字段的类型均为 jid 记录在此处。此 id 类型本质上有 2 种变体:用户和服务器 jid 以及 ad-jid(用户、代理和设备)。您可以通过检查 jid.ad. Es gibt im Wesentlichen zwei Varianten dieses ID-Typs: Benutzer- und Server-JID und Ad-Jid (Benutzer, Agent und Gerät). Sie können zwischen den beiden unterscheiden, indem Sie das Flag jid.ad überprüfen.

Ich habe dieses Modul überhaupt nicht verwendet, ich habe nur einen kurzen Blick auf die Dokumentation geworfen, aber soweit ich weiß, ermöglicht Ihnen dieses Modul, einen Handler zu schreiben, der für alles einen events.messageerhält Sie erhalten > Typ. Indem Sie evt.info.isgroup überprüfen, können Sie herausfinden, ob es sich bei der von uns gesendeten Nachricht um einen Gruppenchat oder um etwas innerhalb Ihrer individuellen Konversationen handelt. Anhand von evt.info.sender und evt.info.chat können Sie herausfinden, wer die Nachricht gesendet hat. evt.info.sender als JID ermöglicht Ihnen wiederum den Aufruf von getuserinfo -Methode events.message 类型。通过检查evt.info.isgroup,你可以弄清楚我们发送的消息是在群聊中,还是在你们的个人对话中的事情。根据evt.info.senderevt.info.chat,您可以查出​​消息是谁发送的。 evt.info.sender 作为 jid 反过来允许您调用 getuserinfo 方法,传入 jid,返回一个 userinfo, jid übergeben, ein userinfo-Objekt wie hier aufgezeichnet , Anzeigename, Bild, Status usw. zurückgeben

Ich vermute also, dass Sie nach etwas Ähnlichem suchen:

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

Beachten Sie, dass der Typ contatinfo nicht sofort in der Dokumentation auftauchte, ich aber im Repository darüber gestolpert bin.

So oder so, ich bin mir nicht ganz sicher, was du tun willst und wie/warum du feststeckst. Um diese Informationen zu finden, müssen Sie lediglich den Rückgabetyp der von Ihnen erwähnten parsewebmessage-Methode überprüfen, einige Typen überprüfen und dann durch einige der aufgelisteten/dokumentierten Methoden scrollen, um eine ungefähre Vorstellung davon zu bekommen, wie Sie alle erhalten Daten, die Sie möglicherweise benötigen...

Das obige ist der detaillierte Inhalt vonMiau-Gesprächsdaten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen