Changeset 392 in code


Ignore:
Timestamp:
Aug 17, 2020, 1:01:53 PM (5 years ago)
Author:
contact
Message:

Format CTCP ACTION messages in logs

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/irc.go

    r350 r392  
    370370        js.keys[i], js.keys[j] = js.keys[j], js.keys[i]
    371371}
     372
     373// parseCTCPMessage parses a CTCP message. CTCP is defined in
     374// https://tools.ietf.org/html/draft-oakley-irc-ctcp-02
     375func parseCTCPMessage(msg *irc.Message) (cmd string, params string, ok bool) {
     376        if (msg.Command != "PRIVMSG" && msg.Command != "NOTICE") || len(msg.Params) < 2 {
     377                return "", "", false
     378        }
     379        text := msg.Params[1]
     380
     381        if !strings.HasPrefix(text, "\x01") {
     382                return "", "", false
     383        }
     384        text = strings.Trim(text, "\x01")
     385
     386        words := strings.SplitN(text, " ", 2)
     387        cmd = strings.ToUpper(words[0])
     388        if len(words) > 1 {
     389                params = words[1]
     390        }
     391
     392        return cmd, params, true
     393}
  • trunk/logger.go

    r391 r392  
    131131                return fmt.Sprintf("-%s- %s", msg.Prefix.Name, msg.Params[1])
    132132        case "PRIVMSG":
    133                 return fmt.Sprintf("<%s> %s", msg.Prefix.Name, msg.Params[1])
     133                if cmd, params, ok := parseCTCPMessage(msg); ok && cmd == "ACTION" {
     134                        return fmt.Sprintf("* %s %s", msg.Prefix.Name, params)
     135                } else {
     136                        return fmt.Sprintf("<%s> %s", msg.Prefix.Name, msg.Params[1])
     137                }
    134138        default:
    135139                return ""
     
    145149        line = line[11:]
    146150
    147         var cmd, suffix string
     151        var cmd, sender, text string
    148152        if strings.HasPrefix(line, "<") {
    149153                cmd = "PRIVMSG"
    150                 suffix = "> "
     154                parts := strings.SplitN(line[1:], "> ", 2)
     155                if len(parts) != 2 {
     156                        return nil, time.Time{}, nil
     157                }
     158                sender, text = parts[0], parts[1]
    151159        } else if strings.HasPrefix(line, "-") {
    152160                cmd = "NOTICE"
    153                 suffix = "- "
     161                parts := strings.SplitN(line[1:], "- ", 2)
     162                if len(parts) != 2 {
     163                        return nil, time.Time{}, nil
     164                }
     165                sender, text = parts[0], parts[1]
     166        } else if strings.HasPrefix(line, "* ") {
     167                cmd = "PRIVMSG"
     168                parts := strings.SplitN(line[2:], " ", 2)
     169                if len(parts) != 2 {
     170                        return nil, time.Time{}, nil
     171                }
     172                sender, text = parts[0], "\x01ACTION "+parts[1]+"\x01"
    154173        } else {
    155174                return nil, time.Time{}, nil
    156175        }
    157 
    158         i := strings.Index(line, suffix)
    159         if i < 0 {
    160                 return nil, time.Time{}, nil
    161         }
    162         sender := line[1:i]
    163         text := line[i+2:]
    164176
    165177        year, month, day := ref.Date()
Note: See TracChangeset for help on using the changeset viewer.