From b15afdc291a73f2f562ab999f8449218d6b6b8a9 Mon Sep 17 00:00:00 2001 From: Aldino Kemal Date: Sun, 23 Jul 2023 21:26:23 +0700 Subject: [PATCH] feat: support webhook reaction --- src/config/settings.go | 2 +- src/domains/send/message.go | 12 ---- src/pkg/whatsapp/whatsapp.go | 84 +++++++++++++------------ src/validations/send_validation_test.go | 19 +++--- 4 files changed, 54 insertions(+), 63 deletions(-) delete mode 100644 src/domains/send/message.go diff --git a/src/config/settings.go b/src/config/settings.go index 758567b..2b48f1c 100644 --- a/src/config/settings.go +++ b/src/config/settings.go @@ -6,7 +6,7 @@ import ( ) var ( - AppVersion = "v4.7.2" + AppVersion = "v4.7.3" AppPort = "3000" AppDebug = false AppOs = fmt.Sprintf("AldinoKemal") diff --git a/src/domains/send/message.go b/src/domains/send/message.go deleted file mode 100644 index a746a4d..0000000 --- a/src/domains/send/message.go +++ /dev/null @@ -1,12 +0,0 @@ -package send - -type UpdateMessageRequest struct { - MessageID string `json:"message_id" uri:"message_id"` - Message string `json:"message" form:"message"` - Phone string `json:"phone" form:"phone"` -} - -type UpdateMessageResponse struct { - MessageID string `json:"message_id"` - Status string `json:"status"` -} diff --git a/src/pkg/whatsapp/whatsapp.go b/src/pkg/whatsapp/whatsapp.go index f4f2dcd..62a539f 100644 --- a/src/pkg/whatsapp/whatsapp.go +++ b/src/pkg/whatsapp/whatsapp.go @@ -266,47 +266,49 @@ func sendAutoReplyWebhook(evt *events.Message) error { audioMedia := evt.Message.GetAudioMessage() documentMedia := evt.Message.GetDocumentMessage() - message := evt.Message.GetConversation() - if extendedMessage := evt.Message.ExtendedTextMessage.GetText(); extendedMessage != "" { - message = extendedMessage - } - - - var quotedmessage interface{} = nil - if evt.Message.ExtendedTextMessage != nil { - quotedmessage = evt.Message.ExtendedTextMessage.ContextInfo.QuotedMessage.GetConversation() - if quotedmessage == "" { - quotedmessage = nil - } - } - - var forwarded interface{} = nil - if evt.Message.ExtendedTextMessage != nil && evt.Message.ExtendedTextMessage.ContextInfo != nil { - forwarded = evt.Message.ExtendedTextMessage.ContextInfo.GetIsForwarded() - if forwarded == false { - forwarded = nil - } - } - - - body := map[string]any{ - "message_id": evt.Info.ID, - "from": evt.Info.SourceString(), - "pushname": evt.Info.PushName, - "message": message, - "image": imageMedia, - "video": videoMedia, - "audio": audioMedia, - "document": documentMedia, - "location": evt.Message.GetLocationMessage(), - "sticker": stickerMedia, - "live_location": evt.Message.GetLiveLocationMessage(), - "view_once": evt.Message.GetViewOnceMessage(), - "list": evt.Message.GetListMessage(), - "order": evt.Message.GetOrderMessage(), - "contact": evt.Message.GetContactMessage(), - "forwarded": forwarded, - "quotedmessage": quotedmessage, + message := evt.Message.GetConversation() + if extendedMessage := evt.Message.ExtendedTextMessage.GetText(); extendedMessage != "" { + message = extendedMessage + } + + var quotedmessage any + if evt.Message.ExtendedTextMessage != nil { + if conversation := evt.Message.ExtendedTextMessage.ContextInfo.QuotedMessage.GetConversation(); conversation != "" { + quotedmessage = conversation + } + } + + var forwarded any + if evt.Message.ExtendedTextMessage != nil && evt.Message.ExtendedTextMessage.ContextInfo != nil { + if isForwarded := evt.Message.ExtendedTextMessage.ContextInfo.GetIsForwarded(); !isForwarded { + forwarded = nil + } + } + + var reactionMessage any + if evt.Message.ReactionMessage != nil { + reactionMessage = *evt.Message.ReactionMessage.Text + } + + body := map[string]interface{}{ + "audio": audioMedia, + "contact": evt.Message.GetContactMessage(), + "document": documentMedia, + "forwarded": forwarded, + "from": evt.Info.SourceString(), + "image": imageMedia, + "list": evt.Message.GetListMessage(), + "live_location": evt.Message.GetLiveLocationMessage(), + "location": evt.Message.GetLocationMessage(), + "message": message, + "message_id": evt.Info.ID, + "order": evt.Message.GetOrderMessage(), + "pushname": evt.Info.PushName, + "quoted_message": quotedmessage, + "reaction_message": reactionMessage, + "sticker": stickerMedia, + "video": videoMedia, + "view_once": evt.Message.GetViewOnceMessage(), } if imageMedia != nil { diff --git a/src/validations/send_validation_test.go b/src/validations/send_validation_test.go index 27359a5..a9810cd 100644 --- a/src/validations/send_validation_test.go +++ b/src/validations/send_validation_test.go @@ -2,6 +2,7 @@ package validations import ( "context" + domainMessage "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/message" domainSend "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/send" pkgError "github.com/aldinokemal/go-whatsapp-web-multidevice/pkg/error" "github.com/stretchr/testify/assert" @@ -304,7 +305,7 @@ func TestValidateSendLink(t *testing.T) { func TestValidateRevokeMessage(t *testing.T) { type args struct { - request domainSend.RevokeRequest + request domainMessage.RevokeRequest } tests := []struct { name string @@ -313,7 +314,7 @@ func TestValidateRevokeMessage(t *testing.T) { }{ { name: "should success normal condition", - args: args{request: domainSend.RevokeRequest{ + args: args{request: domainMessage.RevokeRequest{ Phone: "1728937129312@s.whatsapp.net", MessageID: "1382901271239781", }}, @@ -321,7 +322,7 @@ func TestValidateRevokeMessage(t *testing.T) { }, { name: "should error with empty phone", - args: args{request: domainSend.RevokeRequest{ + args: args{request: domainMessage.RevokeRequest{ Phone: "", MessageID: "1382901271239781", }}, @@ -329,7 +330,7 @@ func TestValidateRevokeMessage(t *testing.T) { }, { name: "should error with empty message id", - args: args{request: domainSend.RevokeRequest{ + args: args{request: domainMessage.RevokeRequest{ Phone: "1728937129312@s.whatsapp.net", MessageID: "", }}, @@ -347,7 +348,7 @@ func TestValidateRevokeMessage(t *testing.T) { func TestValidateUpdateMessage(t *testing.T) { type args struct { - request domainSend.UpdateMessageRequest + request domainMessage.UpdateMessageRequest } tests := []struct { name string @@ -356,7 +357,7 @@ func TestValidateUpdateMessage(t *testing.T) { }{ { name: "should success normal condition", - args: args{request: domainSend.UpdateMessageRequest{ + args: args{request: domainMessage.UpdateMessageRequest{ MessageID: "1382901271239781", Message: "some update message", Phone: "1728937129312@s.whatsapp.net", @@ -365,7 +366,7 @@ func TestValidateUpdateMessage(t *testing.T) { }, { name: "should error with empty phone", - args: args{request: domainSend.UpdateMessageRequest{ + args: args{request: domainMessage.UpdateMessageRequest{ MessageID: "1382901271239781", Message: "some update message", Phone: "", @@ -374,7 +375,7 @@ func TestValidateUpdateMessage(t *testing.T) { }, { name: "should error with empty message id", - args: args{request: domainSend.UpdateMessageRequest{ + args: args{request: domainMessage.UpdateMessageRequest{ MessageID: "", Message: "some update message", Phone: "1728937129312@s.whatsapp.net", @@ -383,7 +384,7 @@ func TestValidateUpdateMessage(t *testing.T) { }, { name: "should error with empty message update", - args: args{request: domainSend.UpdateMessageRequest{ + args: args{request: domainMessage.UpdateMessageRequest{ MessageID: "1382901271239781", Message: "", Phone: "1728937129312@s.whatsapp.net",