Skip to content

Commit 552f997

Browse files
committed
Add handling and showing reaction events
1 parent 115f729 commit 552f997

File tree

2 files changed

+75
-12
lines changed

2 files changed

+75
-12
lines changed

bridge/matrix/matrix.go

Lines changed: 72 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,20 +98,21 @@ func (m *Matrix) syncCallback(resp *mautrix.RespSync, since string) bool {
9898
func (m *Matrix) handleMatrix(onConnect func()) {
9999
syncer := m.mc.Syncer.(*mautrix.DefaultSyncer)
100100

101-
syncer.OnEventType(event.EventRedaction, m.handleEvent)
102-
syncer.OnEventType(event.EventMessage, m.handleEvent)
101+
syncer.OnEventType(event.EventMessage, m.handleMessageEvent)
102+
syncer.OnEventType(event.EventReaction, m.handleReactionEvent)
103+
syncer.OnEventType(event.EventRedaction, m.handleMessageEvent)
103104
syncer.OnEventType(event.StateMember, m.handleMember)
104105
syncer.OnEventType(event.StateCreate, m.handleCreate)
105106
syncer.OnEventType(event.StateRoomName, m.handleRoomName)
106107
// syncer.OnEventType(event.AccountDataDirectChats, m.handleDM)
107108
syncer.OnEventType(event.StateCanonicalAlias, m.handleCanonicalAlias)
108-
syncer.OnEvent(func(source mautrix.EventSource, evt *event.Event) {
109+
syncer.OnEvent(func(source mautrix.EventSource, ev *event.Event) {
109110
// sync is almost complete
110-
if evt.RoomID.String() == "marker" {
111+
if ev.RoomID.String() == "marker" {
111112
m.firstSync = true
112113
}
113114
logger.Tracef("handleMatrix source.String() %s", source.String())
114-
logger.Tracef("handleMatrix evt %s", spew.Sdump(evt))
115+
logger.Tracef("handleMatrix ev %s", spew.Sdump(ev))
115116
})
116117

117118
syncer.OnSync(m.syncCallback)
@@ -272,15 +273,30 @@ func (m *Matrix) handleCanonicalAlias(source mautrix.EventSource, ev *event.Even
272273
// m.mc.JoinedMembers(ev.RoomID)
273274
}
274275

275-
func (m *Matrix) handleEvent(source mautrix.EventSource, ev *event.Event) {
276-
text, _ := ev.Content.Raw["body"].(string)
276+
func (m *Matrix) handleMessageEvent(source mautrix.EventSource, ev *event.Event) {
277+
logger.Tracef("handleMessageEvent ev %s", spew.Sdump(ev))
277278

278279
ghost := m.createUser(ev.Sender)
279280

280281
if ghost.Me {
282+
logger.Trace("handleMessageEvent ghost.Me")
281283
return
282284
}
283285

286+
var text string
287+
var parentID string
288+
289+
switch {
290+
case ev.Type.String() == "m.text":
291+
msgEventContent, _ := ev.Content.Parsed.(*event.MessageEventContent)
292+
text = msgEventContent.Body
293+
if msgEventContent.RelatesTo != nil {
294+
parentID = msgEventContent.RelatesTo.EventID.String()
295+
}
296+
default:
297+
logger.Debugf("handleMessageEvent unsupported event type %s", ev.Type.String())
298+
}
299+
284300
m.RLock()
285301
_, ok := m.dmChannels[ev.RoomID]
286302
m.RUnlock()
@@ -296,7 +312,7 @@ func (m *Matrix) handleEvent(source mautrix.EventSource, ev *event.Event) {
296312
// Files: m.getFilesFromData(data),
297313
MessageID: string(ev.ID),
298314
// Event: rmsg.Event,
299-
// ParentID: mxEvent
315+
ParentID: parentID,
300316
},
301317
}
302318

@@ -314,7 +330,54 @@ func (m *Matrix) handleEvent(source mautrix.EventSource, ev *event.Event) {
314330
// Files: m.getFilesFromData(data),
315331
MessageID: string(ev.ID),
316332
// Event: rmsg.Event,
317-
// ParentID: mxEvent
333+
ParentID: parentID,
334+
},
335+
}
336+
337+
m.eventChan <- event
338+
}
339+
340+
func (m *Matrix) handleReactionEvent(source mautrix.EventSource, ev *event.Event) {
341+
logger.Tracef("handleReactionEvent ev %s", spew.Sdump(ev))
342+
343+
ghost := m.createUser(ev.Sender)
344+
345+
if ghost.Me {
346+
logger.Trace("handleReactionEvent ghost.Me")
347+
return
348+
}
349+
350+
var reaction string
351+
var parentID string
352+
353+
switch {
354+
case ev.Type.String() == "m.reaction":
355+
reactionEventContent, _ := ev.Content.Parsed.(*event.ReactionEventContent)
356+
reaction = reactionEventContent.RelatesTo.Key
357+
parentID = reactionEventContent.RelatesTo.EventID.String()
358+
default:
359+
logger.Debugf("handleEvent unsupported event type %s", ev.Type.String())
360+
}
361+
362+
m.RLock()
363+
_, ok := m.dmChannels[ev.RoomID]
364+
m.RUnlock()
365+
366+
channelType := ""
367+
if ok {
368+
channelType = "D"
369+
}
370+
371+
event := &bridge.Event{ //nolint:gocritic
372+
Type: "reaction_add",
373+
Data: &bridge.ReactionAddEvent{
374+
ChannelID: ev.RoomID.String(),
375+
MessageID: string(ev.ID),
376+
Sender: ghost,
377+
Reaction: reaction,
378+
ChannelType: channelType,
379+
Message: "",
380+
ParentID: parentID,
318381
},
319382
}
320383

mm-go-irckit/service.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ func login(u *User, toUser *User, args []string, service string) {
4343
if service == "matrix" { //nolint:nestif
4444
var err error
4545

46-
warningMsg := "WARNING: Matrix support is very much experimental and a work in progress. Use at your own risk."
47-
u.MsgUser(toUser, warningMsg)
48-
logger.Warn(warningMsg)
46+
wMsg := "Matrix support is very much experimental and a work in progress. Use at your own risk."
47+
u.MsgUser(toUser, "WARNING: "+wMsg)
48+
logger.Warn(wMsg)
4949

5050
if len(args) != 1 && len(args) != 3 {
5151
u.MsgUser(toUser, "need LOGIN <server> <login> <pass> or LOGIN <token>")

0 commit comments

Comments
 (0)