func ExampleRiveScript_javascript() { // Example for configuring the JavaScript object macro handler via Otto. bot := rivescript.New(config.Basic()) // Create the JS handler. bot.SetHandler("javascript", javascript.New(bot)) // Now we can use object macros written in JS! bot.Stream(` > object add javascript var a = args[0]; var b = args[1]; return parseInt(a) + parseInt(b); < object > object setname javascript // Set the user's name via JavaScript var uid = rs.CurrentUser(); rs.SetUservar(uid, args[0], args[1]) < object + add # and # - <star1> + <star2> = <call>add <star1> <star2></call> + my name is * - I will remember that.<call>setname <id> <formal></call> + what is my name - You are <get name>. `) bot.SortReplies() reply := bot.Reply("local-user", "Add 5 and 7") fmt.Printf("Bot: %s\n", reply) }
func main() { // Collect command line arguments. version := flag.Bool("version", false, "Show the version number and exit.") debug := flag.Bool("debug", false, "Enable debug mode.") utf8 := flag.Bool("utf8", false, "Enable UTF-8 mode.") depth := flag.Uint("depth", 50, "Recursion depth limit (default 50)") nostrict := flag.Bool("nostrict", false, "Disable strict syntax checking") flag.Parse() args := flag.Args() if *version == true { fmt.Printf("RiveScript-Go version %s\n", rivescript.VERSION) os.Exit(0) } if len(args) == 0 { fmt.Fprintln(os.Stderr, "Usage: rivescript [options] </path/to/documents>") os.Exit(1) } root := args[0] // Initialize the bot. bot := rivescript.New(&config.Config{ Debug: *debug, Strict: !*nostrict, Depth: *depth, UTF8: *utf8, }) // JavaScript object macro handler. bot.SetHandler("javascript", javascript.New(bot)) // Load the target directory. err := bot.LoadDirectory(root) if err != nil { fmt.Printf("Error loading directory: %s", err) os.Exit(1) } bot.SortReplies() fmt.Printf(` . . .:...:: RiveScript Interpreter (Go) .:: ::. Library Version: v%s ..:;;. ' .;;:.. . ''' . Type '/quit' to quit. :;,:,;: Type '/help' for more options. : : Using the RiveScript bot found in: %s Type a message to the bot and press Return to send it. `, bot.Version(), root) // Drop into the interactive command shell. reader := bufio.NewReader(os.Stdin) for { fmt.Print("You> ") text, _ := reader.ReadString('\n') text = strings.TrimSpace(text) if len(text) == 0 { continue } if strings.Index(text, "/help") == 0 { help() } else if strings.Index(text, "/quit") == 0 { os.Exit(0) } else { reply := bot.Reply("localuser", text) fmt.Printf("Bot> %s\n", reply) } } }