38 lines
931 B
Go
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()
|
|
}
|