diff --git a/irc/handlers.go b/irc/handlers.go index 47f16652..697282e2 100644 --- a/irc/handlers.go +++ b/irc/handlers.go @@ -1273,11 +1273,12 @@ func sajoinHandler(server *Server, client *Client, msg ircmsg.Message, rb *Respo } // KICK {,} {,} [] +// The number of channels must be either 1 or equal to the number of users func kickHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool { hasPrivs := client.HasRoleCapabs("samode") channels := strings.Split(msg.Params[0], ",") users := strings.Split(msg.Params[1], ",") - if (len(channels) != len(users)) && (len(users) != 1) { + if (len(channels) != len(users)) && (len(users) != 1) && (len(channels) != 1) { rb.Add(nil, server.name, ERR_NEEDMOREPARAMS, client.nick, "KICK", client.t("Not enough parameters")) return false } @@ -1286,16 +1287,16 @@ func kickHandler(server *Server, client *Client, msg ircmsg.Message, rb *Respons channel string nick string } - kicks := make([]kickCmd, 0, len(channels)) - for index, channel := range channels { + kicks := make([]kickCmd, 0, len(users)) + channel := channels[0] + for index, user := range users { + if len(channels) > 1 { + channel = channels[index] + } if channel == "" { continue // #679 } - if len(users) == 1 { - kicks = append(kicks, kickCmd{channel, users[0]}) - } else { - kicks = append(kicks, kickCmd{channel, users[index]}) - } + kicks = append(kicks, kickCmd{channel, user}) } var comment string