mlpdraftbot/tginterface.text.go

110 lines
2.5 KiB
Go
Raw Permalink Normal View History

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, "-")
}