first commit
This commit is contained in:
43
bot/handlers_reports.go
Normal file
43
bot/handlers_reports.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package bot
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
func (b *Bot) handleWeeklyReport(ctx context.Context, s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||
from := weekStart()
|
||||
b.sendReport(ctx, s, i, fmt.Sprintf("📅 Week of %s", from.Format("2 Jan")), from, time.Now().UTC())
|
||||
}
|
||||
|
||||
func (b *Bot) handleMonthlyReport(ctx context.Context, s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||
from := monthStart()
|
||||
b.sendReport(ctx, s, i, fmt.Sprintf("📅 %s", from.Format("January 2006")), from, time.Now().UTC())
|
||||
}
|
||||
|
||||
func (b *Bot) sendReport(ctx context.Context, s *discordgo.Session, i *discordgo.InteractionCreate, title string, from, to time.Time) {
|
||||
entries, err := b.db.GetStatsInRange(ctx, i.GuildID, from, to, 20)
|
||||
if err != nil {
|
||||
respondEphemeral(s, i, "Error fetching report.")
|
||||
return
|
||||
}
|
||||
if len(entries) == 0 {
|
||||
respondEphemeral(s, i, "No rides logged in this period yet.")
|
||||
return
|
||||
}
|
||||
|
||||
var total float64
|
||||
var sb strings.Builder
|
||||
sb.WriteString(fmt.Sprintf("## %s Report\n\n", title))
|
||||
for idx, e := range entries {
|
||||
sb.WriteString(fmt.Sprintf("**%d.** %s — **%.1f km** (%d ride%s)\n",
|
||||
idx+1, e.Username, e.TotalKM, e.LogCount, plural(e.LogCount)))
|
||||
total += e.TotalKM
|
||||
}
|
||||
sb.WriteString(fmt.Sprintf("\n**Period total:** %.1f km", total))
|
||||
respond(s, i, sb.String())
|
||||
}
|
||||
Reference in New Issue
Block a user