go: discord/backend: Consider active level while calculating trust level

master
Luther Wen Xu 2019-10-18 11:38:32 +07:00
parent a68565f215
commit ec43666620
Signed by: chanbakjsd
GPG Key ID: B7D77E3E9D102B70
2 changed files with 31 additions and 1 deletions

@ -17,6 +17,23 @@ func GetActiveLevel(discordID string) (int, error) {
return 0, ErrNotFound return 0, ErrNotFound
} }
func GetTotalActiveLevel() (int, error) {
rows, err := db.Query("SELECT sum(level) FROM activeLevel")
if err != nil {
return 0, err
}
defer rows.Close()
if rows.Next() {
var totalActiveLevel int
err := rows.Scan(&totalActiveLevel)
if err != nil {
return 0, err
}
return totalActiveLevel, nil
}
return 0, ErrNotFound
}
func AddActiveLevel(discordID string, addedLevel int) error { func AddActiveLevel(discordID string, addedLevel int) error {
_, err := db.Exec("INSERT INTO activeLevel(id, level) VALUES(?, ?) ON DUPLICATE KEY UPDATE level=level+?", discordID, addedLevel, addedLevel) _, err := db.Exec("INSERT INTO activeLevel(id, level) VALUES(?, ?) ON DUPLICATE KEY UPDATE level=level+?", discordID, addedLevel, addedLevel)
return err return err

@ -39,7 +39,20 @@ func GetTrust(s *discordgo.Session, discordID string) (float64, error) {
for _, v := range votes { for _, v := range votes {
total += float64(v) total += float64(v)
} }
return total / float64(len(votes)), nil voteResult := total / float64(len(votes))
activeLevel, err := db.GetActiveLevel(discordID)
if err != nil && err != db.ErrNotFound {
//ErrNotFound is allowed. It just means the player hasn't played yet.
return 0.0, err
}
totalLevel, err := db.GetTotalActiveLevel()
if err != nil {
return 0.0, err
}
activeBuff := float64(activeLevel) / float64(totalLevel)
return voteResult * (1 + activeBuff), nil
} }
func GetTotalTrust(s *discordgo.Session) (float64, error) { func GetTotalTrust(s *discordgo.Session) (float64, error) {