From 1078cf3deb94ef22c65510b42c8e7f0dc50a036a Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Sun, 14 Apr 2024 17:11:31 +0200 Subject: feat(xp): xp and level gain --- xp/events.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 xp/events.go (limited to 'xp/events.go') diff --git a/xp/events.go b/xp/events.go new file mode 100644 index 0000000..c82c489 --- /dev/null +++ b/xp/events.go @@ -0,0 +1,40 @@ +package xp + +import ( + "github.com/anhgelus/gokord/utils" + "github.com/bwmarrin/discordgo" +) + +func OnMessage(s *discordgo.Session, m *discordgo.MessageCreate) { + c := Copaing{DiscordID: m.Author.ID, GuildID: m.GuildID} + c.Load() + // add xp + pastLevel := Level(c.XP) + trimmed := utils.TrimMessage(m.Content) + c.XP += XPMessage(uint(len(trimmed)), calcDiversity(trimmed)) + c.Save() + newLevel := Level(c.XP) + // handle new level + if pastLevel < newLevel { + if err := s.MessageReactionAdd(m.ChannelID, m.Message.ID, "⬆"); err != nil { + utils.SendAlert("xp/events.go - reaction add new level", "cannot add the reaction: "+err.Error()) + } + onNewLevel(s, newLevel) + } +} + +func calcDiversity(msg string) uint { + var chars []rune + for _, c := range []rune(msg) { + toAdd := true + for _, ch := range chars { + if ch == c { + toAdd = false + } + } + if toAdd { + chars = append(chars, c) + } + } + return uint(len(chars)) +} -- cgit v1.2.3