feat: leveling system

This commit is contained in:
2026-03-17 15:17:36 +00:00
parent 0354fdc032
commit 2bce787c05
24 changed files with 1840 additions and 3 deletions
+49
View File
@@ -0,0 +1,49 @@
package events
import (
"context"
"log"
"strconv"
"strings"
"velox-bot/internal/db/services"
"github.com/bwmarrin/discordgo"
)
func HandleMessageCreate(s *discordgo.Session, m *discordgo.MessageCreate, services *services.Services) {
if m.Author.Bot || m.GuildID == "" {
return
}
ctx := context.Background()
guildID := mustParseInt64(m.GuildID)
userID := mustParseInt64(m.Author.ID)
res, err := services.Level.HandleMessage(ctx, guildID, userID)
if err != nil || !res.LeveledUp {
return
}
// Decide where to send the level-up message
targetChannelID := m.ChannelID
if res.LevelupChannel != 0 {
targetChannelID = strconv.FormatInt(res.LevelupChannel, 10)
}
content, err := services.LevelSettings.GetLevelUpMessage(ctx, guildID)
if err != nil {
return
}
content = strings.ReplaceAll(content, "{user}", m.Author.Mention())
content = strings.ReplaceAll(content, "{level}", strconv.Itoa(res.NewLevel))
s.ChannelMessageSend(targetChannelID, content)
// Apply role reward if any
if res.RoleRewardID != 0 {
roleID := strconv.FormatInt(res.RoleRewardID, 10)
if err := s.GuildMemberRoleAdd(m.GuildID, m.Author.ID, roleID); err != nil {
log.Printf("Failed to add role reward: guild=%s user=%s role=%s err=%v", m.GuildID, m.Author.ID, roleID, err)
}
}
}
func mustParseInt64(s string) int64 {
id, _ := strconv.ParseInt(s, 10, 64)
return id
}