Files
velox-bot/internal/events/event_handlers.go
T
FernandoJVideira 035e383db2 feat: implement server logging functionality
- Added a logging service to manage server event logs including message edits, deletions, member joins/leaves, and moderation actions.
- Introduced commands to configure logging settings, including setting the log channel and enabling/disabling logging.
- Updated the README to document the new logging features and commands.
- Enhanced moderation commands to log actions taken on members.
2026-03-18 13:18:12 +00:00

52 lines
1.4 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) {
CacheMessageFromCreate(m)
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
}