Skip to content

Commit 07e8372

Browse files
committed
Add handling and showing reaction events
1 parent 115f729 commit 07e8372

File tree

2 files changed

+76
-12
lines changed

2 files changed

+76
-12
lines changed

bridge/matrix/matrix.go

Lines changed: 73 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,31 @@ 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+
//nolint:funlen
277+
func (m *Matrix) handleMessageEvent(source mautrix.EventSource, ev *event.Event) {
278+
logger.Tracef("handleMessageEvent ev %s", spew.Sdump(ev))
277279

278280
ghost := m.createUser(ev.Sender)
279281

280282
if ghost.Me {
283+
logger.Trace("handleMessageEvent ghost.Me")
281284
return
282285
}
283286

287+
var text string
288+
var parentID string
289+
290+
switch {
291+
case ev.Type.String() == "m.text":
292+
msgEventContent, _ := ev.Content.Parsed.(*event.MessageEventContent)
293+
text = msgEventContent.Body
294+
if msgEventContent.RelatesTo != nil {
295+
parentID = msgEventContent.RelatesTo.EventID.String()
296+
}
297+
default:
298+
logger.Debugf("handleMessageEvent unsupported event type %s", ev.Type.String())
299+
}
300+
284301
m.RLock()
285302
_, ok := m.dmChannels[ev.RoomID]
286303
m.RUnlock()
@@ -296,7 +313,7 @@ func (m *Matrix) handleEvent(source mautrix.EventSource, ev *event.Event) {
296313
// Files: m.getFilesFromData(data),
297314
MessageID: string(ev.ID),
298315
// Event: rmsg.Event,
299-
// ParentID: mxEvent
316+
ParentID: parentID,
300317
},
301318
}
302319

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

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)