]> Cypherpunks.ru repositories - goircd.git/commitdiff
Add AWAY command support 1.1
authorSergey Matveev <stargrave@stargrave.org>
Fri, 14 Nov 2014 20:26:32 +0000 (23:26 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 14 Nov 2014 20:26:32 +0000 (23:26 +0300)
README
client.go
daemon.go

diff --git a/README b/README
index f2b331717a345316c4b88ec5b98b5ee1bc112e3b..9b4d8cf1d8d193e947824f68abf88d52e6be3b49 100644 (file)
--- a/README
+++ b/README
@@ -40,7 +40,7 @@ SUPPORTED IRC COMMANDS
 * PASS/NICK/USER during registration workflow
 * PING/PONGs
 * NOTICE/PRIVMSG
-* MOTD, LUSERS, WHO, WHOIS, VERSION, QUIT
+* AWAY, MOTD, LUSERS, WHO, WHOIS, VERSION, QUIT
 * LIST, JOIN, TOPIC, +k/-k channel MODE
 
 USAGE
index 3637d499da5e245990241eaffb0efad337214600..1b4a9c365993abc7aa2b0f537bd98b498fe87947 100644 (file)
--- a/client.go
+++ b/client.go
@@ -38,6 +38,7 @@ type Client struct {
        username   string
        realname   string
        password   string
+       away       *string
 }
 
 type ClientAlivenessState struct {
index 9b0d77f500c0614cafe33121e5b19c81bf9dae07..ed708de9875a7b054f27e5a27bfad6e122ad90d3 100644 (file)
--- a/daemon.go
+++ b/daemon.go
@@ -111,6 +111,9 @@ func (daemon *Daemon) SendWhois(client *Client, nicknames []string) {
                        }
                        client.ReplyNicknamed("311", c.nickname, c.username, h, "*", c.realname)
                        client.ReplyNicknamed("312", c.nickname, *daemon.hostname, *daemon.hostname)
+                       if c.away != nil {
+                               client.ReplyNicknamed("301", c.nickname, *c.away)
+                       }
                        subscriptions := []string{}
                        for _, room := range daemon.rooms {
                                for subscriber := range room.members {
@@ -347,7 +350,14 @@ func (daemon *Daemon) Processor(events <-chan ClientEvent) {
                        }
                        switch command {
                        case "AWAY":
-                               continue
+                               if len(cols) == 1 {
+                                       client.away = nil
+                                       client.ReplyNicknamed("305", "You are no longer marked as being away")
+                                       continue
+                               }
+                               msg := strings.TrimLeft(cols[1], ":")
+                               client.away = &msg
+                               client.ReplyNicknamed("306", "You have been marked as being away")
                        case "JOIN":
                                if len(cols) == 1 || len(cols[1]) < 1 {
                                        client.ReplyNotEnoughParameters("JOIN")
@@ -422,6 +432,9 @@ func (daemon *Daemon) Processor(events <-chan ClientEvent) {
                                        if c.nickname == target {
                                                msg = fmt.Sprintf(":%s %s %s %s", client, command, c.nickname, cols[1])
                                                c.Msg(msg)
+                                               if c.away != nil {
+                                                       client.ReplyNicknamed("301", c.nickname, *c.away)
+                                               }
                                                break
                                        }
                                }