From 32a32cda357a5d5e10bff50958708cb4081e4765 Mon Sep 17 00:00:00 2001 From: raylu Date: Tue, 26 Oct 2010 17:21:08 -0400 Subject: [PATCH] (de)op, (de)hop, kick --- auth.go | 2 +- handler.go | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/auth.go b/auth.go index 33528d4..918710d 100644 --- a/auth.go +++ b/auth.go @@ -131,7 +131,7 @@ func hasAccess(conn *irc.Conn, nick *irc.Nick, target, args, flag string) (strin if err != nil { return "", args } - if strings.Index(flags, flag) > -1 { + if flag == "" || strings.IndexAny(flags, flag) > -1 { return channel, args } return "", args diff --git a/handler.go b/handler.go index d0eef3e..7d7edda 100644 --- a/handler.go +++ b/handler.go @@ -21,6 +21,15 @@ var commands = map [string]func(*irc.Conn, *irc.Nick, string, string) { "topic": topic, "appendtopic": appendtopic, "say": csay, + + "halfop": halfop, + "hop": halfop, + "op": op, + "deop": deop, + "dehalfop": dehalfop, + "dehop": dehalfop, + "kick": kick, + "k": kick, } const googleAPIKey = "ABQIAAAA6-N_jl4ETgtMf2M52JJ_WRQjQjNunkAJHIhTdFoxe8Di7fkkYhRRcys7ZxNbH3MIy_MKKcEO4-9_Ag" @@ -334,3 +343,90 @@ func csay(conn *irc.Conn, nick *irc.Nick, args, target string) { say(conn, channel, args) } } + +func op(conn *irc.Conn, nick *irc.Nick, args, target string) { + channel, args := hasAccess(conn, nick, target, args, "o") + if channel == "" { + return + } + + if args == "" { + conn.Mode(channel, "+o " + nick.Nick) + } else { + ops := strings.TrimSpace(args) + count := strings.Count(ops, " ") + 1 + modestring := "+" + strings.Repeat("o", count) + " " + ops + conn.Mode(channel, modestring) + } +} + +func deop(conn *irc.Conn, nick *irc.Nick, args, target string) { + channel, args := hasAccess(conn, nick, target, args, "o") + if channel == "" { + return + } + + if args == "" { + conn.Mode(channel, "-o " + nick.Nick) + } else { + ops := strings.TrimSpace(args) + count := strings.Count(ops, " ") + 1 + modestring := "-" + strings.Repeat("o", count) + " " + ops + conn.Mode(channel, modestring) + } +} + +func halfop(conn *irc.Conn, nick *irc.Nick, args, target string) { + channel, args := hasAccess(conn, nick, target, args, "oh") + if channel == "" { + return + } + + if args == "" { + conn.Mode(channel, "+h " + nick.Nick) + } else { + // giving others +h requires o + channel, args = hasAccess(conn, nick, channel, args, "o") + if channel == "" { + return + } + halfops := strings.TrimSpace(args) + count := strings.Count(halfops, " ") + 1 + modestring := "+" + strings.Repeat("h", count) + " " + halfops + conn.Mode(channel, modestring) + } +} + +func dehalfop(conn *irc.Conn, nick *irc.Nick, args, target string) { + channel, args := hasAccess(conn, nick, target, args, "oh") + if channel == "" { + return + } + + if args == "" { + conn.Mode(channel, "-h " + nick.Nick) + } else { + channel, args = hasAccess(conn, nick, channel, args, "o") + if channel == "" { + return + } + halfops := strings.TrimSpace(args) + count := strings.Count(halfops, " ") + 1 + modestring := "-" + strings.Repeat("h", count) + " " + halfops + conn.Mode(channel, modestring) + } +} + +func kick(conn *irc.Conn, nick *irc.Nick, args, target string) { + channel, args := hasAccess(conn, nick, target, args, "oh") + if channel == "" || args == "" { + return + } + + split := strings.Split(args, " ", 2) + reason := "(" + nick.Nick + ")" + if len(split) == 2 { + reason += " " + split[1] + } + conn.Kick(channel, split[0], reason) +}