59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package main
|
|
|
|
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 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
|
|
}
|