From 8684e37727642268d538de4e75b4db62be3d47cb Mon Sep 17 00:00:00 2001 From: raylu Date: Tue, 26 Oct 2010 18:31:19 -0400 Subject: [PATCH] ban, unban, kickban --- handler.go | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/handler.go b/handler.go index 57f1fcb..e189599 100644 --- a/handler.go +++ b/handler.go @@ -30,6 +30,11 @@ var commands = map [string]func(*irc.Conn, *irc.Nick, string, string) { "dehop": dehalfop, "kick": kick, "k": kick, + "b": ban, + "ban": ban, + "unban": unban, + "u": unban, + "kb": kickban, } const googleAPIKey = "ABQIAAAA6-N_jl4ETgtMf2M52JJ_WRQjQjNunkAJHIhTdFoxe8Di7fkkYhRRcys7ZxNbH3MIy_MKKcEO4-9_Ag" @@ -463,3 +468,73 @@ func kick(conn *irc.Conn, nick *irc.Nick, args, target string) { } conn.Kick(channel, split[0], reason) } + +func ban(conn *irc.Conn, nick *irc.Nick, args, target string) { + channel, args := parseAccess(conn, nick, target, args, "oh") + if channel == "" || args == "" { + return + } + + bans := strings.TrimSpace(args) + split := strings.Fields(bans) + // turn nicks into *!*@host + for i, ban := range(split) { + if strings.Index(ban, "@") != -1 { + // already a host + continue + } + n := conn.GetNick(ban) + if n == nil { + //couldn't find the nick, so just cross our fingers + continue + } + split[i] = "*!*@" + n.Host + } + bans = strings.Join(split, " ") + modestring := "+" + strings.Repeat("b", len(bans)) + " " + bans + conn.Mode(channel, modestring) +} + +func unban(conn *irc.Conn, nick *irc.Nick, args, target string) { + channel, args := parseAccess(conn, nick, target, args, "oh") + if channel == "" || args == "" { + return + } + + bans := strings.TrimSpace(args) + split := strings.Fields(bans) + for i, ban := range(split) { + if strings.Index(ban, "@") != -1 { + continue + } + n := conn.GetNick(ban) + if n == nil { + continue + } + split[i] = "*!*@" + n.Host + } + bans = strings.Join(split, " ") + modestring := "-" + strings.Repeat("b", len(bans)) + " " + bans + conn.Mode(channel, modestring) +} + +func kickban(conn *irc.Conn, nick *irc.Nick, args, target string) { + channel, args := parseAccess(conn, nick, target, args, "oh") + if channel == "" || args == "" { + return + } + + split := strings.Split(args, " ", 2) + + n := conn.GetNick(split[0]) + if n == nil { + return + } + conn.Mode(channel, "+b *!*@" + n.Host) + + reason := "(" + nick.Nick + ")" + if len(split) == 2 { + reason += " " + split[1] + } + conn.Kick(channel, split[0], reason) +}