// package main is the main package for the LapisDeploy program package main import ( "context" //"errors" "log" //"sync" "maunium.net/go/mautrix" "maunium.net/go/mautrix/event" ) func initMatrix() { client, err := mautrix.NewClient(configuration.matrix.homeserver, "", "") if err != nil { log.Fatal(err) } resp, err := client.Login(context.Background(), &mautrix.ReqLogin{ Type: "m.login.password", Identifier: mautrix.UserIdentifier{Type: mautrix.IdentifierTypeUser, User: configuration.matrix.username}, Password: configuration.matrix.password, StoreCredentials: true, }) if err != nil { log.Panic(err) } log.Printf("[Matrix] Logged in as %s", resp.UserID) syncer := client.Syncer.(*mautrix.DefaultSyncer) syncer.OnEventType(event.StateMember, func(ctx context.Context, evt *event.Event) { if evt.GetStateKey() == client.UserID.String() && evt.Content.AsMember().Membership == event.MembershipInvite { if evt.RoomID.String() == configuration.matrix.room_id { _, err := client.JoinRoomByID(ctx, evt.RoomID) if err == nil { log.Printf("[Matrix] Joined room '%s' (Invited by '%s')", evt.RoomID.String(), evt.Sender.String()) } else { log.Printf("[Matrix] Failed to join room '%s' after invite (Invited by '%s')", evt.RoomID.String(), evt.Sender.String()) } } else { log.Printf("[Matrix] Rejected invite to room '%s' (Invited by '%s')", evt.RoomID.String(), evt.Sender.String()) } } }) log.Print("[Matrix] Running!") err = client.Sync() if err != nil { log.Fatal(err) } //syncCtx, cancelSync := context.WithCancel(context.Background()) //var syncStopWait sync.WaitGroup //syncStopWait.Add(1) //go func() { // err = client.SyncWithContext(syncCtx) // defer syncStopWait.Done() // if err != nil && !errors.Is(err, context.Canceled) { // panic(err) // } //}() //cancelSync() //syncStopWait.Wait() }