New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

github.com/gucastiliao/botstate

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/gucastiliao/botstate

  • v1.0.0
  • Source
  • Go
  • Socket score

Version published
Created
Source

Botstate

The easy way to manage bot states.

Build Status GoDoc

Simple Bot Flow with Botstate

Botstate

Examples

Installation

botstate requires a Go version with Modules support and uses import versioning. So please make sure to initialize a Go module before installing botstate:

go mod init
go get github.com/gucastiliao/botstate

Import:

import "github.com/gucastiliao/botstate"

Manage state

To manage states, botstate have a default client that uses go-redis, but you can make your own client to save state the way you prefer.

You need to initialize storage with your client. This example is using go-redis with botstate.DefaultStorage:

r := redis.NewClient(&redis.Options{
    Addr: mr.Addr(),
})

botstate.SetStorageClient(botstate.DefaultStorage(r))

If you have your own client:

var myClient botstate.Storager

...

botstate.SetStorageClient(myClient)

Simple Example

package main

import (
	"fmt"

	"github.com/go-redis/redis/v7"
	"github.com/gucastiliao/botstate"
)

func main() {
	redis := redis.NewClient(&redis.Options{
		Addr:     fmt.Sprintf("%s:%s", "127.0.0.1", "6379"),
		Password: "",
	})

	botstate.SetStorageClient(
		botstate.DefaultStorage(redis),
	)

	states := []botstate.State{
		{
			Name:     "start",
			Executes: Start,
			Next:     "add_product",
		},
		{
			Name:     "add_product",
			Executes: AddProduct,
			Callback: CallbackAddProduct,
			Next:     "confirmation",
		},
		{
			Name:     "confirmation",
			Executes: Confirmation,
		},
	}

	bot := botstate.New(states)
	bot.Data.User(111)

	bot.ExecuteState("start")
	msg := bot.GetMessages()
	fmt.Println(msg)
	// This print [Hello! Starting...]

	current, _ := bot.Data.GetCurrentState()
	// Current state now is -> add_product
	// Because value of State.Next

	bot.ExecuteState(current)
	msg = bot.GetMessages()
	fmt.Println(msg)
	// This print [Add Product...]

	current, _ = bot.Data.GetCurrentState()
	// Current state now is -> confirmation

	bot.ExecuteState(current)
	msg = bot.GetMessages()
	fmt.Println(msg)
	// This print I'm in callback now and [Confirmation ...]
	// The callback is defined in the previous state
	// And in this execution is called
	// If the callback return true, the execution continue and call Confirmation method
}

// botstate.Bot have access to current user's data
// and can manipulate it
func Start(bot *botstate.Bot) bool {
	bot.SendMessage([]string{
		"Hello!",
		"Starting...",
	})

	return true
}

func AddProduct(bot *botstate.Bot) bool {
	bot.SendMessage([]string{
		"Add Product...",
	})

	return true
}

func CallbackAddProduct(bot *botstate.Bot) bool {
	fmt.Println("I'm in callback now!")

	return true
}

func Confirmation(bot *botstate.Bot) bool {
	bot.SendMessage([]string{
		"Confirmation...",
	})

	bot.Data.ResetCurrentState()
	return true
}

See more

FAQs

Package last updated on 14 Jun 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc