aboutsummaryrefslogtreecommitdiff
path: root/xp
diff options
context:
space:
mode:
Diffstat (limited to 'xp')
-rw-r--r--xp/events.go40
-rw-r--r--xp/level.go9
-rw-r--r--xp/member.go22
3 files changed, 71 insertions, 0 deletions
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))
+}
diff --git a/xp/level.go b/xp/level.go
new file mode 100644
index 0000000..67ee5a5
--- /dev/null
+++ b/xp/level.go
@@ -0,0 +1,9 @@
+package xp
+
+import (
+ "github.com/bwmarrin/discordgo"
+)
+
+func onNewLevel(s *discordgo.Session, level uint) {
+ // check roles
+}
diff --git a/xp/member.go b/xp/member.go
new file mode 100644
index 0000000..751bbd7
--- /dev/null
+++ b/xp/member.go
@@ -0,0 +1,22 @@
+package xp
+
+import (
+ "github.com/anhgelus/gokord"
+ "gorm.io/gorm"
+)
+
+type Copaing struct {
+ gorm.Model
+ DiscordID string
+ XP uint
+ GuildID string
+}
+
+func (c *Copaing) Load() *Copaing {
+ gokord.DB.Where("discord_id = ? and guild_id = ?", c.DiscordID, c.GuildID).FirstOrCreate(c)
+ return c
+}
+
+func (c *Copaing) Save() {
+ gokord.DB.Save(c)
+}