11package discord
22
33import (
4+ "fmt"
45 "strings"
56 "time"
67
@@ -14,47 +15,48 @@ func CacheUpdater(session *discordgo.Session) {
1415 time .Sleep (10 * time .Second )
1516
1617 for {
17- CacheDiscordMembers (session )
18+ count := CacheDiscordMembers (session )
19+ fmt .Printf ("%s: discord members update: %d members\n " , time .Now ().Format ("2006.01.02 15:04:05" ), count )
20+
1821 //sleep for 4 hours (caches every 4 hours)
1922 time .Sleep (4 * time .Hour )
2023 }
2124}
2225
23- // UserList is a struct for member info.
24- type UserList struct {
25- UserID string
26- Nick string
27- User * discordgo.User
28- }
29-
30- // Users is a slice of UserList.
31- var Users []UserList
32-
33- // CacheDiscordMembers caches the users list to be searched.
34- func CacheDiscordMembers (s * discordgo.Session ) {
35- // Clear the users list
36- Users = nil
37-
38- GuildChannel , err := s .Channel (support .Config .FactorioChannelID )
39- support .Panik (err , "... when attempting to read the Discord Guild" )
40-
41- GuildID := GuildChannel .GuildID
42- members , err := s .State .Guild (GuildID )
43- support .Panik (err , "... when attempting to read the Discord Guild Members" )
26+ func CacheDiscordMembers (session * discordgo.Session ) (count int ) {
27+ after := ""
28+ limit := 1000
4429
45- for _ , member := range members .Members {
46- Users = append (Users , UserList {UserID : member .User .ID , Nick : member .Nick ,
47- User : member .User })
30+ for {
31+ members , err := session .GuildMembers (support .GuildID , after , limit )
32+ if err != nil {
33+ support .Panik (err , "... when requesting members" )
34+ return
35+ }
36+ for _ , member := range members {
37+ member .GuildID = support .GuildID
38+ err = session .State .MemberAdd (member )
39+ support .Panik (err , "... when adding member to state" )
40+ }
41+ count += len (members )
42+ if len (members ) < limit {
43+ break
44+ }
45+ after = members [len (members )- 1 ].User .ID
4846 }
47+ return
4948}
5049
5150// SearchForUser searches for the user to be mentioned.
5251func SearchForUser (name string ) * discordgo.User {
5352 name = strings .Replace (name , "@" , "" , - 1 )
54- for _ , user := range Users {
55- if strings .ToLower (user .Nick ) == strings .ToLower (name ) ||
56- strings .ToLower (user .User .Username ) == strings .ToLower (name ) {
57- return user .User
53+ guild , err := Session .State .Guild (support .GuildID )
54+ support .Panik (err , "... when getting guild" )
55+
56+ for _ , member := range guild .Members {
57+ if strings .ToLower (member .Nick ) == strings .ToLower (name ) ||
58+ strings .ToLower (member .User .Username ) == strings .ToLower (name ) {
59+ return member .User
5860 }
5961 }
6062 return nil
0 commit comments