From 0c42706d889693f85a6c5ca9f7fed5aea92b7c55 Mon Sep 17 00:00:00 2001 From: Andrey Petrov Date: Fri, 12 Dec 2014 15:02:55 -0800 Subject: [PATCH] Silence timer. --- client.go | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/client.go b/client.go index c5ffe55..03f57b7 100644 --- a/client.go +++ b/client.go @@ -113,7 +113,7 @@ func (c *Client) handleShell(channel ssh.Channel) { break } - parts := strings.SplitN(line, " ", 2) + parts := strings.SplitN(line, " ", 3) isCmd := strings.HasPrefix(parts[0], "/") if isCmd { @@ -125,6 +125,13 @@ func (c *Client) handleShell(channel ssh.Channel) { c.WriteLines(strings.Split(HELP_TEXT, "\n")) case "/about": c.WriteLines(strings.Split(ABOUT_TEXT, "\n")) + case "/me": + msg := fmt.Sprintf("* %s %s", c.Name, line) + if c.IsSilenced() { + c.Msg <- fmt.Sprintf("-> Message rejected, silenced.") + } else { + c.Server.Broadcast(msg, c) + } case "/nick": if len(parts) == 2 { c.Server.Rename(c, parts[1]) @@ -177,6 +184,27 @@ func (c *Client) handleShell(channel ssh.Channel) { c.Server.Op(fingerprint) } } + case "/silence": + if !c.Server.IsOp(c) { + c.Msg <- fmt.Sprintf("-> You're not an admin.") + } else if len(parts) < 2 { + c.Msg <- fmt.Sprintf("-> Missing $NAME from: /silence $NAME") + } else { + duration := time.Duration(5) * time.Minute + if len(parts) >= 3 { + parsedDuration, err := time.ParseDuration(parts[2]) + if err == nil { + duration = parsedDuration + } + } + client := c.Server.Who(parts[1]) + if client == nil { + c.Msg <- fmt.Sprintf("-> No such name: %s", parts[1]) + } else { + client.Silence(duration) + client.Write(fmt.Sprintf("-> Silenced for %s by %s.", duration, c.Name)) + } + } default: c.Msg <- fmt.Sprintf("-> Invalid command: %s", line) }