Skip to content

Commit 4fa852d

Browse files
committed
handlematrix,handletwit: Edit messages and receive edits
1 parent bd4189e commit 4fa852d

File tree

3 files changed

+44
-7
lines changed

3 files changed

+44
-7
lines changed

pkg/connector/client.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ import (
2020
"context"
2121
"fmt"
2222
"strings"
23+
"time"
2324

2425
"github.com/rs/zerolog"
2526
"maunium.net/go/mautrix/bridge/status"
2627
"maunium.net/go/mautrix/bridgev2"
28+
"maunium.net/go/mautrix/bridgev2/database"
2729
"maunium.net/go/mautrix/bridgev2/networkid"
2830
bridgeEvt "maunium.net/go/mautrix/event"
2931

@@ -45,10 +47,8 @@ type TwitterClient struct {
4547
}
4648

4749
var (
48-
_ bridgev2.NetworkAPI = (*TwitterClient)(nil)
49-
_ bridgev2.ReactionHandlingNetworkAPI = (*TwitterClient)(nil)
50-
_ bridgev2.ReadReceiptHandlingNetworkAPI = (*TwitterClient)(nil)
51-
_ bridgev2.PushableNetworkAPI = (*TwitterClient)(nil)
50+
_ bridgev2.NetworkAPI = (*TwitterClient)(nil)
51+
_ bridgev2.PushableNetworkAPI = (*TwitterClient)(nil)
5252
)
5353

5454
func NewTwitterClient(ctx context.Context, tc *TwitterConnector, login *bridgev2.UserLogin) *TwitterClient {
@@ -175,13 +175,27 @@ func (tc *TwitterClient) GetCapabilities(ctx context.Context, portal *bridgev2.P
175175
UserMentions: true,
176176
RoomMentions: false,
177177

178+
Edits: true,
179+
EditMaxCount: 10,
180+
EditMaxAge: 15 * time.Minute,
178181
Captions: true,
179182
Replies: true,
180183
Reactions: true,
181184
ReactionCount: 1,
182185
}
183186
}
184187

188+
func (tc *TwitterClient) convertEditToMatrix(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, existing []*database.Message, data *event.XEventMessage) (*bridgev2.ConvertedEdit, error) {
189+
data.Text = strings.TrimPrefix(data.Text, "Edited: ")
190+
converted, err := tc.convertToMatrix(ctx, portal, intent, data)
191+
if err != nil {
192+
return nil, err
193+
}
194+
return &bridgev2.ConvertedEdit{
195+
ModifiedParts: []*bridgev2.ConvertedEditPart{converted.Parts[0].ToEditPart(existing[0])},
196+
}, nil
197+
}
198+
185199
func (tc *TwitterClient) convertToMatrix(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, msg *event.XEventMessage) (*bridgev2.ConvertedMessage, error) {
186200
partId := networkid.PartID("")
187201
var MessageOptionalPartID *networkid.MessageOptionalPartID

pkg/connector/handlematrix.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package connector
33
import (
44
"context"
55

6+
"github.com/google/uuid"
67
"maunium.net/go/mautrix/bridgev2"
78
"maunium.net/go/mautrix/bridgev2/database"
89
"maunium.net/go/mautrix/bridgev2/networkid"
@@ -22,6 +23,12 @@ var (
2223
}
2324
)
2425

26+
var (
27+
_ bridgev2.ReactionHandlingNetworkAPI = (*TwitterClient)(nil)
28+
_ bridgev2.ReadReceiptHandlingNetworkAPI = (*TwitterClient)(nil)
29+
_ bridgev2.EditHandlingNetworkAPI = (*TwitterClient)(nil)
30+
)
31+
2532
func (tc *TwitterClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2.MatrixMessage) (message *bridgev2.MatrixMessageResponse, err error) {
2633
conversationId := string(msg.Portal.ID)
2734
sendDMPayload := &payload.SendDirectMessagePayload{
@@ -141,3 +148,13 @@ func (tc *TwitterClient) HandleMatrixReadReceipt(ctx context.Context, msg *bridg
141148

142149
return tc.client.MarkConversationRead(params)
143150
}
151+
152+
func (tc *TwitterClient) HandleMatrixEdit(_ context.Context, edit *bridgev2.MatrixEdit) error {
153+
_, err := tc.client.EditDirectMessage(&payload.EditDirectMessagePayload{
154+
ConversationID: string(edit.Portal.ID),
155+
RequestID: uuid.New().String(),
156+
DmID: string(edit.EditTarget.ID),
157+
Text: edit.Content.Body,
158+
})
159+
return err
160+
}

pkg/connector/handletwit.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,14 @@ func (tc *TwitterClient) HandleTwitterEvent(rawEvt any) {
1515
case event.XEventMessage:
1616
sender := evtData.Sender
1717
isFromMe := sender.IDStr == string(tc.userLogin.ID)
18+
msgType := bridgev2.RemoteEventMessage
19+
20+
if evtData.EditCount > 0 {
21+
msgType = bridgev2.RemoteEventEdit
22+
}
1823
tc.connector.br.QueueRemoteEvent(tc.userLogin, &simplevent.Message[*event.XEventMessage]{
1924
EventMeta: simplevent.EventMeta{
20-
Type: bridgev2.RemoteEventMessage,
25+
Type: msgType,
2126
LogContext: func(c zerolog.Context) zerolog.Context {
2227
return c.
2328
Str("message_id", evtData.MessageID).
@@ -34,10 +39,11 @@ func (tc *TwitterClient) HandleTwitterEvent(rawEvt any) {
3439
},
3540
Timestamp: evtData.CreatedAt,
3641
},
37-
ID: networkid.MessageID(evtData.MessageID),
38-
42+
ID: networkid.MessageID(evtData.MessageID),
43+
TargetMessage: networkid.MessageID(evtData.MessageID),
3944
Data: &evtData,
4045
ConvertMessageFunc: tc.convertToMatrix,
46+
ConvertEditFunc: tc.convertEditToMatrix,
4147
})
4248
case event.XEventReaction:
4349
reactionRemoteEvent := tc.wrapReaction(evtData)

0 commit comments

Comments
 (0)