Improve Jeopardy cashout message

Print only a single message instead of one per winner to reduce chat
clutter.
Skip cashout to users who won less than the possible cashout value as
limited by the division value to avoid congratulating someone who only
gets 0.
Abort should a regression cause the logic to process an empty set of
finishers to prevent unexpected behavior.

Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
This commit is contained in:
Georg Pfuetzenreuter 2024-10-03 15:25:12 +02:00
parent b6187e0077
commit 7ec49a9769
Signed by: Georg
GPG Key ID: 1ED2F138E7E6FF57

View File

@ -65,6 +65,23 @@ func (w *WatIntegration) Jeopardy(m *irc.Message, msgargs []string) {
// 8. The result is an array like "[nick1:1000, nick2:2000]" // 8. The result is an array like "[nick1:1000, nick2:2000]"
finisherPrizes := strings.Split(strings.Replace(strings.Replace(strings.Replace(strings.Replace(strings.Join(msgargs[2:], " "), ") (", ";", -1), ": ", ":", -1), "(", "", 1), ")", "", 1), ";") finisherPrizes := strings.Split(strings.Replace(strings.Replace(strings.Replace(strings.Replace(strings.Join(msgargs[2:], " "), ") (", ";", -1), ": ", ":", -1), "(", "", 1), ")", "", 1), ";")
fmt.Printf("Processing Jeopardy: %s\n", finisherPrizes) fmt.Printf("Processing Jeopardy: %s\n", finisherPrizes)
var msg string
var many bool
fiprcount := len(finisherPrizes)
cashoutcount := 0
// only a single winner
if fiprcount == 1 {
msg = "smartass %s :) gave u %d"
many = false
// multiple winners
} else if fiprcount > 1 {
msg = "gang of smartasses :) gave %s %d"
many = true
// no winners (should never get here)
} else {
fmt.Printf("Empty finishers, aborting Jeopardy processing")
return
}
// iterate over the "$nick:$value" string elements // iterate over the "$nick:$value" string elements
for _, pair := range finisherPrizes { for _, pair := range finisherPrizes {
// turn the string element into an array, where the first entry is the nickname, and the second the value // turn the string element into an array, where the first entry is the nickname, and the second the value
@ -77,6 +94,10 @@ func (w *WatIntegration) Jeopardy(m *irc.Message, msgargs []string) {
name := nameCoinPair[0] name := nameCoinPair[0]
// Jeopardy prizes are quite a lot of $$$, make it a bit more sane // Jeopardy prizes are quite a lot of $$$, make it a bit more sane
coins = coins / 40 coins = coins / 40
if coins == 0 {
continue
}
cashoutcount += 1
// name = we assume the Jeopardy player name to match a Watbot player name // name = we assume the Jeopardy player name to match a Watbot player name
// host = we could use some WHO logic to find the host, but assuming nickname lookup to be sufficient here // host = we could use some WHO logic to find the host, but assuming nickname lookup to be sufficient here
// create = based on the above, maybe rather not create Watbot players based on only a nick? // create = based on the above, maybe rather not create Watbot players based on only a nick?
@ -85,10 +106,21 @@ func (w *WatIntegration) Jeopardy(m *irc.Message, msgargs []string) {
if player.Nick == "" { if player.Nick == "" {
fmt.Printf("Player %s does not exist in Watbot, skipping cashout.\n", name) fmt.Printf("Player %s does not exist in Watbot, skipping cashout.\n", name)
continue continue
} else {
w.bot.reply(m, fmt.Sprintf("smartass %s, gave u %d :)", player.Nick, coins))
player.Coins += coins
w.db.Update(player)
} }
// fill previous format placeholders
msg = fmt.Sprintf(msg, player.Nick, coins)
if many {
// append additional ones for filling in the next loop iteration
msg = msg + ", %s %d"
}
player.Coins += coins
w.db.Update(player)
}
if many {
// remove format placeholders from last loop iteration
msg = strings.Replace(msg, ", %s %d", ".", 1)
}
if cashoutcount > 0 {
w.bot.reply(m, msg)
} }
} }