README | 4 ++-- daemon.go | 16 ++++++++++++++++ diff --git a/README b/README index f37efae350800ec15e12dc03ee66691ad248d469226c3067763b9df6075baff4..44d7f6f817519562356bd3c51588283c73c747c954c065ffd5249e6fd69925e4 100644 --- a/README +++ b/README @@ -4,7 +4,7 @@ DESCRIPTION goircd is very simple IRC server, written on Go. -It is heavily inspired by miniircd daemon written on Python. +It was heavily inspired by miniircd daemon written on Python. GoVPN is free software: see the file COPYING for copying conditions. It does not aim to replace full featured mass scalable IRC networks: @@ -35,7 +35,7 @@ SUPPORTED IRC COMMANDS * PASS/NICK/USER during registration workflow * PING/PONGs -* NOTICE/PRIVMSG +* NOTICE/PRIVMSG, ISON * AWAY, MOTD, LUSERS, WHO, WHOIS, VERSION, QUIT * LIST, JOIN, TOPIC, +k/-k channel MODE diff --git a/daemon.go b/daemon.go index cd6a484352ff99a15dc5af3eced4a428450149f5c466cbd33ff863319295d7ae..1c46de4eb3ecd186f15d6dc762ecd087a254fc4822cecd61d1cf733338b0b46c 100644 --- a/daemon.go +++ b/daemon.go @@ -486,6 +486,22 @@ } 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 {