74 lines
2.5 KiB
Go
74 lines
2.5 KiB
Go
package bot
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/bwmarrin/discordgo"
|
|
)
|
|
|
|
func (b *Bot) handleKudos(ctx context.Context, s *discordgo.Session, i *discordgo.InteractionCreate) {
|
|
target := i.ApplicationCommandData().Options[0].UserValue(s)
|
|
if target.ID == i.Member.User.ID {
|
|
respondEphemeral(s, i, "You can't kudos yourself! 😄")
|
|
return
|
|
}
|
|
|
|
fromName := displayName(i.Member, i.Member.User)
|
|
targetMember, _ := s.GuildMember(i.GuildID, target.ID)
|
|
toName := displayName(targetMember, target)
|
|
|
|
if err := b.db.GiveKudos(ctx, i.GuildID, i.Member.User.ID, fromName, target.ID, toName); err != nil {
|
|
respondEphemeral(s, i, "Error giving kudos.")
|
|
return
|
|
}
|
|
|
|
total, _ := b.db.GetKudosReceived(ctx, i.GuildID, target.ID)
|
|
respond(s, i, fmt.Sprintf("👏 **%s** gave kudos to **%s**! They've received %d kudos total. Keep riding! 🚴",
|
|
fromName, toName, total))
|
|
}
|
|
|
|
func (b *Bot) handleCompare(ctx context.Context, s *discordgo.Session, i *discordgo.InteractionCreate) {
|
|
target := i.ApplicationCommandData().Options[0].UserValue(s)
|
|
meID := i.Member.User.ID
|
|
meName := displayName(i.Member, i.Member.User)
|
|
targetMember, _ := s.GuildMember(i.GuildID, target.ID)
|
|
themName := displayName(targetMember, target)
|
|
|
|
since := b.challengeStart(ctx, i.GuildID)
|
|
meStats, _ := b.db.GetUserStats(ctx, i.GuildID, meID, since)
|
|
themStats, _ := b.db.GetUserStats(ctx, i.GuildID, target.ID, since)
|
|
mePB, _ := b.db.GetUserPB(ctx, i.GuildID, meID)
|
|
themPB, _ := b.db.GetUserPB(ctx, i.GuildID, target.ID)
|
|
meStreak, _ := b.db.GetUserStreak(ctx, meID)
|
|
themStreak, _ := b.db.GetUserStreak(ctx, target.ID)
|
|
|
|
cmp := func(a, b float64) string {
|
|
switch {
|
|
case a > b:
|
|
return "⬆️"
|
|
case b > a:
|
|
return "⬇️"
|
|
default:
|
|
return "="
|
|
}
|
|
}
|
|
cmpI := func(a, b int) string { return cmp(float64(a), float64(b)) }
|
|
|
|
var sb strings.Builder
|
|
sb.WriteString(fmt.Sprintf("## ⚔️ %s vs %s\n\n", meName, themName))
|
|
sb.WriteString(fmt.Sprintf("| | **%s** | **%s** |\n", meName, themName))
|
|
sb.WriteString("|---|---|---|\n")
|
|
sb.WriteString(fmt.Sprintf("| Total KM %s | %.1f | %.1f |\n",
|
|
cmp(meStats.TotalKM, themStats.TotalKM), meStats.TotalKM, themStats.TotalKM))
|
|
sb.WriteString(fmt.Sprintf("| Rides %s | %d | %d |\n",
|
|
cmpI(meStats.LogCount, themStats.LogCount), meStats.LogCount, themStats.LogCount))
|
|
sb.WriteString(fmt.Sprintf("| Best ride %s | %.1f km | %.1f km |\n",
|
|
cmp(mePB, themPB), mePB, themPB))
|
|
sb.WriteString(fmt.Sprintf("| Streak %s | %d days | %d days |\n",
|
|
cmpI(meStreak, themStreak), meStreak, themStreak))
|
|
|
|
respondEphemeral(s, i, sb.String())
|
|
}
|