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) } }