Skip to content

Commit 43f1069

Browse files
committed
Fix discord members cache being empty.
Fixes mentions and user colors
1 parent 3d71c6c commit 43f1069

3 files changed

Lines changed: 38 additions & 29 deletions

File tree

discord/cache.go

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package discord
22

33
import (
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.
5251
func 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

discord/chat.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ func StartSession() {
3434

3535
err = Session.Open()
3636
support.Critical(err, "... when attempting to connect to Discord")
37+
38+
GuildChannel, err := Session.Channel(support.Config.FactorioChannelID)
39+
support.Critical(err, "... when attempting to read the Discord Guild")
40+
41+
support.GuildID = GuildChannel.GuildID
3742
}
3843

3944
func Init() {

support/config.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88

99
var ConfigPath = "./config.json"
1010

11+
var GuildID string
12+
1113
// Config is a config interface.
1214
var Config configT
1315

0 commit comments

Comments
 (0)