NOW Things are Rolling

This commit is contained in:
Brian Buller 2014-12-23 14:20:55 -06:00
parent 01f9aaa035
commit c17e4dc06d
2 changed files with 185 additions and 89 deletions

View File

@ -12,12 +12,12 @@ import (
type Config struct { type Config struct {
// The JSON object of what was read // The JSON object of what was read
LoadedJson jason.Object LoadedJson jason.Object
Options jason.Object Options jason.Object
FeatureTPHome bool FeatureTPHome bool
FeatureTPVisit bool FeatureTPVisit bool
Users []*User FeatureDayNight bool
U User Users []*User
} }
var c *Config var c *Config
@ -30,6 +30,7 @@ func LoadConfig(mm *MessageManager) {
o, _ := j.GetObjectArray("options") o, _ := j.GetObjectArray("options")
// Add the "Stop" listener // Add the "Stop" listener
fmt.Println("Activating 'stop' listener")
AddListener(func(i *Message) bool { AddListener(func(i *Message) bool {
//listeners = append(mm.listeners, func(i *Message) bool { //listeners = append(mm.listeners, func(i *Message) bool {
if i.User.IsOp && i.Text == "!stop\n" { if i.User.IsOp && i.Text == "!stop\n" {
@ -44,48 +45,136 @@ func LoadConfig(mm *MessageManager) {
opt_enabled, _ := option.GetBoolean("enabled") opt_enabled, _ := option.GetBoolean("enabled")
if opt_name == "home" { if opt_name == "home" {
c.FeatureTPHome = opt_enabled c.FeatureTPHome = opt_enabled
// Add the listener for "!set home" if opt_enabled {
// Add !set home listener fmt.Println("Activating 'home' listeners")
AddListener(func(i *Message) bool { // Add !set home listener
// mm.listeners = append(mm.listeners, func(i *Message) bool { AddListener(func(i *Message) bool {
if i.User.Name != "" && i.Text == "!set home\n" { if i.User.Name != "" && i.Text == "!set home\n" {
AddTempListener(func(inp *Message) bool { AddTempListener(func(inp *Message) bool {
//mm.tempListeners = append(mm.tempListeners, func(inp *Message) bool { listen_for := "Teleported " + i.User.Name + " to "
listen_for := "Teleported " + i.User.Name + " to " if inp.User.Name == "" && strings.Contains(inp.Text, listen_for) {
if inp.User.Name == "" && strings.Contains(inp.Text, listen_for) { // Found the text
// Found the text r := strings.Split(inp.Text, listen_for)
r := strings.Split(inp.Text, listen_for) if len(r) > 0 {
if len(r) > 0 { p_str := r[1]
p_str := r[1] p_str = strings.Replace(p_str, ",", "", -1)
p_str = strings.Replace(p_str, ",", "", -1) SetHome(i.User.Name, p_str)
SetHome(i.User.Name, p_str) mm.Output("tellraw " + i.User.Name + " Set your home to " + p_str)
mm.Output("tell " + i.User.Name + " Set your home to " + p_str) return true
return true }
} }
} return false
return false })
}) mm.Output("tp " + i.User.Name + " ~ ~ ~")
mm.Output("tp " + i.User.Name + " ~ ~ ~") return true
return true
}
return false
})
// Add !home listener
AddListener(func(i *Message) bool {
//mm.listeners = append(mm.listeners, func(i *Message) bool {
if i.User.Name != "" && i.Text == "!home\n" {
home_str, found := GetHome(i.User.Name)
if found {
mm.Output("tp " + i.User.Name + " " + home_str)
} else {
mm.Output("tell " + i.User.Name + " I don't know where your home is. Set it to your current position by typing '!set home'")
} }
} return false
return false })
}) // Add !home listener
AddListener(func(i *Message) bool {
if i.User.Name != "" && i.Text == "!home\n" {
home_str, found := GetHome(i.User.Name)
if found {
mm.Output("tp " + i.User.Name + " " + home_str)
} else {
mm.Output("tellraw " + i.User.Name + " I don't know where your home is. Set it to your current position by typing '!set home'")
}
}
return false
})
}
} else if opt_name == "visit" { } else if opt_name == "visit" {
c.FeatureTPVisit = opt_enabled c.FeatureTPVisit = opt_enabled
if opt_enabled {
fmt.Println("Activating 'visit' listeners")
// Add !set porch listener
AddListener(func(i *Message) bool {
if i.User.Name != "" && i.Text == "!set porch\n" {
AddTempListener(func(inp *Message) bool {
listen_for := "Teleported " + i.User.Name + " to "
if inp.User.Name == "" && strings.Contains(inp.Text, listen_for) {
// Found the text
r := strings.Split(inp.Text, listen_for)
if len(r) > 0 {
p_str := r[1]
p_str = strings.Replace(p_str, ",", "", -1)
SetPorch(i.User.Name, p_str)
mm.Output("tellraw " + i.User.Name + " Set your porch to " + p_str)
return true
}
}
return false
})
mm.Output("tp " + i.User.Name + " ~ ~ ~")
return true
}
return false
})
// Add !visit listener
AddListener(func(i *Message) bool {
if i.User.Name != "" && strings.HasPrefix(i.Text, "!visit ") {
// Find the user we're trying to visit
r := strings.Split(strings.Replace(i.Text, "\n", "", -1), "!visit ")
if len(r) > 0 {
username := r[1]
porch_str, found := GetPorch(username)
if found {
mm.Output("tp " + i.User.Name + " " + porch_str)
} else {
mm.Output("tellraw " + i.User.Name + " I don't know where " + username + "s porch is. They can set it to their current position by typing '!set porch'")
}
}
}
return false
})
}
} else if opt_name == "daynight" {
c.FeatureDayNight = opt_enabled
if opt_enabled {
fmt.Println("Activating 'daynight' listeners")
// Add !switch day listener
AddListener(func(i *Message) bool {
if i.User.Name != "" && i.Text == "!switch day\n" {
// TODO: Start vote
mm.Output("time set day")
return true
}
return false
})
// Add !switch night listener
AddListener(func(i *Message) bool {
if i.User.Name != "" && i.Text == "!switch night\n" {
// TODO: Start vote
mm.Output("time set night")
return true
}
return false
})
}
} }
// Add !help listener
AddListener(func(i *Message) bool {
if i.User.Name != "" && i.Text == "!help\n" {
hlp_txt := " {text:\"-=( mc_man Manager Help )=-\",color:blue}"
mm.Output("tellraw " + i.User.Name + hlp_txt)
hlp_txt = " {text:\"!set home -- Set your 'home' to your current position.\"}"
mm.Output("tellraw " + i.User.Name + hlp_txt)
hlp_txt = " {text:\"!home -- Request a teleport to your 'home' position.\"}"
mm.Output("tellraw " + i.User.Name + hlp_txt)
hlp_txt = " {text:\"!set porch -- Set your 'porch' to your current position.\"}"
mm.Output("tellraw " + i.User.Name + hlp_txt)
hlp_txt = " {text:\"!visit <username> -- Request a teleport to <username>'s 'porch' position.\"}"
mm.Output("tellraw " + i.User.Name + hlp_txt)
hlp_txt = " {text:\"!switch day -- Ask the server to switch the time to 'day'.\"}"
mm.Output("tellraw " + i.User.Name + hlp_txt)
hlp_txt = " {text:\"!switch night -- Ask the server to switch the time to 'night'.\"}"
mm.Output("tellraw " + i.User.Name + hlp_txt)
hlp_txt = " {text:\"-=========================-\",color:blue}"
mm.Output("tellraw " + i.User.Name + hlp_txt)
return true
}
return false
})
} }
c.Users = make([]*User, 0, 10) c.Users = make([]*User, 0, 10)
@ -100,13 +189,18 @@ func LoadConfig(mm *MessageManager) {
us.Home = user_home us.Home = user_home
us.Porch = user_porch us.Porch = user_porch
c.Users = append(c.Users, us) c.Users = append(c.Users, us)
c.U = *us
} }
} }
fmt.Printf("Loaded %d Users\n", len(c.Users)) fmt.Printf("Loaded %d Users\n", len(c.Users))
} }
} }
func AddUser(username string) {
us := NewUser(username)
c.Users = append(c.Users, us)
WriteConfig()
}
func WriteConfig() { func WriteConfig() {
// Generate the JSON string for the config file // Generate the JSON string for the config file
d := "{\"options\":[" d := "{\"options\":["
@ -123,9 +217,17 @@ func WriteConfig() {
} else { } else {
d = d + "false" d = d + "false"
} }
d = d + "},{\"name\":\"daynight\",\"enabled\":"
if c.FeatureDayNight {
d = d + "true"
} else {
d = d + "false"
}
d = d + "}],\"users\":[" d = d + "}],\"users\":["
d = d + c.U.ToJSONString()
// Output users array // Output users array
for _, u := range c.Users {
d = d + u.ToJSONString()
}
/* /*
num_users := len(c.Users) num_users := len(c.Users)
fmt.Printf("Number of Users: %d", num_users) fmt.Printf("Number of Users: %d", num_users)
@ -144,59 +246,48 @@ func WriteConfig() {
*/ */
d = d + "]}" d = d + "]}"
do := []byte(d) do := []byte(d)
ioutil.WriteFile("mc_man.config", do, 0644) ioutil.WriteFile("mc_man.config", do, 0664)
} }
func SetHome(user string, loc string) { func SetHome(user string, loc string) {
/* u, idx := FindUser(user)
u, idx := FindUser(user) if idx == -1 {
if idx == -1 { u = NewUser(user)
u = NewUser(user) c.Users = append(c.Users, u)
c.Users = append(c.Users, u) idx = len(c.Users) - 1
idx = len(c.Users) - 1 }
} u.Home = strings.Replace(loc, "\n", "", -1)
u.Home = strings.Replace(loc, "\n", "", -1) // Replace the user in the Users array
// Replace the user in the Users array c.Users[idx] = u
c.Users[idx] = u
*/
c.U.Home = strings.Replace(loc, "\n", "", -1)
WriteConfig() WriteConfig()
} }
func GetHome(user string) (string, bool) { func GetHome(user string) (string, bool) {
/* u, idx := FindUser(user)
u, idx := FindUser(user) if idx == -1 || u.Home == "" {
if idx == -1 || u.Home == "" { return "", false
return "", false }
} return u.Home, true
*/
return c.U.Home, true
} }
func SetPorch(user string, loc string) { func SetPorch(user string, loc string) {
/* u, idx := FindUser(user)
u, idx := FindUser(user) if idx == -1 {
if idx == -1 { u = NewUser(user)
u = NewUser(user) c.Users = append(c.Users, u)
c.Users = append(c.Users, u) idx = len(c.Users) - 1
idx = len(c.Users) - 1 }
} u.Porch = strings.Replace(loc, "\n", "", -1)
u.Porch = strings.Replace(loc, "\n", "", -1) c.Users[idx] = u
c.Users[idx] = u
*/
c.U.Porch = strings.Replace(loc, "\n", "", -1)
WriteConfig() WriteConfig()
} }
func GetPorch(user string) (string, bool) { func GetPorch(user string) (string, bool) {
/* u, idx := FindUser(user)
u, idx := FindUser(user) if idx == -1 || u.Porch == "" {
if idx > -1 || u.Porch == "" { return "", false
return "", false }
} return u.Porch, true
return u.Porch, true
*/
return c.U.Porch, true
} }
func FindUser(name string) (*User, int) { func FindUser(name string) (*User, int) {

View File

@ -44,22 +44,27 @@ func (mm MessageManager) Output(o string) {
func (mm MessageManager) ProcessMessage(inp string) bool { func (mm MessageManager) ProcessMessage(inp string) bool {
// First of all, create the message from inp // First of all, create the message from inp
m := NewMessage(inp) m := NewMessage(inp)
fmt.Printf("[%d]l, [%d]tmpl: Processing Message: >>> %s\n", len(Listeners), len(TempListeners), strings.Replace(inp, "\n", "", -1)) // Check if we know the user that sent the message
if m.User.Name != "" {
_, idx := FindUser(m.User.Name)
if idx == -1 {
// Nope, create a new user
fmt.Printf("Adding New User: %s\n", m.User.Name)
AddUser(m.User.Name)
}
}
// Now run the message through all of mm's tempListeners // Now run the message through all of mm's tempListeners
for i := range TempListeners { for i := range TempListeners {
fmt.Printf("Processing message in tempListener %d\n", i)
// Pop the listener off of the stack // Pop the listener off of the stack
consumed := TempListeners[i](m) consumed := TempListeners[i](m)
if consumed { if consumed {
// When a temp listener is consumed, we delete it // When a temp listener is consumed, we delete it
fmt.Println("Consumed Event from Temporary Listener.")
RemoveTempListener(i) RemoveTempListener(i)
return true return true
} }
} }
// and run the message through all of mm's listeners // and run the message through all of mm's listeners
for i := range Listeners { for i := range Listeners {
fmt.Printf("Processing message in listener %d\n", i)
consumed := Listeners[i](m) consumed := Listeners[i](m)
if consumed { if consumed {
return true return true
@ -81,7 +86,7 @@ func RemoveListener(i int) {
if i > -1 && i < len(Listeners) { if i > -1 && i < len(Listeners) {
t := append(Listeners[:i], Listeners[i+1:]...) t := append(Listeners[:i], Listeners[i+1:]...)
Listeners = make(([]func(*Message) bool), len(t)) Listeners = make(([]func(*Message) bool), len(t))
copy(LIsteners, t) copy(Listeners, t)
} }
} }
func RemoveTempListener(i int) { func RemoveTempListener(i int) {