Format CTCP ACTION messages in logs
This commit is contained in:
parent
3d8ed90055
commit
c654d2bac4
22
irc.go
22
irc.go
@ -369,3 +369,25 @@ func (js *joinSorter) Swap(i, j int) {
|
||||
js.channels[i], js.channels[j] = js.channels[j], js.channels[i]
|
||||
js.keys[i], js.keys[j] = js.keys[j], js.keys[i]
|
||||
}
|
||||
|
||||
// parseCTCPMessage parses a CTCP message. CTCP is defined in
|
||||
// https://tools.ietf.org/html/draft-oakley-irc-ctcp-02
|
||||
func parseCTCPMessage(msg *irc.Message) (cmd string, params string, ok bool) {
|
||||
if (msg.Command != "PRIVMSG" && msg.Command != "NOTICE") || len(msg.Params) < 2 {
|
||||
return "", "", false
|
||||
}
|
||||
text := msg.Params[1]
|
||||
|
||||
if !strings.HasPrefix(text, "\x01") {
|
||||
return "", "", false
|
||||
}
|
||||
text = strings.Trim(text, "\x01")
|
||||
|
||||
words := strings.SplitN(text, " ", 2)
|
||||
cmd = strings.ToUpper(words[0])
|
||||
if len(words) > 1 {
|
||||
params = words[1]
|
||||
}
|
||||
|
||||
return cmd, params, true
|
||||
}
|
||||
|
34
logger.go
34
logger.go
@ -130,7 +130,11 @@ func formatMessage(msg *irc.Message) string {
|
||||
case "NOTICE":
|
||||
return fmt.Sprintf("-%s- %s", msg.Prefix.Name, msg.Params[1])
|
||||
case "PRIVMSG":
|
||||
return fmt.Sprintf("<%s> %s", msg.Prefix.Name, msg.Params[1])
|
||||
if cmd, params, ok := parseCTCPMessage(msg); ok && cmd == "ACTION" {
|
||||
return fmt.Sprintf("* %s %s", msg.Prefix.Name, params)
|
||||
} else {
|
||||
return fmt.Sprintf("<%s> %s", msg.Prefix.Name, msg.Params[1])
|
||||
}
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
@ -144,24 +148,32 @@ func parseMessage(line, entity string, ref time.Time) (*irc.Message, time.Time,
|
||||
}
|
||||
line = line[11:]
|
||||
|
||||
var cmd, suffix string
|
||||
var cmd, sender, text string
|
||||
if strings.HasPrefix(line, "<") {
|
||||
cmd = "PRIVMSG"
|
||||
suffix = "> "
|
||||
parts := strings.SplitN(line[1:], "> ", 2)
|
||||
if len(parts) != 2 {
|
||||
return nil, time.Time{}, nil
|
||||
}
|
||||
sender, text = parts[0], parts[1]
|
||||
} else if strings.HasPrefix(line, "-") {
|
||||
cmd = "NOTICE"
|
||||
suffix = "- "
|
||||
parts := strings.SplitN(line[1:], "- ", 2)
|
||||
if len(parts) != 2 {
|
||||
return nil, time.Time{}, nil
|
||||
}
|
||||
sender, text = parts[0], parts[1]
|
||||
} else if strings.HasPrefix(line, "* ") {
|
||||
cmd = "PRIVMSG"
|
||||
parts := strings.SplitN(line[2:], " ", 2)
|
||||
if len(parts) != 2 {
|
||||
return nil, time.Time{}, nil
|
||||
}
|
||||
sender, text = parts[0], "\x01ACTION "+parts[1]+"\x01"
|
||||
} else {
|
||||
return nil, time.Time{}, nil
|
||||
}
|
||||
|
||||
i := strings.Index(line, suffix)
|
||||
if i < 0 {
|
||||
return nil, time.Time{}, nil
|
||||
}
|
||||
sender := line[1:i]
|
||||
text := line[i+2:]
|
||||
|
||||
year, month, day := ref.Date()
|
||||
t := time.Date(year, month, day, hour, minute, second, 0, time.Local)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user