Files
agents_and_robots/pkg/message/parse.go
T
2026-03-03 23:19:23 +00:00

44 lines
1.1 KiB
Go

// Package message provides pure parsing and formatting for Matrix messages.
package message
import (
"strings"
"github.com/enmanuel/agents/pkg/decision"
)
// ParseOptions configures how messages are parsed.
type ParseOptions struct {
CommandPrefix string // e.g. "!"
BotUserID string // for mention detection
}
// Parse converts a raw Matrix message body into a structured MessageContext. Pure.
func Parse(body, senderID, roomID string, powerLevel int, isDM bool, opts ParseOptions) decision.MessageContext {
ctx := decision.MessageContext{
SenderID: senderID,
RoomID: roomID,
Content: body,
PowerLevel: powerLevel,
IsDirectMsg: isDM,
}
// Detect mention
if opts.BotUserID != "" && strings.Contains(body, opts.BotUserID) {
ctx.IsMention = true
body = strings.ReplaceAll(body, opts.BotUserID, "")
body = strings.TrimSpace(body)
}
// Parse command
if opts.CommandPrefix != "" && strings.HasPrefix(body, opts.CommandPrefix) {
parts := strings.Fields(strings.TrimPrefix(body, opts.CommandPrefix))
if len(parts) > 0 {
ctx.Command = strings.ToLower(parts[0])
ctx.Args = parts[1:]
}
}
return ctx
}