aboutsummaryrefslogtreecommitdiff
path: root/xp/events.go
blob: c82c489761326f262a0cf1f63ea48e959f5b756b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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))
}