mirror of https://github.com/fluffle/goirc
Pass the irc.Nick to all command handlers
This avoids doing another lookup in hasAccess
This commit is contained in:
parent
0c7aba3fc3
commit
319e776c34
13
auth.go
13
auth.go
|
@ -12,7 +12,7 @@ const authFile = "auth.conf"
|
||||||
var auth *config.Config
|
var auth *config.Config
|
||||||
|
|
||||||
func readAuth() {
|
func readAuth() {
|
||||||
var err os.Error;
|
var err os.Error
|
||||||
auth, err = config.ReadDefault(authFile)
|
auth, err = config.ReadDefault(authFile)
|
||||||
if (err != nil) {
|
if (err != nil) {
|
||||||
panic(fmt.Sprintf("Auth config error: %s", err))
|
panic(fmt.Sprintf("Auth config error: %s", err))
|
||||||
|
@ -102,19 +102,14 @@ func removeUser(conn *irc.Conn, channel, nick string) (string, bool) {
|
||||||
// passing a flag of "" will check if the user has any access
|
// passing a flag of "" will check if the user has any access
|
||||||
// returns the channel the user has access on and remaining args
|
// returns the channel the user has access on and remaining args
|
||||||
// or a blank channel if the user doesn't have access on that channel
|
// or a blank channel if the user doesn't have access on that channel
|
||||||
func hasAccess(conn *irc.Conn, nick, target, args, flag string) (string, string) {
|
func hasAccess(conn *irc.Conn, nick *irc.Nick, target, args, flag string) (string, string) {
|
||||||
n := conn.GetNick(nick)
|
|
||||||
if n == nil {
|
|
||||||
return "", args
|
|
||||||
}
|
|
||||||
|
|
||||||
// figure out what the channel and args are
|
// figure out what the channel and args are
|
||||||
var channel string
|
var channel string
|
||||||
if isChannel(target) {
|
if isChannel(target) {
|
||||||
channel = target
|
channel = target
|
||||||
} else {
|
} else {
|
||||||
split := strings.Split(args, " ", 2)
|
split := strings.Split(args, " ", 2)
|
||||||
if isChannel(split[0]) {
|
if split[0] != "" && isChannel(split[0]) {
|
||||||
channel = split[0]
|
channel = split[0]
|
||||||
if len(split) == 2 {
|
if len(split) == 2 {
|
||||||
args = split[1]
|
args = split[1]
|
||||||
|
@ -127,7 +122,7 @@ func hasAccess(conn *irc.Conn, nick, target, args, flag string) (string, string)
|
||||||
}
|
}
|
||||||
|
|
||||||
// actually check access
|
// actually check access
|
||||||
user := user(n)
|
user := user(nick)
|
||||||
if owner, _ := auth.String(conn.Network, "owner"); owner == user {
|
if owner, _ := auth.String(conn.Network, "owner"); owner == user {
|
||||||
return channel, args
|
return channel, args
|
||||||
}
|
}
|
||||||
|
|
54
handler.go
54
handler.go
|
@ -13,7 +13,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
var commands = map [string]func(*irc.Conn, string, string, string) {
|
var commands = map [string]func(*irc.Conn, *irc.Nick, string, string) {
|
||||||
"tr": translate,
|
"tr": translate,
|
||||||
"flags": flags,
|
"flags": flags,
|
||||||
"add": add,
|
"add": add,
|
||||||
|
@ -26,9 +26,11 @@ var commands = map [string]func(*irc.Conn, string, string, string) {
|
||||||
const googleAPIKey = "ABQIAAAA6-N_jl4ETgtMf2M52JJ_WRQjQjNunkAJHIhTdFoxe8Di7fkkYhRRcys7ZxNbH3MIy_MKKcEO4-9_Ag"
|
const googleAPIKey = "ABQIAAAA6-N_jl4ETgtMf2M52JJ_WRQjQjNunkAJHIhTdFoxe8Di7fkkYhRRcys7ZxNbH3MIy_MKKcEO4-9_Ag"
|
||||||
|
|
||||||
func handlePrivmsg(conn *irc.Conn, line *irc.Line) {
|
func handlePrivmsg(conn *irc.Conn, line *irc.Line) {
|
||||||
if n := conn.GetNick(line.Nick); n != nil {
|
nick := conn.GetNick(line.Nick)
|
||||||
n.Host = line.Host
|
if nick == nil {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
nick.Host = line.Host
|
||||||
|
|
||||||
target := line.Args[0]
|
target := line.Args[0]
|
||||||
if isChannel(target) {
|
if isChannel(target) {
|
||||||
|
@ -46,13 +48,13 @@ func handlePrivmsg(conn *irc.Conn, line *irc.Line) {
|
||||||
if pound := strings.Index(video, "#"); pound > -1 {
|
if pound := strings.Index(video, "#"); pound > -1 {
|
||||||
video = video[0:pound]
|
video = video[0:pound]
|
||||||
}
|
}
|
||||||
youtube(conn, line.Nick, video, target)
|
youtube(conn, nick, video, target)
|
||||||
|
} else {
|
||||||
|
command(conn, nick, line.Text, target)
|
||||||
}
|
}
|
||||||
|
|
||||||
command(conn, line.Nick, line.Text, target)
|
|
||||||
} else if target == conn.Me.Nick {
|
} else if target == conn.Me.Nick {
|
||||||
// message to us
|
// message to us
|
||||||
command(conn, line.Nick, line.Text, line.Nick)
|
command(conn, nick, line.Text, line.Nick)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,7 +68,7 @@ func isChannel(target string) bool {
|
||||||
return target[0] == '#' || target[0] == '&'
|
return target[0] == '#' || target[0] == '&'
|
||||||
}
|
}
|
||||||
|
|
||||||
func command(conn *irc.Conn, nick, text, target string) {
|
func command(conn *irc.Conn, nick *irc.Nick, text, target string) {
|
||||||
if !strings.HasPrefix(text, trigger) {
|
if !strings.HasPrefix(text, trigger) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -93,7 +95,7 @@ func say(conn *irc.Conn, target, message string, a ...interface{}) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func youtube(conn *irc.Conn, nick, video, channel string) {
|
func youtube(conn *irc.Conn, nick *irc.Nick, video, channel string) {
|
||||||
url := fmt.Sprintf("http://gdata.youtube.com/feeds/api/videos/%s?v=2", video)
|
url := fmt.Sprintf("http://gdata.youtube.com/feeds/api/videos/%s?v=2", video)
|
||||||
response, _, err := http.Get(url)
|
response, _, err := http.Get(url)
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
|
@ -130,13 +132,13 @@ func youtube(conn *irc.Conn, nick, video, channel string) {
|
||||||
} else {
|
} else {
|
||||||
durationStr = fmt.Sprintf("%02d:%02d", minutes, seconds)
|
durationStr = fmt.Sprintf("%02d:%02d", minutes, seconds)
|
||||||
}
|
}
|
||||||
say(conn, channel, "%s's video: %s, %s", nick, yte.Title, durationStr)
|
say(conn, channel, "%s's video: %s, %s", nick.Nick, yte.Title, durationStr)
|
||||||
} else {
|
} else {
|
||||||
say(conn, channel, "%s's video: %s", nick, yte.Title)
|
say(conn, channel, "%s's video: %s", nick.Nick, yte.Title)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func translate(conn *irc.Conn, nick, args, target string) {
|
func translate(conn *irc.Conn, nick *irc.Nick, args, target string) {
|
||||||
var langPairs vector.StringVector
|
var langPairs vector.StringVector
|
||||||
for {
|
for {
|
||||||
split := strings.Split(args, " ", 2)
|
split := strings.Split(args, " ", 2)
|
||||||
|
@ -163,20 +165,20 @@ func translate(conn *irc.Conn, nick, args, target string) {
|
||||||
response, _, err := http.Get(url)
|
response, _, err := http.Get(url)
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
say(conn, target, "%s: Error while requesting translation", nick); return
|
say(conn, target, "%s: Error while requesting translation", nick.Nick); return
|
||||||
}
|
}
|
||||||
b, err := ioutil.ReadAll(response.Body)
|
b, err := ioutil.ReadAll(response.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
say(conn, target, "%s: Error while downloading translation", nick); return
|
say(conn, target, "%s: Error while downloading translation", nick.Nick); return
|
||||||
}
|
}
|
||||||
|
|
||||||
var result map[string]interface{}
|
var result map[string]interface{}
|
||||||
err = json.Unmarshal(b, &result)
|
err = json.Unmarshal(b, &result)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
say(conn, target, "%s: Error while decoding translation", nick); return
|
say(conn, target, "%s: Error while decoding translation", nick.Nick); return
|
||||||
}
|
}
|
||||||
if result["responseStatus"] != float64(200) {
|
if result["responseStatus"] != float64(200) {
|
||||||
say(conn, target, "%s: %s", nick, result["responseDetails"]); return
|
say(conn, target, "%s: %s", nick.Nick, result["responseDetails"]); return
|
||||||
}
|
}
|
||||||
|
|
||||||
if langPairs.Len() > 0 {
|
if langPairs.Len() > 0 {
|
||||||
|
@ -203,7 +205,7 @@ func sayTr(conn *irc.Conn, target string, data interface{}) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func add(conn *irc.Conn, nick, args, target string) {
|
func add(conn *irc.Conn, nick *irc.Nick, args, target string) {
|
||||||
channel, args := hasAccess(conn, nick, target, args, "a")
|
channel, args := hasAccess(conn, nick, target, args, "a")
|
||||||
if channel == "" {
|
if channel == "" {
|
||||||
return
|
return
|
||||||
|
@ -219,7 +221,7 @@ func add(conn *irc.Conn, nick, args, target string) {
|
||||||
say(conn, target, "%s now has flags %s", host, nflags)
|
say(conn, target, "%s now has flags %s", host, nflags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func remove(conn *irc.Conn, nick, args, target string) {
|
func remove(conn *irc.Conn, nick *irc.Nick, args, target string) {
|
||||||
channel, args := hasAccess(conn, nick, target, args, "a")
|
channel, args := hasAccess(conn, nick, target, args, "a")
|
||||||
if channel == "" {
|
if channel == "" {
|
||||||
return
|
return
|
||||||
|
@ -245,7 +247,7 @@ func remove(conn *irc.Conn, nick, args, target string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func flags(conn *irc.Conn, nick, args, target string) {
|
func flags(conn *irc.Conn, nick *irc.Nick, args, target string) {
|
||||||
channel, args := hasAccess(conn, nick, target, args, "")
|
channel, args := hasAccess(conn, nick, target, args, "")
|
||||||
if channel == "" {
|
if channel == "" {
|
||||||
return
|
return
|
||||||
|
@ -253,7 +255,7 @@ func flags(conn *irc.Conn, nick, args, target string) {
|
||||||
|
|
||||||
query := strings.TrimSpace(args)
|
query := strings.TrimSpace(args)
|
||||||
if query == "" {
|
if query == "" {
|
||||||
query = nick
|
query = nick.Nick
|
||||||
}
|
}
|
||||||
n := conn.GetNick(query)
|
n := conn.GetNick(query)
|
||||||
if n == nil {
|
if n == nil {
|
||||||
|
@ -275,7 +277,7 @@ func flags(conn *irc.Conn, nick, args, target string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func topic(conn *irc.Conn, nick, args, target string) {
|
func topic(conn *irc.Conn, nick *irc.Nick, args, target string) {
|
||||||
channel, args := hasAccess(conn, nick, target, args, "t")
|
channel, args := hasAccess(conn, nick, target, args, "t")
|
||||||
if channel == "" {
|
if channel == "" {
|
||||||
return
|
return
|
||||||
|
@ -286,10 +288,10 @@ func topic(conn *irc.Conn, nick, args, target string) {
|
||||||
conn.Topic(channel, args)
|
conn.Topic(channel, args)
|
||||||
} else {
|
} else {
|
||||||
basetopic, _ := conf.String(section, "basetopic")
|
basetopic, _ := conf.String(section, "basetopic")
|
||||||
say(conn, nick, "Basetopic: %s", basetopic)
|
say(conn, nick.Nick, "Basetopic: %s", basetopic)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func appendtopic(conn *irc.Conn, nick, args, target string) {
|
func appendtopic(conn *irc.Conn, nick *irc.Nick, args, target string) {
|
||||||
channel, args := hasAccess(conn, nick, target, args, "t")
|
channel, args := hasAccess(conn, nick, target, args, "t")
|
||||||
if channel == "" {
|
if channel == "" {
|
||||||
return
|
return
|
||||||
|
@ -304,14 +306,14 @@ func appendtopic(conn *irc.Conn, nick, args, target string) {
|
||||||
basetopic, _ := conf.String(section, "basetopic")
|
basetopic, _ := conf.String(section, "basetopic")
|
||||||
if basetopic == "" || !strings.HasPrefix(c.Topic, basetopic) {
|
if basetopic == "" || !strings.HasPrefix(c.Topic, basetopic) {
|
||||||
basetopic = c.Topic
|
basetopic = c.Topic
|
||||||
say(conn, nick, "New basetopic: %s", basetopic)
|
say(conn, nick.Nick, "New basetopic: %s", basetopic)
|
||||||
updateConf(section, "basetopic", basetopic)
|
updateConf(section, "basetopic", basetopic)
|
||||||
}
|
}
|
||||||
conn.Topic(channel, basetopic + args)
|
conn.Topic(channel, basetopic + args)
|
||||||
}
|
}
|
||||||
|
|
||||||
func csay(conn *irc.Conn, nick, args, target string) {
|
func csay(conn *irc.Conn, nick *irc.Nick, args, target string) {
|
||||||
channel, args := hasAccess(conn, nick, target, args, "t")
|
channel, args := hasAccess(conn, nick, target, args, "s")
|
||||||
if channel != "" {
|
if channel != "" {
|
||||||
say(conn, channel, args)
|
say(conn, channel, args)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue