2025-05-09 03:16:10 +00:00

38 lines
931 B
Go

package matrixbot
import (
"context"
"time"
mautrix "maunium.net/go/mautrix"
"maunium.net/go/mautrix/event"
)
// Bot encapsulates a Matrix client.
type Bot struct {
Client *mautrix.Client
}
// NewBot creates a new Bot instance.
func NewBot(client *mautrix.Client) *Bot {
return &Bot{Client: client}
}
// Start begins syncing with the Matrix server and sets up event handlers.
// It waits 30 seconds after connecting before registering the message handler
// to allow historical messages to be skipped.
func (b *Bot) Start() error {
syncer := b.Client.Syncer.(*mautrix.DefaultSyncer)
// Pause for 30 seconds to skip over historical messages
time.Sleep(30 * time.Second)
// Register message handler for new events only
syncer.OnEventType(event.EventMessage, func(ctx context.Context, evt *event.Event) {
go HandleMessage(evt, b.Client)
})
// Start the sync loop (blocks until error).
return b.Client.Sync()
}