first commit
This commit is contained in:
76
bot/handlers_admin.go
Normal file
76
bot/handlers_admin.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package bot
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
func (b *Bot) handleAddKM(ctx context.Context, s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||
if !b.isAdmin(i) {
|
||||
respondEphemeral(s, i, "You need the **Manage Server** permission to use this command.")
|
||||
return
|
||||
}
|
||||
opts := i.ApplicationCommandData().Options
|
||||
targetUser := opts[0].UserValue(s)
|
||||
km := opts[1].FloatValue()
|
||||
|
||||
targetMember, _ := s.GuildMember(i.GuildID, targetUser.ID)
|
||||
name := displayName(targetMember, targetUser)
|
||||
|
||||
if err := b.db.AdjustKM(ctx, i.GuildID, targetUser.ID, name, km); err != nil {
|
||||
respondEphemeral(s, i, "Error updating KM.")
|
||||
return
|
||||
}
|
||||
verb := "added"
|
||||
if km < 0 {
|
||||
verb = "removed"
|
||||
km = math.Abs(km)
|
||||
}
|
||||
respondEphemeral(s, i, fmt.Sprintf("✅ %s %.1f km for **%s**.", titleCase(verb), km, name))
|
||||
}
|
||||
|
||||
func (b *Bot) handleRemoveLog(ctx context.Context, s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||
if !b.isAdmin(i) {
|
||||
respondEphemeral(s, i, "You need the **Manage Server** permission to use this command.")
|
||||
return
|
||||
}
|
||||
messageID := i.ApplicationCommandData().Options[0].StringValue()
|
||||
km, err := b.db.RemoveLog(ctx, messageID)
|
||||
if err != nil {
|
||||
respondEphemeral(s, i, "Error removing log.")
|
||||
return
|
||||
}
|
||||
if km == 0 {
|
||||
respondEphemeral(s, i, "No log found for that message ID.")
|
||||
return
|
||||
}
|
||||
respondEphemeral(s, i, fmt.Sprintf("✅ Removed a **%.1f km** entry.", km))
|
||||
}
|
||||
|
||||
func (b *Bot) handleAudit(ctx context.Context, s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||
if !b.isAdmin(i) {
|
||||
respondEphemeral(s, i, "You need the **Manage Server** permission to use this command.")
|
||||
return
|
||||
}
|
||||
target := i.ApplicationCommandData().Options[0].UserValue(s)
|
||||
targetMember, _ := s.GuildMember(i.GuildID, target.ID)
|
||||
name := displayName(targetMember, target)
|
||||
|
||||
logs, err := b.db.GetUserLogs(ctx, i.GuildID, target.ID, 20)
|
||||
if err != nil || len(logs) == 0 {
|
||||
respondEphemeral(s, i, fmt.Sprintf("No logs found for **%s**.", name))
|
||||
return
|
||||
}
|
||||
|
||||
var sb strings.Builder
|
||||
sb.WriteString(fmt.Sprintf("## 🔍 Audit: %s (last %d)\n\n", name, len(logs)))
|
||||
for _, l := range logs {
|
||||
sb.WriteString(fmt.Sprintf("`%s` — **%.1f km** (msg: `%s`)\n",
|
||||
l.LoggedAt.Format("02 Jan 15:04"), l.KM, l.MessageID))
|
||||
}
|
||||
respondEphemeral(s, i, sb.String())
|
||||
}
|
||||
Reference in New Issue
Block a user