Skip to content

vitaliy-ukiru/fsm-telebot

Repository files navigation

fsm-telebot

GitHub go.mod Go version Go Reference Go golangci-lint

Finite State Machine for telebot. Based on aiogram FSM version.

It not a full implementation FSM. It just states manager for telegram bots.

Install:

Last release version (manually):

go get -u github.com/vitaliy-ukiru/fsm-telebot@v1.3.3

Last commit from master (unstable)

go get -u github.com/vitaliy-ukiru/fsm-telebot@master

Examples

simple configuration
package main

import (
	"os"
	"time"

	"github.com/vitaliy-ukiru/fsm-telebot"
	"github.com/vitaliy-ukiru/fsm-telebot/storages/memory"
	tele "gopkg.in/telebot.v3"
)

func main() {
	bot, err := tele.NewBot(tele.Settings{
		Token:  os.Getenv("BOT_TOKEN"),
		Poller: &tele.LongPoller{Timeout: 3 * time.Second},
	})
	if err != nil {
		panic(err)
	}

	// for example using memory storage
	// but prefer will use redis or file storage.
	storage := memory.NewStorage()
	manager := fsm.NewManager(
		bot,     // tele.Bot
		nil,     // handlers will setups to this group. Default: creates new
		storage, // storage for states and data
		nil,     // context maker. Default: NewFSMContext
	)
	manager.Bind("/state", fsm.AnyState, func(c tele.Context, state fsm.Context) error {
		userState, err := state.State()
		if err != nil {
			return c.Send("error: " + err.Error())
		}

		return c.Send(userState.GoString())
	})

}

Many complex examples in directory examples.