mirror of
https://github.com/aljazceru/signal-cli-rest-api.git
synced 2025-12-21 00:24:32 +01:00
Merge pull request #176 from filipre/reactions
Reactions Endpoint Proposal
This commit is contained in:
@@ -14,9 +14,10 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/cyphar/filepath-securejoin"
|
||||
securejoin "github.com/cyphar/filepath-securejoin"
|
||||
"github.com/gabriel-vasile/mimetype"
|
||||
"github.com/h2non/filetype"
|
||||
|
||||
//"github.com/sourcegraph/jsonrpc2"//"net/rpc/jsonrpc"
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
@@ -613,8 +614,8 @@ func (s *SignalClient) CreateGroup(number string, name string, members []string,
|
||||
}
|
||||
|
||||
type Response struct {
|
||||
GroupId string `json:"groupId"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
GroupId string `json:"groupId"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
}
|
||||
var resp Response
|
||||
json.Unmarshal([]byte(rawData), &resp)
|
||||
@@ -995,6 +996,69 @@ func (s *SignalClient) QuitGroup(number string, groupId string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *SignalClient) SendReaction(number string, recipient string, emoji string, target_author string, timestamp int64, remove bool) error {
|
||||
// see https://github.com/AsamK/signal-cli/blob/master/man/signal-cli.1.adoc#sendreaction
|
||||
var err error
|
||||
recp := recipient
|
||||
isGroup := false
|
||||
if strings.HasPrefix(recipient, groupPrefix) {
|
||||
isGroup = true
|
||||
recp, err = ConvertGroupIdToInternalGroupId(recipient)
|
||||
if err != nil {
|
||||
return errors.New("Invalid group id")
|
||||
}
|
||||
}
|
||||
if remove && emoji == "" {
|
||||
emoji = "👍" // emoji must not be empty to remove a reaction
|
||||
}
|
||||
|
||||
if s.signalCliMode == JsonRpc {
|
||||
type Request struct {
|
||||
Recipient string `json:"recipient,omitempty"`
|
||||
GroupId string `json:"group-id,omitempty"`
|
||||
Emoji string `json:"emoji"`
|
||||
TargetAuthor string `json:"target-author"`
|
||||
Timestamp int64 `json:"target-timestamp"`
|
||||
Remove bool `json:"remove,omitempty"`
|
||||
}
|
||||
request := Request{}
|
||||
if !isGroup {
|
||||
request.Recipient = recp
|
||||
} else {
|
||||
request.GroupId = recp
|
||||
}
|
||||
request.Emoji = emoji
|
||||
request.TargetAuthor = target_author
|
||||
request.Timestamp = timestamp
|
||||
if remove {
|
||||
request.Remove = remove
|
||||
}
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("sendReaction", request)
|
||||
return err
|
||||
}
|
||||
|
||||
cmd := []string{
|
||||
"--config", s.signalCliConfig,
|
||||
"-u", number,
|
||||
"sendReaction",
|
||||
}
|
||||
if !isGroup {
|
||||
cmd = append(cmd, recp)
|
||||
} else {
|
||||
cmd = append(cmd, []string{"-g", recp}...)
|
||||
}
|
||||
cmd = append(cmd, []string{"-e", emoji, "-a", target_author, "-t", strconv.FormatInt(timestamp, 10)}...)
|
||||
if remove {
|
||||
cmd = append(cmd, "-r")
|
||||
}
|
||||
_, err = runSignalCli(true, cmd, "", s.signalCliMode)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *SignalClient) SendStartTyping(number string, recipient string) error {
|
||||
var err error
|
||||
recp := recipient
|
||||
@@ -1010,7 +1074,7 @@ func (s *SignalClient) SendStartTyping(number string, recipient string) error {
|
||||
if s.signalCliMode == JsonRpc {
|
||||
type Request struct {
|
||||
Recipient string `json:"recipient,omitempty"`
|
||||
GroupId string `json:"group-id,omitempty"`
|
||||
GroupId string `json:"group-id,omitempty"`
|
||||
}
|
||||
request := Request{}
|
||||
if !isGroup {
|
||||
@@ -1052,8 +1116,8 @@ func (s *SignalClient) SendStopTyping(number string, recipient string) error {
|
||||
if s.signalCliMode == JsonRpc {
|
||||
type Request struct {
|
||||
Recipient string `json:"recipient,omitempty"`
|
||||
GroupId string `json:"group-id,omitempty"`
|
||||
Stop bool `json:"stop"`
|
||||
GroupId string `json:"group-id,omitempty"`
|
||||
Stop bool `json:"stop"`
|
||||
}
|
||||
request := Request{Stop: true}
|
||||
if !isGroup {
|
||||
|
||||
Reference in New Issue
Block a user