/*
goircd -- minimalistic simple Internet Relay Chat (IRC) server
-Copyright (C) 2014-2015 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2014-2016 Sergey Matveev <stargrave@stargrave.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
nickname := cols[1]
// Compatibility with some clients prepending colons to nickname
nickname = strings.TrimPrefix(nickname, ":")
+ nickname = strings.ToLower(nickname)
for existingClient := range clients {
if *existingClient.nickname == nickname {
client.ReplyParts("433", "*", nickname, "Nickname is already in use")
ClientRegister(client, cmd, cols)
continue
}
+ if client != nil {
+ client.recvTimestamp = now
+ }
switch cmd {
case "AWAY":
if len(cols) == 1 {
cols := strings.Split(cols[1], " ")
nicknames := strings.Split(cols[len(cols)-1], ",")
SendWhois(client, nicknames)
+ case "ISON":
+ if len(cols) == 1 || len(cols[1]) < 1 {
+ client.ReplyNotEnoughParameters("ISON")
+ continue
+ }
+ nicksKnown := make(map[string]struct{})
+ for c := range clients {
+ nicksKnown[*c.nickname] = struct{}{}
+ }
+ var nicksExists []string
+ for _, nickname := range strings.Split(cols[1], " ") {
+ if _, exists := nicksKnown[nickname]; exists {
+ nicksExists = append(nicksExists, nickname)
+ }
+ }
+ client.ReplyNicknamed("303", strings.Join(nicksExists, " "))
case "VERSION":
var debug string
if *verbose {
client.ReplyNicknamed("421", cmd, "Unknown command")
}
}
- if client != nil {
- client.recvTimestamp = now
- }
}
}