Skip to content
This repository has been archived by the owner on Feb 25, 2023. It is now read-only.

tdakkota-legacy/joe-gokv-memory

Repository files navigation

Joe Bot - gokv Adapter

Build Status codecov Go Report Card CodeFactor License

Integration Joe with gokv.

Getting Started

To install:

go get github.com/tdakkota/joe-gokv-memory

Note

gokv currently does not support GetAll/Keys operations(see this issue)

Package provides Keys interface to store list of keys(by default map used).

Example usage

package main

import (
	"github.com/go-joe/joe"
	"github.com/philippgille/gokv/redis"
	"github.com/tdakkota/joe-gokv-memory"
	"go.uber.org/zap"
)

type Bot struct {
	*joe.Bot
}

func main() {
	store, err := redis.NewClient(redis.DefaultOptions)
	if err != nil {
		zap.L().Fatal(err.Error())
	}

	b := Bot{joe.New(
		"example-bot",
		gokv.Memory(store),
	)}
	b.Respond("remember (.+) is (.+)", b.Remember)
	b.Respond("what is (.+)", b.WhatIs)

	err = b.Run()
	if err != nil {
		zap.L().Fatal(err.Error())
	}
}

func (b *Bot) Remember(msg joe.Message) error {
	key, value := msg.Matches[0], msg.Matches[1]
	msg.Respond("OK, I'll remember %s is %s", key, value)
	return b.Store.Set(key, value)
}

func (b *Bot) WhatIs(msg joe.Message) error {
	key := msg.Matches[0]
	var value string
	ok, err := b.Store.Get(key, &value)
	if err != nil {
		return err
	}
	if ok {
		msg.Respond("%s is %s", key, value)
	} else {
		msg.Respond("I do not remember %q", key)
	}
	return nil
}

License

BSD-3-Clause