-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathcad.go
More file actions
115 lines (92 loc) · 2.48 KB
/
Copy pathcad.go
File metadata and controls
115 lines (92 loc) · 2.48 KB
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package cardsagainstdiscord
import (
"fmt"
"github.com/jonas747/discordgo"
"github.com/pkg/errors"
"strings"
)
var Packs = make(map[string]*CardPack)
func AddPack(pack *CardPack) {
// Count picks
for _, v := range pack.Prompts {
numPicks := strings.Count(v.Prompt, "%s")
if numPicks == 0 {
v.Prompt += " %s"
v.NumPick = 1
} else {
v.NumPick = numPicks
}
}
Packs[pack.Name] = pack
}
type CardPack struct {
Name string
Description string
Prompts []*PromptCard
Responses []ResponseCard
}
type PromptCard struct {
Prompt string
NumPick int
}
var (
EscaperReplacer = strings.NewReplacer("*", "\\*", "_", "\\_")
)
func (p *PromptCard) PlaceHolder() string {
s := strings.Replace(p.Prompt, "%s", "_____", -1)
s = strings.Replace(s, "%%", `%`, -1)
s = EscaperReplacer.Replace(s)
return s
}
func (p *PromptCard) WithCards(cards interface{}) string {
args := make([]interface{}, p.NumPick)
switch t := cards.(type) {
case []string:
for i, v := range t {
args[i] = "**" + v + "**"
}
case []ResponseCard:
for i, v := range t {
args[i] = "**" + v + "**"
}
}
s := fmt.Sprintf(p.Prompt, args...)
// s = EscaperReplacer.Replace(s)
return s
}
type ResponseCard string
type SessionProvider interface {
SessionForGuild(guildID int64) *discordgo.Session
}
type StaticSessionProvider struct {
Session *discordgo.Session
}
func (sp *StaticSessionProvider) SessionForGuild(guildID int64) *discordgo.Session {
return sp.Session
}
var (
ErrGameAlreadyInChannel = errors.New("Already a active game in this channel")
ErrPlayerAlreadyInGame = errors.New("Player already in a game")
ErrGameNotFound = errors.New("Game not found")
ErrGameFull = errors.New("Game is full")
ErrNoPacks = errors.New("No packs specified")
ErrNotGM = errors.New("You're not the game master")
ErrStoppedAlready = errors.New("Game already stopped")
ErrPlayerNotInGame = errors.New("Player not in your game")
)
type ErrUnknownPack struct {
PassedPack string
}
func (e *ErrUnknownPack) Error() string {
return "Unknown pack `" + e.PassedPack + "`"
}
func HumanizeError(err error) string {
err = errors.Cause(err)
if err == ErrGameAlreadyInChannel || err == ErrPlayerAlreadyInGame || err == ErrGameNotFound || err == ErrGameFull || err == ErrNoPacks || err == ErrNotGM || err == ErrStoppedAlready || err == ErrPlayerNotInGame {
return err.Error()
}
if c, ok := err.(*ErrUnknownPack); ok {
return c.Error()
}
return ""
}