summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Matveev <stargrave@stargrave.org>2015-11-14 18:54:34 +0300
committerSergey Matveev <stargrave@stargrave.org>2015-11-14 18:54:34 +0300
commit7770e09e68f8dd0991ecd5a32383a89ac3e50857 (patch)
treef1999926bc329b0edc58df85c7d0c555de69078d
parentf93640a33547bad6537d2f490e1123c76720f7ff (diff)
downloadgoircd-7770e09e68f8dd0991ecd5a32383a89ac3e50857.tar.xz
ISON command support
-rw-r--r--README4
-rw-r--r--daemon.go16
2 files changed, 18 insertions, 2 deletions
diff --git a/README b/README
index 0a11809..f3a0ec0 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 b795a0c..1af9712 100644
--- a/daemon.go
+++ b/daemon.go
@@ -486,6 +486,22 @@ func Processor(events chan ClientEvent, finished chan struct{}) {
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 {