diff --git a/irc/nickname.go b/irc/nickname.go index 370d3ec4..6c43eb32 100644 --- a/irc/nickname.go +++ b/irc/nickname.go @@ -62,8 +62,11 @@ func performNickChange(server *Server, client *Client, target *Client, newnick s if hadNick { target.server.snomasks.Send(sno.LocalNicks, fmt.Sprintf(ircfmt.Unescape("$%s$r changed nickname to %s"), whowas.nick, nickname)) target.server.whoWas.Append(whowas) + rb.Add(nil, origNickMask, "NICK", nickname) for friend := range target.Friends() { - friend.Send(nil, origNickMask, "NICK", nickname) + if friend != client { + friend.Send(nil, origNickMask, "NICK", nickname) + } } } diff --git a/irc/responsebuffer.go b/irc/responsebuffer.go index 3fccca01..183a7fe7 100644 --- a/irc/responsebuffer.go +++ b/irc/responsebuffer.go @@ -142,10 +142,10 @@ func (rb *ResponseBuffer) flushInternal(final bool, blocking bool) error { } useLabel := rb.target.capabilities.Has(caps.LabeledResponse) && rb.Label != "" - // use a batch if we have a label, and we either currently have multiple messages, + // use a batch if we have a label, and we either currently have 0 or 2+ messages, // or we are doing a Flush() and we have to assume that there will be more messages // in the future. - useBatch := useLabel && (len(rb.messages) > 1 || !final) + useBatch := useLabel && (len(rb.messages) != 1 || !final) // if label but no batch, add label to first message if useLabel && !useBatch && len(rb.messages) == 1 && rb.batchID == "" {