115 lines
2.2 KiB
Go
115 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
|
|
"github.com/animenotifier/arn"
|
|
"github.com/fatih/color"
|
|
)
|
|
|
|
func main() {
|
|
color.Yellow("Caching list of active users")
|
|
|
|
// Filter out active users with an avatar
|
|
users, err := arn.FilterUsers(func(user *arn.User) bool {
|
|
return user.IsActive() && user.Avatar.Extension != ""
|
|
})
|
|
fmt.Println(len(users))
|
|
|
|
arn.PanicOnError(err)
|
|
|
|
// Sort
|
|
sort.Slice(users, func(i, j int) bool {
|
|
if users[i].LastSeen < users[j].LastSeen {
|
|
return false
|
|
}
|
|
|
|
if users[i].LastSeen > users[j].LastSeen {
|
|
return true
|
|
}
|
|
|
|
return users[i].Registered > users[j].Registered
|
|
})
|
|
|
|
// Add users to list
|
|
SaveInCache("active users", users)
|
|
|
|
// Sort by osu rank
|
|
osuUsers := users[:]
|
|
|
|
sort.Slice(osuUsers, func(i, j int) bool {
|
|
return osuUsers[i].Accounts.Osu.PP > osuUsers[j].Accounts.Osu.PP
|
|
})
|
|
|
|
// Cut off users with 0 pp
|
|
for index, user := range osuUsers {
|
|
if user.Accounts.Osu.PP == 0 {
|
|
osuUsers = osuUsers[:index]
|
|
break
|
|
}
|
|
}
|
|
|
|
// Save osu users
|
|
SaveInCache("active osu users", osuUsers)
|
|
|
|
// Sort by role
|
|
staff := users[:]
|
|
|
|
sort.Slice(staff, func(i, j int) bool {
|
|
if staff[i].Role == "" {
|
|
return false
|
|
}
|
|
|
|
if staff[j].Role == "" {
|
|
return true
|
|
}
|
|
|
|
return staff[i].Role == "admin"
|
|
})
|
|
|
|
// Cut off non-staff
|
|
for index, user := range staff {
|
|
if user.Role == "" {
|
|
staff = staff[:index]
|
|
break
|
|
}
|
|
}
|
|
|
|
// Save staff users
|
|
SaveInCache("active staff users", staff)
|
|
|
|
// Sort by anime watching list length
|
|
watching := users[:]
|
|
|
|
sort.Slice(watching, func(i, j int) bool {
|
|
return len(watching[i].AnimeList().FilterStatus(arn.AnimeListStatusWatching).Items) > len(watching[j].AnimeList().FilterStatus(arn.AnimeListStatusWatching).Items)
|
|
})
|
|
|
|
// Save watching users
|
|
SaveInCache("active anime watching users", watching)
|
|
|
|
color.Green("Finished.")
|
|
}
|
|
|
|
// SaveInCache ...
|
|
func SaveInCache(key string, users []*arn.User) {
|
|
cache := arn.ListOfIDs{
|
|
IDList: GenerateIDList(users),
|
|
}
|
|
|
|
fmt.Println(len(cache.IDList), key)
|
|
arn.PanicOnError(arn.DB.Set("Cache", key, cache))
|
|
}
|
|
|
|
// GenerateIDList generates an ID list from a slice of users.
|
|
func GenerateIDList(users []*arn.User) []string {
|
|
list := []string{}
|
|
|
|
for _, user := range users {
|
|
list = append(list, user.ID)
|
|
}
|
|
|
|
return list
|
|
}
|