Browse Source

feat: add reaction

pull/60/head
Aldino Kemal 3 years ago
parent
commit
271ee6f75a
  1. 2
      src/config/settings.go
  2. 12
      src/domains/send/reaction.go
  3. 1
      src/domains/send/send.go
  4. 20
      src/internal/rest/send.go
  5. 28
      src/services/send.go

2
src/config/settings.go

@ -6,7 +6,7 @@ import (
) )
var ( var (
AppVersion = "v4.4.6"
AppVersion = "v4.5.0"
AppPort = "3000" AppPort = "3000"
AppDebug = false AppDebug = false
AppOs = fmt.Sprintf("AldinoKemal") AppOs = fmt.Sprintf("AldinoKemal")

12
src/domains/send/reaction.go

@ -0,0 +1,12 @@
package send
type ReactionRequest struct {
MessageID string `json:"message_id" form:"message_id"`
Phone string `json:"phone" form:"phone"`
Emoji string `json:"emoji" form:"emoji"`
}
type ReactionResponse struct {
MessageID string `json:"message_id"`
Status string `json:"status"`
}

1
src/domains/send/send.go

@ -12,6 +12,7 @@ type ISendService interface {
SendContact(ctx context.Context, request ContactRequest) (response ContactResponse, err error) SendContact(ctx context.Context, request ContactRequest) (response ContactResponse, err error)
SendLink(ctx context.Context, request LinkRequest) (response LinkResponse, err error) SendLink(ctx context.Context, request LinkRequest) (response LinkResponse, err error)
SendLocation(ctx context.Context, request LocationRequest) (response LocationResponse, err error) SendLocation(ctx context.Context, request LocationRequest) (response LocationResponse, err error)
SendReaction(ctx context.Context, request ReactionRequest) (response ReactionResponse, err error)
Revoke(ctx context.Context, request RevokeRequest) (response RevokeResponse, err error) Revoke(ctx context.Context, request RevokeRequest) (response RevokeResponse, err error)
UpdateMessage(ctx context.Context, request UpdateMessageRequest) (response UpdateMessageResponse, err error) UpdateMessage(ctx context.Context, request UpdateMessageRequest) (response UpdateMessageResponse, err error)
} }

20
src/internal/rest/send.go

@ -20,6 +20,7 @@ func InitRestSend(app *fiber.App, service domainSend.ISendService) Send {
app.Post("/send/contact", rest.SendContact) app.Post("/send/contact", rest.SendContact)
app.Post("/send/link", rest.SendLink) app.Post("/send/link", rest.SendLink)
app.Post("/send/location", rest.SendLocation) app.Post("/send/location", rest.SendLocation)
app.Post("/message/:message_id/reaction", rest.ReactionMessage)
app.Post("/message/:message_id/revoke", rest.RevokeMessage) app.Post("/message/:message_id/revoke", rest.RevokeMessage)
app.Post("/message/:message_id/update", rest.UpdateMessage) app.Post("/message/:message_id/update", rest.UpdateMessage)
return rest return rest
@ -202,3 +203,22 @@ func (controller *Send) UpdateMessage(c *fiber.Ctx) error {
Results: response, Results: response,
}) })
} }
func (controller *Send) ReactionMessage(c *fiber.Ctx) error {
var request domainSend.ReactionRequest
err := c.BodyParser(&request)
utils.PanicIfNeeded(err)
request.MessageID = c.Params("message_id")
whatsapp.SanitizePhone(&request.Phone)
response, err := controller.Service.SendReaction(c.UserContext(), request)
utils.PanicIfNeeded(err)
return c.JSON(utils.ResponseData{
Status: 200,
Code: "SUCCESS",
Message: response.Status,
Results: response,
})
}

28
src/services/send.go

@ -19,6 +19,7 @@ import (
"net/http" "net/http"
"os" "os"
"os/exec" "os/exec"
"time"
) )
type serviceSend struct { type serviceSend struct {
@ -399,6 +400,33 @@ func (service serviceSend) SendLocation(ctx context.Context, request domainSend.
return response, nil return response, nil
} }
func (service serviceSend) SendReaction(ctx context.Context, request domainSend.ReactionRequest) (response domainSend.ReactionResponse, err error) {
dataWaRecipient, err := whatsapp.ValidateJidWithLogin(service.WaCli, request.Phone)
if err != nil {
return response, err
}
msg := &waProto.Message{
ReactionMessage: &waProto.ReactionMessage{
Key: &waProto.MessageKey{
FromMe: proto.Bool(true),
Id: proto.String(request.MessageID),
RemoteJid: proto.String(dataWaRecipient.String()),
},
Text: proto.String(request.Emoji),
SenderTimestampMs: proto.Int64(time.Now().UnixMilli()),
},
}
ts, err := service.WaCli.SendMessage(ctx, dataWaRecipient, msg)
if err != nil {
return response, err
}
response.MessageID = ts.ID
response.Status = fmt.Sprintf("Reaction sent to %s (server timestamp: %s)", request.Phone, ts)
return response, nil
}
func (service serviceSend) Revoke(ctx context.Context, request domainSend.RevokeRequest) (response domainSend.RevokeResponse, err error) { func (service serviceSend) Revoke(ctx context.Context, request domainSend.RevokeRequest) (response domainSend.RevokeResponse, err error) {
err = validations.ValidateRevokeMessage(ctx, request) err = validations.ValidateRevokeMessage(ctx, request)
if err != nil { if err != nil {

Loading…
Cancel
Save