Whatsmeow данные разговора

Я пытаюсь создать клиент tui для WhatsApp , используя whatsmeow.

После полдня поиска и чтения документов я все еще не могу найти способ получить данные разговоров отдельных контактов. Любая помощь приветствуется.

Я нашел ParseWebMessage, но не очень понимаю, как им пользоваться.

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

На самом деле я даже не уверен, что это то, что я ищу

Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
0
335
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну, вы в основном ссылаетесь на ту часть документов, которая содержит информацию, которую вы ищете. Тип возврата вызова ParseWebMessageevents.Message, задокументировано здесь . Он содержит поле Info типа MessageInfo (опять же, задокументировано здесь ). В свою очередь, этот тип MessageInfo включает в себя тип MessageSource см. документацию здесь, который выглядит следующим образом:

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
}

Итак, чтобы получить контакт, который отправил данное сообщение, учитывая ваш код evt, err := cli.ParseWebMessage(), вам нужно проверить:

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

Вы также можете пропустить отправленные вами сообщения, просто выполнив следующие действия:

if evt.Info.IsFromMe {
    continue
}

Поля evt.Info.Chat и evt.Info.Sender относятся к типу JID, задокументировано здесь. По сути, существует 2 варианта этого типа идентификатора: JID пользователя и сервера и AD-JID (пользователь, агент и устройство). Вы можете различить их, отметив флаг JID.AD.

Я вообще не использовал этот модуль, я только бегло просмотрел документы, но насколько я понял, этот модуль позволяет вам написать обработчик, который будет получать тип events.Message для всего, что вы получаете. Проверяя evt.Info.IsGroup, вы можете определить, было ли сообщение отправлено в групповом чате или в вашем личном разговоре. На основе evt.Info.Sender и evt.Info.Chat вы можете определить, кто отправил сообщение. evt.Info.Sender, являющийся JID, в свою очередь, позволяет вам вызывать метод GetUserInfo , передавая JID, который возвращает вам UserInfo объект , как описано здесь, показывая имя, изображение, статус и т. д.

Итак, я думаю, вы ищете что-то в этом роде:

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

Обратите внимание, что тип ContatInfo не сразу появился в документах, но я наткнулся на него в репозитории.

В любом случае, я не совсем уверен, что вы пытаетесь сделать, и как/почему вы застряли. Все, что потребовалось, чтобы найти эту информацию, — это проверить тип возвращаемого значения метода ParseWebMessage, который вы упомянули, проверить пару типов и просмотреть некоторые из перечисленных/задокументированных методов, чтобы получить общее представление о том, как вы можете получить все данные, которые вы может быть нужно...

Спасибо за подробное объяснение. мне очень нужно было это

Winter 27.11.2022 22:00

Другие вопросы по теме