2019-08-22 12:40:48 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
2019-08-26 10:28:48 +00:00
|
|
|
"strings"
|
2019-08-22 12:40:48 +00:00
|
|
|
"text/template"
|
|
|
|
|
|
|
|
"git.fromouter.space/mcg/draft"
|
2019-08-26 10:28:48 +00:00
|
|
|
"git.fromouter.space/mcg/draftbot"
|
2019-08-22 12:40:48 +00:00
|
|
|
"github.com/Masterminds/sprig"
|
|
|
|
)
|
|
|
|
|
2019-08-26 10:28:48 +00:00
|
|
|
var sessionCreatedTplText = `<b>Draft session open!</b>
|
2019-08-22 12:40:48 +00:00
|
|
|
Join with "/join".
|
2019-08-26 10:28:48 +00:00
|
|
|
Start with "/startdraft".
|
2019-08-22 12:40:48 +00:00
|
|
|
|
2019-08-26 10:28:48 +00:00
|
|
|
<b>Draft type</b>: {{ .Options.Options.Type }}
|
|
|
|
<b>Players</b>: {{ .Players | join " "}} ({{ .PlayerCount }}/{{ .Options.Players }})`
|
|
|
|
|
|
|
|
var sessionOrderTplText = `<b>Here's how everyone is positioned:</b>
|
|
|
|
{{ .Players | join "\n" }}`
|
|
|
|
|
|
|
|
var newPickTplText = `Pack <b>{{ .CurrentPack }}</b> - Pick <b>{{ .PickNum }}</b>
|
|
|
|
|
|
|
|
Waiting: {{ .PickWaiting | join " " }}
|
|
|
|
Done: {{ .PickDone | join " " }}`
|
|
|
|
|
|
|
|
var yourPicksTplText = `Draft finished!
|
|
|
|
Here are your picks: {{ .PonyheadURL }}`
|
2019-08-22 12:40:48 +00:00
|
|
|
|
|
|
|
var templateMap = map[string]string{
|
|
|
|
"session-created": sessionCreatedTplText,
|
2019-08-26 10:28:48 +00:00
|
|
|
"session-order": sessionOrderTplText,
|
|
|
|
"new-pick": newPickTplText,
|
|
|
|
"your-picks": yourPicksTplText,
|
2019-08-22 12:40:48 +00:00
|
|
|
}
|
|
|
|
var templates = map[string]*template.Template{}
|
|
|
|
|
|
|
|
func initTemplates() {
|
|
|
|
for k, v := range templateMap {
|
|
|
|
templates[k] = template.Must(template.New("base").Funcs(sprig.TxtFuncMap()).Parse(v))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var sessionCreatedTpl = (sessionCreatedTplText)
|
|
|
|
|
2019-08-26 10:28:48 +00:00
|
|
|
func txtDraftSessionCreated(opt draftbot.SessionOptions, players map[string]*draft.Player) string {
|
2019-08-22 12:40:48 +00:00
|
|
|
var tpl bytes.Buffer
|
2019-08-26 10:28:48 +00:00
|
|
|
names := playerNames(players)
|
2019-08-22 12:40:48 +00:00
|
|
|
templates["session-created"].Execute(&tpl, struct {
|
2019-08-26 10:28:48 +00:00
|
|
|
Players []string
|
|
|
|
PlayerCount int
|
|
|
|
Options draftbot.SessionOptions
|
2019-08-22 12:40:48 +00:00
|
|
|
}{
|
2019-08-26 10:28:48 +00:00
|
|
|
names,
|
|
|
|
len(names),
|
2019-08-22 12:40:48 +00:00
|
|
|
opt,
|
|
|
|
})
|
|
|
|
return tpl.String()
|
|
|
|
}
|
|
|
|
|
2019-08-26 10:28:48 +00:00
|
|
|
func txtDraftSessionOrder(players []string) string {
|
|
|
|
var tpl bytes.Buffer
|
|
|
|
for i := range players {
|
|
|
|
if players[i] == "bot" {
|
|
|
|
players[i] = "🤖 Bot"
|
|
|
|
} else {
|
|
|
|
playerName := players[i][strings.IndexRune(players[i], ':')+1:]
|
|
|
|
players[i] = "👤 @" + playerName
|
|
|
|
}
|
|
|
|
}
|
|
|
|
templates["session-order"].Execute(&tpl, struct {
|
|
|
|
Players []string
|
|
|
|
}{
|
|
|
|
players,
|
|
|
|
})
|
|
|
|
return tpl.String()
|
|
|
|
}
|
|
|
|
|
|
|
|
func txtCurrentPick(sess *draftSession) string {
|
|
|
|
var tpl bytes.Buffer
|
|
|
|
templates["new-pick"].Execute(&tpl, sess)
|
|
|
|
return tpl.String()
|
|
|
|
}
|
|
|
|
|
|
|
|
func txtYourPicks(picks []string) string {
|
|
|
|
var tpl bytes.Buffer
|
|
|
|
templates["your-picks"].Execute(&tpl, struct {
|
|
|
|
PonyheadURL string
|
|
|
|
}{
|
|
|
|
ponyheadURL(picks),
|
|
|
|
})
|
|
|
|
return tpl.String()
|
|
|
|
}
|
|
|
|
|
2019-08-22 12:40:48 +00:00
|
|
|
func playerNames(lst map[string]*draft.Player) (out []string) {
|
|
|
|
for key := range lst {
|
|
|
|
out = append(out, "@"+key)
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
2019-08-26 10:28:48 +00:00
|
|
|
|
|
|
|
func ponyheadURL(picks []string) string {
|
|
|
|
base := "https://ponyhead.com/deckbuilder?v1code="
|
|
|
|
for _, pick := range picks {
|
|
|
|
base += pick + "x1-"
|
|
|
|
}
|
|
|
|
return strings.TrimRight(base, "-")
|
|
|
|
}
|