IRC bot for interacting with mazerats.jerryaldrichiii.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.1 KiB

package generate
import (
"fmt"
"github.com/go-chat-bot/bot"
"github.com/spf13/viper"
"math/rand"
"ratbot/plugins/web"
"time"
)
func generateLink(command *bot.Cmd) (string, error) {
apiURL := viper.GetString("MAZE_RATS_API_URL") // From global viper state
if apiURL == "" {
return "", fmt.Errorf("Could not determine Maze Rats API URL from config")
}
r := rand.New(rand.NewSource(time.Now().UnixNano()))
seed := r.Int63()
var response string
response = fmt.Sprintf(
"%v/api/%v/%v",
apiURL, command.Command, seed,
)
return response, nil
}
func generateSimple(command *bot.Cmd) (string, error) {
apiURL := viper.GetString("MAZE_RATS_API_URL") // From global viper state
if apiURL == "" {
return "", fmt.Errorf("Could not determine Maze Rats API URL from config")
}
var response string
url := fmt.Sprintf(
"%v/api/generate/%v",
apiURL, command.Command,
)
body, err := web.GetBody(url, "text")
if err != nil {
response = fmt.Sprintf("ERROR: %v returned '%v'", url, err)
} else {
response = fmt.Sprintf(
"%v generates a %v: %v",
command.User.Nick, command.Command, string(body),
)
}
return response, nil
}
func init() {
commands := []struct {
command string
description string
exampleArgs []string
handler func(*bot.Cmd) (string, error)
}{
{"character", "Generate a Maze Rats character", []string{}, generateLink},
{"city", "Generate a Maze Rats city", []string{}, generateLink},
{"monster", "Generate a Maze Rats monster", []string{}, generateLink},
{"dungeon", "Generate a Maze Rats dungeon", []string{}, generateLink},
{"spell", "Generate a Maze Rats spell", []string{}, generateSimple},
{"name", "Generate a name", []string{}, generateSimple},
{"potion", "Generate a potion", []string{}, generateSimple},
{"mutation", "Generate a mutation", []string{}, generateSimple},
{"insanity", "Generate an insanity", []string{}, generateSimple},
{"catastrophe", "Generate an catastrophe", []string{}, generateSimple},
}
for _, c := range commands {
bot.RegisterCommand(c.command, c.description, "", c.handler)
}
}