matrix.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package bridge
  2. import (
  3. "maunium.net/go/maulogger/v2"
  4. "maunium.net/go/mautrix/appservice"
  5. "maunium.net/go/mautrix/event"
  6. )
  7. type matrixHandler struct {
  8. as *appservice.AppService
  9. bridge *Bridge
  10. log maulogger.Logger
  11. }
  12. func (b *Bridge) setupEvents() {
  13. b.eventProcessor = appservice.NewEventProcessor(b.as)
  14. b.matrixHandler = &matrixHandler{
  15. as: b.as,
  16. bridge: b,
  17. log: b.log.Sub("Matrix"),
  18. }
  19. b.eventProcessor.On(event.EventMessage, b.matrixHandler.handleMessage)
  20. b.eventProcessor.On(event.StateMember, b.matrixHandler.handleMembership)
  21. }
  22. func (mh *MatrixHandler) join(evt *event.Event, intent *appservice.IntentAPI) *mautrix.RespJoinedMembers {
  23. resp, err := intent.JoinRoomByID(evt.RoomID)
  24. if err != nil {
  25. mh.log.Debugfln("Failed to join room %s as %s with invite from %s: %v", evt.RoomID, intent.UserID, evt.Sender, err)
  26. return nil
  27. }
  28. members, err := intent.JoinedMembers(resp.RoomID)
  29. if err != nil {
  30. intent.LeaveRoom(resp.RoomID)
  31. mh.log.Debugfln("Failed to get members in room %s after accepting invite from %s as %s: %v", resp.RoomID, evt.Sender, intent.UserID, err)
  32. return nil
  33. }
  34. if len(members.Joined) < 2 {
  35. intent.LeaveRoom(resp.RoomID)
  36. mh.log.Debugln("Leaving empty room", resp.RoomID, "after accepting invite from", evt.Sender, "as", intent.UserID)
  37. return nil
  38. }
  39. return members
  40. }
  41. func (mh *matrixHandler) ignoreEvent(evt *event.Event) bool {
  42. return false
  43. }
  44. func (mh *matrixHandler) handleMessage(evt *event.Event) {
  45. if mh.ignoreEvent(evt) {
  46. return
  47. }
  48. mh.log.Debugfln("received message from %q: %q", evt.Sender, evt.Content.AsMessage())
  49. }
  50. func (mh *matrixHandler) handleMembership(evt *event.Event) {
  51. mh.log.Debugfln("recevied invite %#v\n", evt)
  52. // Return early if we're supposed to ignore the event.
  53. if mh.ignoreEvent(evt) {
  54. return
  55. }
  56. // Grab the content of the event.
  57. content := evt.Content.AsMessage()
  58. // TODO: handle invites from ourselfs?
  59. isSelf := id.UserID(evt.GetStateKey()) == evt.Sender
  60. // Handle matrix invites.
  61. if content.Membership == event.MembershipInvite && !isSelf {
  62. //
  63. }
  64. }