50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
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
|
|
}
|