@@ -98,20 +98,21 @@ func (m *Matrix) syncCallback(resp *mautrix.RespSync, since string) bool {
98
98
func (m * Matrix ) handleMatrix (onConnect func ()) {
99
99
syncer := m .mc .Syncer .(* mautrix.DefaultSyncer )
100
100
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 )
103
104
syncer .OnEventType (event .StateMember , m .handleMember )
104
105
syncer .OnEventType (event .StateCreate , m .handleCreate )
105
106
syncer .OnEventType (event .StateRoomName , m .handleRoomName )
106
107
// syncer.OnEventType(event.AccountDataDirectChats, m.handleDM)
107
108
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 ) {
109
110
// sync is almost complete
110
- if evt .RoomID .String () == "marker" {
111
+ if ev .RoomID .String () == "marker" {
111
112
m .firstSync = true
112
113
}
113
114
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 ))
115
116
})
116
117
117
118
syncer .OnSync (m .syncCallback )
@@ -272,15 +273,31 @@ func (m *Matrix) handleCanonicalAlias(source mautrix.EventSource, ev *event.Even
272
273
// m.mc.JoinedMembers(ev.RoomID)
273
274
}
274
275
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 ))
277
279
278
280
ghost := m .createUser (ev .Sender )
279
281
280
282
if ghost .Me {
283
+ logger .Trace ("handleMessageEvent ghost.Me" )
281
284
return
282
285
}
283
286
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
+
284
301
m .RLock ()
285
302
_ , ok := m .dmChannels [ev .RoomID ]
286
303
m .RUnlock ()
@@ -296,7 +313,7 @@ func (m *Matrix) handleEvent(source mautrix.EventSource, ev *event.Event) {
296
313
// Files: m.getFilesFromData(data),
297
314
MessageID : string (ev .ID ),
298
315
// Event: rmsg.Event,
299
- // ParentID: mxEvent
316
+ ParentID : parentID ,
300
317
},
301
318
}
302
319
@@ -314,7 +331,54 @@ func (m *Matrix) handleEvent(source mautrix.EventSource, ev *event.Event) {
314
331
// Files: m.getFilesFromData(data),
315
332
MessageID : string (ev .ID ),
316
333
// 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 ,
318
382
},
319
383
}
320
384
0 commit comments