diff --git a/internal/config/config.go b/internal/config/config.go index 4c6a841..2a231b9 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -33,6 +33,7 @@ type Platform struct { AdminToken string SessionSigningToken string DiscordWebhook *DiscordWebhook + Caching bool } type DiscordWebhook struct { @@ -84,6 +85,7 @@ func Get() *Config { URL: cl.Get("platform.discordWebhook.url").AsString(), ThreadID: cl.Get("platform.discordWebhook.threadID").AsString(), }, + Caching: cl.WithDefault("platform.caching", true).AsBool(), }, } diff --git a/internal/guildScraper/checkMember.go b/internal/guildScraper/checkMember.go index e7bac89..ce31b1b 100644 --- a/internal/guildScraper/checkMember.go +++ b/internal/guildScraper/checkMember.go @@ -7,6 +7,8 @@ import ( "log/slog" "sync" "time" + + "github.com/CSSUoB/society-voting/internal/config" ) var ( @@ -16,6 +18,24 @@ var ( ) func GetMember(studentID string) (*GuildMember, error) { + conf := config.Get().Platform + + if !conf.Caching { + members, err := GetMembersList() + + if err != nil { + slog.Warn("failed to pull membership list", "error", err) + return nil, fmt.Errorf("pull membership list: %w", err) + } + + for _, x := range members { + if x.ID == studentID { + return x, nil + } + } + return nil, nil + } + cachedMembershipListLock.RLock() if time.Since(cachedMembershipListLastRefreshed) > time.Minute*5 {