diff options
Diffstat (limited to 'bridge/whatsappmulti/helpers.go')
-rw-r--r-- | bridge/whatsappmulti/helpers.go | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/bridge/whatsappmulti/helpers.go b/bridge/whatsappmulti/helpers.go index 75d9f5fd..963eafa1 100644 --- a/bridge/whatsappmulti/helpers.go +++ b/bridge/whatsappmulti/helpers.go @@ -7,7 +7,10 @@ import ( "fmt" "strings" + goproto "google.golang.org/protobuf/proto" + "go.mau.fi/whatsmeow" + "go.mau.fi/whatsmeow/binary/proto" "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/store/sqlstore" "go.mau.fi/whatsmeow/types" @@ -122,3 +125,63 @@ func (b *Bwhatsapp) getDevice() (*store.Device, error) { return device, nil } + +func (b *Bwhatsapp) getNewReplyContext(parentID string) (*proto.ContextInfo, error) { + replyInfo, err := b.parseMessageID(parentID) + + if err != nil { + return nil, err + } + + sender := fmt.Sprintf("%s@%s", replyInfo.Sender.User, replyInfo.Sender.Server) + ctx := &proto.ContextInfo{ + StanzaId: &replyInfo.MessageID, + Participant: &sender, + QuotedMessage: &proto.Message{Conversation: goproto.String("")}, + } + + return ctx, nil +} + +func (b *Bwhatsapp) parseMessageID(id string) (*Replyable, error) { + // No message ID in case action is executed on a message sent before the bridge was started + // and then the bridge cache doesn't have this message ID mapped + if id == "" { + return &Replyable{MessageID: id}, nil + } + + replyInfo := strings.Split(id, "/") + + if len(replyInfo) == 2 { + sender, err := types.ParseJID(replyInfo[0]) + + if err == nil { + return &Replyable{ + MessageID: types.MessageID(replyInfo[1]), + Sender: sender, + }, nil + } + } + + err := fmt.Errorf("MessageID does not match format of {senderJID}:{messageID} : \"%s\"", id) + + return &Replyable{MessageID: id}, err +} + +func getParentIdFromCtx(ci *proto.ContextInfo) string { + if ci != nil && ci.StanzaId != nil { + senderJid, err := types.ParseJID(*ci.Participant) + + if err == nil { + return getMessageIdFormat(senderJid, *ci.StanzaId) + } + } + + return "" +} + +func getMessageIdFormat(jid types.JID, messageID string) string { + // we're crafting our own JID str as AD JID format messes with how stuff looks on a webclient + jidStr := fmt.Sprintf("%s@%s", jid.User, jid.Server) + return fmt.Sprintf("%s/%s", jidStr, messageID) +} |