46 lines
1 KiB
Go
46 lines
1 KiB
Go
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()
|
|
}
|