README | 2 +- client.go | 1 + daemon.go | 15 ++++++++++++++- diff --git a/README b/README index 8344eef98542de4f5a80c538f0e9cec0215f247c52d9d3be3ed23e0d56c06eb6..82cd5eca91fdc198232ce54c0b9477bf96c60c12872979735f23c6c60981d1dc 100644 --- a/README +++ b/README @@ -40,7 +40,7 @@ * 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 diff --git a/client.go b/client.go index 09f5c06c8a9d0abe16630016120d93388967fdf28d24afa988e3eef6c257a2f7..0abd9c49cd199872743ad025995a0a6ea66e4ddf6e43f43be9c19bc6f9c40658 100644 --- a/client.go +++ b/client.go @@ -38,6 +38,7 @@ nickname string username string realname string password string + away *string } type ClientAlivenessState struct { diff --git a/daemon.go b/daemon.go index 22d45079a5881623f8619e30222b417d8396a363e000eadacd555b8dcadc65ec..6167453f632e51a2d95e9264a0f90705771b7c93677658444157f1d22f443755 100644 --- a/daemon.go +++ b/daemon.go @@ -111,6 +111,9 @@ h = "Unknown" } 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 @@ continue } 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 @@ for c := range daemon.clients { 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 } }