go: Implement trust calculation
parent
90d03c7738
commit
c3de3a0d36
@ -0,0 +1,23 @@
|
||||
package main
|
||||
|
||||
import "errors"
|
||||
|
||||
var errForceRejectionOnApprovedPerson = errors.New("db: attempt to force reject a user that is already approved")
|
||||
|
||||
func getTrustVote(targetID string) ([]int, error) {
|
||||
rows, err := db.Query("SELECT trust FROM trustVote WHERE targetUser=?", targetID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
defer rows.Close()
|
||||
|
||||
array := make([]int, 0)
|
||||
for rows.Next() {
|
||||
var trust int
|
||||
rows.Scan(&trust)
|
||||
array = append(array, trust)
|
||||
}
|
||||
|
||||
return array, nil
|
||||
}
|
@ -1,11 +1,58 @@
|
||||
package main
|
||||
|
||||
func getTrust(discordID string) int {
|
||||
//TODO This is a stub. Everyone has same weight for now.
|
||||
return 1
|
||||
import "github.com/bwmarrin/discordgo"
|
||||
|
||||
var trustCache map[string]float64
|
||||
|
||||
func getTrust(discordID string) (float64, error) {
|
||||
if v, ok := trustCache[discordID]; ok {
|
||||
return v, nil
|
||||
}
|
||||
votes, err := getTrustVote(discordID)
|
||||
if err != nil {
|
||||
return 0.0, err
|
||||
}
|
||||
votes = append(votes, 3)
|
||||
var total float64
|
||||
for _, v := range votes {
|
||||
total += float64(v)
|
||||
}
|
||||
return total / float64(len(votes)), nil
|
||||
}
|
||||
|
||||
func getTotalTrust(s *discordgo.Session) (float64, error) {
|
||||
members, err := getAllMembers(s)
|
||||
if err != nil {
|
||||
return 0.0, err
|
||||
}
|
||||
var total float64
|
||||
for _, member := range members {
|
||||
trust, err := getTrust(member.User.ID)
|
||||
if err != nil {
|
||||
return 0.0, err
|
||||
}
|
||||
total += trust
|
||||
}
|
||||
return total, nil
|
||||
}
|
||||
|
||||
func getTotalTrust() int {
|
||||
//TODO This is a stub. It returns 1 for easier testing for now.
|
||||
return 1
|
||||
func getAllMembers(s *discordgo.Session) ([]*discordgo.Member, error) {
|
||||
initial, err := s.GuildMembers(guildID, "", 1000)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
next := initial[len(initial)-1].User.ID
|
||||
for next != "" {
|
||||
nextArray, err := s.GuildMembers(guildID, next, 1000)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(nextArray) == 0 {
|
||||
next = ""
|
||||
} else {
|
||||
next = nextArray[len(nextArray)-1].User.ID
|
||||
initial = append(initial, nextArray...)
|
||||
}
|
||||
}
|
||||
return initial, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue