package main import ( "context" "fmt" "os" "os/exec" "time" "k8s.io/klog" "maunium.net/go/mautrix" "maunium.net/go/mautrix/event" ) func streaming(ctx context.Context, client *mautrix.Client) { start := time.Now() var nameLastMentioned time.Time var previousNameMentioned string syncer := client.Syncer.(*mautrix.DefaultSyncer) syncer.OnEventType(event.EventMessage, func(ctx context.Context, evt *event.Event) { if evt.Timestamp < start.UnixMilli() { return } if evt.Type == event.EventMessage && evt.RoomID.String() == flagStreamMatrixRoom { line := evt.Content.AsMessage().Body name := evt.Sender.Localpart() if name != previousNameMentioned || time.Since(nameLastMentioned) > time.Minute { line = fmt.Sprintf("%s says: %s", name, line) nameLastMentioned = time.Now() previousNameMentioned = name } klog.Info(line) cmd := exec.CommandContext(ctx, "/home/u/speak.sh", line) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Run() } }) <-ctx.Done() }