@@ -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,30 @@ 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
+ func (m * Matrix ) handleMessageEvent (source mautrix.EventSource , ev * event.Event ) {
277
+ logger . Tracef ( "handleMessageEvent ev %s" , spew . Sdump ( ev ) )
277
278
278
279
ghost := m .createUser (ev .Sender )
279
280
280
281
if ghost .Me {
282
+ logger .Trace ("handleMessageEvent ghost.Me" )
281
283
return
282
284
}
283
285
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
+
284
300
m .RLock ()
285
301
_ , ok := m .dmChannels [ev .RoomID ]
286
302
m .RUnlock ()
@@ -296,7 +312,7 @@ func (m *Matrix) handleEvent(source mautrix.EventSource, ev *event.Event) {
296
312
// Files: m.getFilesFromData(data),
297
313
MessageID : string (ev .ID ),
298
314
// Event: rmsg.Event,
299
- // ParentID: mxEvent
315
+ ParentID : parentID ,
300
316
},
301
317
}
302
318
@@ -314,7 +330,54 @@ func (m *Matrix) handleEvent(source mautrix.EventSource, ev *event.Event) {
314
330
// Files: m.getFilesFromData(data),
315
331
MessageID : string (ev .ID ),
316
332
// 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 ,
318
381
},
319
382
}
320
383
0 commit comments