func (k *Keywords) handle(m *Msg) string {
	if k == nil {
		return ""
	}
	for _, intent := range m.StructuredInput.Intents {
		fn, ok := k.Dict["I_"+intent]
		if !ok {
			continue
		}
		return fn(m)
	}
	eng := porter2.Stemmer
	for _, cmd := range m.StructuredInput.Commands {
		cmd = strings.ToLower(eng.Stem(cmd))
		for _, obj := range m.StructuredInput.Objects {
			obj = strings.ToLower(eng.Stem(obj))
			fn, ok := k.Dict["CO_"+cmd+"_"+obj]
			if !ok {
				continue
			}
			return fn(m)
		}
	}
	return ""
}
handle runs the first matching KeywordFn in the sentence.
package dt
import (
	"strings"
	"github.com/dchest/stemmer/porter2"
)
type Keywords struct {
	Dict map[string]KeywordFn
}
type KeywordHandler struct {
	Fn      KeywordFn
	Trigger *StructuredInput
}
type KeywordFn func(in *Msg) (response string)