Merge pull request #176 from filipre/reactions

Reactions Endpoint Proposal
This commit is contained in:
Bernhard B
2021-11-06 14:54:13 +01:00
committed by GitHub
5 changed files with 684 additions and 356 deletions

View File

@@ -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 {