231 lines
5.2 KiB
Go
Raw Normal View History

2016-12-06 03:36:31 +00:00
package users
import (
2017-10-28 01:53:12 +00:00
"sort"
2018-11-06 11:20:19 +00:00
"strings"
2017-06-10 00:19:31 +00:00
2016-12-06 03:36:31 +00:00
"github.com/aerogo/aero"
2019-06-03 09:32:43 +00:00
"github.com/animenotifier/notify.moe/arn"
2016-12-06 03:36:31 +00:00
"github.com/animenotifier/notify.moe/components"
2017-11-30 15:40:52 +00:00
"github.com/animenotifier/notify.moe/utils"
2016-12-06 03:36:31 +00:00
)
2017-07-19 11:08:12 +00:00
// Active ...
2019-06-01 04:55:49 +00:00
func Active(ctx aero.Context) error {
2017-10-27 07:11:56 +00:00
users := arn.FilterUsers(func(user *arn.User) bool {
2018-03-04 14:20:21 +00:00
return user.HasAvatar() && user.HasNick() && user.IsActive()
2017-10-27 07:11:56 +00:00
})
2017-07-19 11:08:12 +00:00
2018-11-06 11:20:19 +00:00
arn.SortUsersFollowers(users)
2019-06-01 04:55:49 +00:00
return ctx.HTML(components.Users(users, ctx.Path()))
}
// Pro ...
2019-06-01 04:55:49 +00:00
func Pro(ctx aero.Context) error {
users := arn.FilterUsers(func(user *arn.User) bool {
return user.IsPro()
})
sort.Slice(users, func(i, j int) bool {
return users[i].Registered > users[j].Registered
})
2019-06-01 04:55:49 +00:00
return ctx.HTML(components.ProUsers(users, ctx.Path()))
}
// Editors ...
2019-06-01 04:55:49 +00:00
func Editors(ctx aero.Context) error {
score := map[string]int{}
users := []*arn.User{}
for entry := range arn.StreamEditLogEntries() {
entryScore := entry.EditorScore()
if entryScore == 0 {
continue
}
current, exists := score[entry.UserID]
if !exists {
users = append(users, entry.User())
}
score[entry.UserID] = current + entryScore
}
for ignore := range arn.StreamIgnoreAnimeDifferences() {
score[ignore.CreatedBy] += arn.IgnoreAnimeDifferenceEditorScore
}
sort.Slice(users, func(i, j int) bool {
scoreA := score[users[i].ID]
scoreB := score[users[j].ID]
if scoreA == scoreB {
return users[i].Registered > users[j].Registered
}
return scoreA > scoreB
})
2018-11-01 03:57:11 +00:00
if len(users) > 10 {
users = users[:10]
}
2019-06-01 04:55:49 +00:00
return ctx.HTML(components.EditorRankingList(users, score, ctx.Path()))
2017-11-30 15:40:52 +00:00
}
// ActiveNoAvatar ...
2019-06-01 04:55:49 +00:00
func ActiveNoAvatar(ctx aero.Context) error {
2017-11-30 15:40:52 +00:00
users := arn.FilterUsers(func(user *arn.User) bool {
return user.IsActive() && !user.HasAvatar()
})
2018-03-08 00:45:55 +00:00
followCount := arn.UserFollowerCountMap()
2017-11-30 15:40:52 +00:00
sort.Slice(users, func(i, j int) bool {
if users[i].HasAvatar() != users[j].HasAvatar() {
2018-04-25 23:14:23 +00:00
return users[i].HasAvatar()
2017-11-30 15:40:52 +00:00
}
2018-03-08 00:46:19 +00:00
followersA := followCount[users[i].ID]
followersB := followCount[users[j].ID]
2017-11-30 15:40:52 +00:00
if followersA == followersB {
return users[i].Nick < users[j].Nick
}
return followersA > followersB
})
2017-07-19 11:08:12 +00:00
2019-06-01 04:55:49 +00:00
return ctx.HTML(components.Users(users, ctx.Path()))
2017-07-19 11:08:12 +00:00
}
// Osu ...
2019-06-01 04:55:49 +00:00
func Osu(ctx aero.Context) error {
2017-10-28 01:53:12 +00:00
users := arn.FilterUsers(func(user *arn.User) bool {
2018-03-04 14:20:21 +00:00
return user.HasAvatar() && user.HasNick() && user.IsActive() && user.Accounts.Osu.PP > 0
2017-10-28 01:53:12 +00:00
})
2017-07-19 11:08:12 +00:00
2017-10-28 01:53:12 +00:00
// Sort by pp
sort.Slice(users, func(i, j int) bool {
return users[i].Accounts.Osu.PP > users[j].Accounts.Osu.PP
})
2017-07-19 11:08:12 +00:00
2018-11-01 03:57:11 +00:00
if len(users) > 10 {
users = users[:10]
2017-10-07 08:52:59 +00:00
}
2019-06-01 04:55:49 +00:00
return ctx.HTML(components.OsuRankingList(users, ctx.Path()))
2017-07-19 11:08:12 +00:00
}
2017-11-30 15:40:52 +00:00
// Overwatch ...
2019-06-01 04:55:49 +00:00
func Overwatch(ctx aero.Context) error {
2017-11-30 15:40:52 +00:00
users := arn.FilterUsers(func(user *arn.User) bool {
2018-03-04 14:20:21 +00:00
return user.HasAvatar() && user.HasNick() && user.IsActive() && user.Accounts.Overwatch.SkillRating > 0
2017-11-30 15:40:52 +00:00
})
// Sort by Skill Ratings
sort.Slice(users, func(i, j int) bool {
return users[i].Accounts.Overwatch.SkillRating > users[j].Accounts.Overwatch.SkillRating
})
2018-11-01 03:57:11 +00:00
if len(users) > 10 {
users = users[:10]
2017-11-30 15:40:52 +00:00
}
2019-06-01 04:55:49 +00:00
return ctx.HTML(components.OverwatchRankingList(users, ctx.Path()))
2017-11-30 15:40:52 +00:00
}
// FFXIV ...
2019-06-01 04:55:49 +00:00
func FFXIV(ctx aero.Context) error {
users := arn.FilterUsers(func(user *arn.User) bool {
return user.HasAvatar() && user.HasNick() && user.IsActive() && user.Accounts.FinalFantasyXIV.ItemLevel > 0
})
// Sort by item level
sort.Slice(users, func(i, j int) bool {
return users[i].Accounts.FinalFantasyXIV.ItemLevel > users[j].Accounts.FinalFantasyXIV.ItemLevel
})
2018-11-01 03:57:11 +00:00
if len(users) > 10 {
users = users[:10]
}
2019-06-01 04:55:49 +00:00
return ctx.HTML(components.FinalFantasyXIVRankingList(users, ctx.Path()))
}
2018-11-06 11:20:19 +00:00
// ByCountry ...
2019-06-01 04:55:49 +00:00
func ByCountry(ctx aero.Context) error {
2018-11-06 11:20:19 +00:00
countryName := ctx.Get("country")
users := arn.FilterUsers(func(user *arn.User) bool {
return strings.ToLower(user.Location.CountryName) == countryName && user.Settings().Privacy.ShowLocation && user.HasAvatar() && user.HasNick() && user.IsActive()
})
arn.SortUsersFollowers(users)
return ctx.HTML(components.UsersByCountry(users, countryName))
}
2017-07-19 11:08:12 +00:00
// Staff ...
2019-06-01 04:55:49 +00:00
func Staff(ctx aero.Context) error {
2017-10-28 01:53:12 +00:00
users := arn.FilterUsers(func(user *arn.User) bool {
2018-03-04 14:20:21 +00:00
return user.HasAvatar() && user.HasNick() && user.IsActive() && user.Role != ""
2017-10-28 01:53:12 +00:00
})
2017-07-19 11:08:12 +00:00
2017-11-30 15:40:52 +00:00
// Make order deterministic
2017-10-28 01:53:12 +00:00
sort.Slice(users, func(i, j int) bool {
2017-11-30 15:40:52 +00:00
return users[i].Nick < users[j].Nick
})
admins := &utils.UserList{
Name: "Developer",
Users: []*arn.User{},
}
contributors := &utils.UserList{
Name: "Contributors",
Users: []*arn.User{},
}
// contributors.Users = append(contributors.Users, )
editors := &utils.UserList{
Name: "Editors",
Users: []*arn.User{},
}
2018-10-28 01:53:57 +00:00
contributorIDs := []string{
"VJOK1ckvx", // Scott
"SUQOAFFkR", // Allen
"KQgtMWOiR", // Franksks
"9NMYrAHiR", // Amatrelan
}
2017-11-30 15:40:52 +00:00
for _, user := range users {
if user.Role == "admin" {
admins.Users = append(admins.Users, user)
continue
2017-10-28 01:53:12 +00:00
}
2018-10-28 01:53:57 +00:00
if arn.Contains(contributorIDs, user.ID) {
2017-11-30 15:40:52 +00:00
contributors.Users = append(contributors.Users, user)
continue
2017-10-28 01:53:12 +00:00
}
2017-11-30 15:40:52 +00:00
if user.Role == "editor" {
editors.Users = append(editors.Users, user)
continue
}
}
2017-07-19 11:08:12 +00:00
2017-11-30 15:40:52 +00:00
userLists := []*utils.UserList{
admins,
contributors,
editors,
}
2019-06-01 04:55:49 +00:00
return ctx.HTML(components.UserLists(userLists, ctx.Path()) + components.StaffRecruitment())
2017-07-19 11:08:12 +00:00
}