summaryrefslogtreecommitdiffstats
path: root/bridge/whatsappmulti/helpers.go
diff options
context:
space:
mode:
Diffstat (limited to 'bridge/whatsappmulti/helpers.go')
-rw-r--r--bridge/whatsappmulti/helpers.go63
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)
+}