diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go index 9947710f..da78872c 100644 --- a/bridge/irc/irc.go +++ b/bridge/irc/irc.go @@ -242,6 +242,25 @@ func (b *Birc) Send(msg config.Message) (string, error) { return "", nil } +func colorizeString(s string, foreground int64, background int64) string { + return fmt.Sprintf("\x03%02d,%02d%s\x03", foreground, background, s) +} + +func (b *Birc) colorizeUsername(username string) string { + ircNickColors := b.GetStringSlice2D("ColorNicksList") + checksum := int(crc32.ChecksumIEEE([]byte(username))) + selectedColorPair := ircNickColors[checksum%len(ircNickColors)] + foreground, err := strconv.ParseInt(selectedColorPair[0], 16, 64) + if err == nil { + panic(fmt.Sprintf("Bad IRC color code: %v", selectedColorPair[0])) + } + background, err := strconv.ParseInt(selectedColorPair[1], 16, 64) + if err == nil { + panic(fmt.Sprintf("Bad IRC color code: %v", selectedColorPair[1])) + } + return colorizeString(username, foreground, background) +} + func (b *Birc) doSend() { rate := time.Millisecond * time.Duration(b.MessageDelay) throttle := time.NewTicker(rate) @@ -249,8 +268,7 @@ func (b *Birc) doSend() { <-throttle.C username := msg.Username if b.GetBool("Colornicks") { - checksum := crc32.ChecksumIEEE([]byte(msg.Username)) - username = fmt.Sprintf("\x03%02d%s\x0F", checksum%0x10, msg.Username) + username = b.colorizeUsername(msg.Username) } if msg.Event == config.EVENT_USER_ACTION { b.i.Cmd.Action(msg.Channel, username+msg.Text) diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index bf9e147b..593a4511 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -96,6 +96,41 @@ RejoinDelay=0 #Only works in IRC right now. ColorNicks=false +#ColorNicksList holds a list of pairs of [foreground, background] colors. +#Colors are represented by these numbers: +# White 0x0 +# Black 0x1 +# Blue 0x2 +# Green 0x3 +# Light Red 0x4 +# Brown 0x5 +# Purple 0x6 +# Orange 0x7 +# Yellow 0x8 +# Light Green 0x9 +# Cyan 0xa +# Light Cyan 0xb +# Light Blue 0xc +# Pink 0xd +# Grey 0xe +# Light Grey 0xf +ColorNicksList=[ + [0x2, 0x1] + [0x3, 0x1] + [0x4, 0x1] + [0x5, 0x1] + [0x6, 0x1] + [0x7, 0x1] + [0x8, 0x1] + [0x9, 0x1] + [0xa, 0x1] + [0xb, 0x1] + [0xc, 0x1] + [0xd, 0x1] + [0xe, 0x1] + [0xf, 0x1] +] + #Nicks you want to ignore. #Messages from those users will not be sent to other bridges. #OPTIONAL