Files
SimpleArmaAdmin/internal/parser/reforger.go

67 lines
2.0 KiB
Go

package parser
import (
"regexp"
"strings"
"time"
)
type LogEvent struct {
Timestamp time.Time `json:"timestamp"`
Type string `json:"type"` // 'CHAT', 'JOIN', 'LEAVE', 'ADMIN', 'GENERIC'
Content string `json:"content"`
PlayerName string `json:"playerName,omitempty"`
PlayerNameHash string `json:"playerNameHash,omitempty"`
ServerID string `json:"serverId,omitempty"`
ServerName string `json:"serverName,omitempty"`
Raw string `json:"raw,omitempty"`
}
// Reforger-specific regex patterns
var (
// Example: 12:30:01.122 SCRIPT : [RJSSupport][Chat] [Global] Zauberklöte: hi, leute...
chatRegex = regexp.MustCompile(`^(\d{2}:\d{2}:\d{2}\.\d{3})\s+SCRIPT\s+:\s+\[.*?\]\[Chat\]\s+\[.*?\]\s+(.*?):\s+(.*)$`)
// Example: 09:37:50.865 DEFAULT : BattlEye Server: 'Player #0 Mike1Delta (92.209.175.19:6679) connected'
joinRegex = regexp.MustCompile(`^(\d{2}:\d{2}:\d{2}\.\d{3})\s+DEFAULT\s+:\s+BattlEye Server:\s+'Player #\d+\s+(.*?)\s+\(.*?\) connected'$`)
// Example: 09:38:53.842 DEFAULT : BattlEye Server: 'Player #0 Mike1Delta disconnected'
leaveRegex = regexp.MustCompile(`^(\d{2}:\d{2}:\d{2}\.\d{3})\s+DEFAULT\s+:\s+BattlEye Server:\s+'Player #\d+\s+(.*?) disconnected'$`)
)
func ParseLine(line string) *LogEvent {
line = strings.TrimSpace(line)
if line == "" {
return nil
}
event := &LogEvent{
Raw: line,
Type: "GENERIC",
}
// Try Chat
if matches := chatRegex.FindStringSubmatch(line); matches != nil {
event.Type = "CHAT"
event.PlayerName = matches[2]
event.Content = matches[2] + ": " + matches[3]
return event
}
// Try Join
if matches := joinRegex.FindStringSubmatch(line); matches != nil {
event.Type = "JOIN"
event.PlayerName = matches[2]
event.Content = matches[2] + " connected to server"
return event
}
// Try Leave
if matches := leaveRegex.FindStringSubmatch(line); matches != nil {
event.Type = "LEAVE"
event.PlayerName = matches[2]
event.Content = matches[2] + " left the server"
return event
}
return event
}