Write a module

With olivia, you can easily add a module: Just write in a new file inside the modules package

A module is composed of a Replacer() function which contains the core of the module and the module registration which is located in the target locale module file res/locales/<locale>/modules.go

package modules

var NameGetterTag = "name getter"

func NameGetterReplacer(_, response, token string) (string, string) {
	name := user.GetUserInformation(token).Name

	if strings.TrimSpace(name) == "" {
		responseTag := "don't know name"
		return responseTag, util.GetMessage(responseTag)

	return NameGetterTag, fmt.Sprintf(response, name)

To register the module, you must do it in the res/locales/<locale>/modules.go file by creating a new line:

		Tag: NameGetterTag,
		Patterns: []string{
			"Do you know my name?",
		Responses: []string{
			"Your name is %s!",
		Replacer: NameGetterReplacer,

You can re-train the specific locale's model by adding the -re-train=<locale> flag to the run command.

You can look at the existent modules here


User information

To save information about the user, there is the package user to get and save information in the user's client.

You need to add a field for the information you want to add here Then, you can get and save the information inside the module, like this:

name := user.GetUserInformation(token).Name
user.ChangeUserInformation(token, func(information user.Information) user.Information {
	information.Name = name
	return information