@@ -98,20 +98,21 @@ func (m *Matrix) syncCallback(resp *mautrix.RespSync, since string) bool {
9898func (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
0 commit comments