all repos — paprika @ master

go rewrite of taigabot

plugins/profile.go (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
// User profile plugins: desktop, homescreen, selfie, battlestation, etc.
package plugins

import (
	"fmt"
	"strings"

	"git.icyphox.sh/paprika/database"
	"gopkg.in/irc.v3"
)

func init() {
	Register(Profile{})
}

type Profile struct{}

func (Profile) Triggers() []string {
	return []string{
		".selfie",
		".desktop", ".dt",
		".hs", ".homescreen", ".home",
		".bs", ".battlestation", ".keyb",
	}
}

func (Profile) Execute(m *irc.Message) (string, error) {
	parts := strings.SplitN(m.Trailing(), " ", 2)
	trigger := parts[0]

	var key string

	switch trigger {
	case ".desktop", ".dt":
		key = "desktop"
	case ".hs", ".homescreen", ".home":
		key = "homescreen"
	case ".bs", ".battlestation", ".keyb":
		key = "battlestation"
	default:
		// Strip the '.'
		key = trigger[1:]
	}

	if len(parts) == 1 {
		val, err := database.DB.Get([]byte(fmt.Sprintf(
			"%s/%s",
			key,
			strings.ToLower(m.Prefix.Name),
		)))
		if err != nil {
			return fmt.Sprintf(
				"Error fetching %s. Use '%s <link>' to set it.", key, trigger,
			), err
		}
		return fmt.Sprintf("\x02%s\x02: %s", m.Prefix.Name, string(val)), nil
	} else if len(parts) == 2 {
		// Querying @nick's thing.
		if strings.HasPrefix(parts[1], "@") {
			val, err := database.DB.Get([]byte(fmt.Sprintf(
				"%s/%s",
				key,
				parts[1][1:],
			)))
			if err != nil {
				return fmt.Sprintf("Error fetching %s", key), err
			}
			return fmt.Sprintf("\x02%s\x02: %s", parts[1][1:], string(val)), nil
		}
		// User wants to set the thing.
		value := parts[1]

		err := database.DB.Set(
			[]byte(fmt.Sprintf("%s/%s", key, strings.ToLower(m.Prefix.Name))),
			[]byte(value),
		)
		if err != nil {
			return fmt.Sprintf("Error saving %s", key), err
		}
		return fmt.Sprintf("Saved your %s successfully", key), nil
	}
	return "", nil
}