Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion src/guildstate/slashcmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,27 @@ func classifySnowflake(s *discordgo.Session, guildID, id string) string {
}
}

if guildID != "" {
if member, err := s.GuildMember(guildID, id); err == nil && member != nil {
name := strings.TrimSpace(member.Nick)
if name == "" && member.User != nil {
name = strings.TrimSpace(member.User.GlobalName)
}
if name == "" && member.User != nil {
name = strings.TrimSpace(member.User.Username)
}
Comment on lines +145 to +150
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There’s duplicated member.User != nil guarding in the name resolution (GlobalName and Username fallbacks). This can be simplified (e.g., assign u := member.User once and check it once) to reduce repetition and make the fallback order easier to read/maintain.

Suggested change
if name == "" && member.User != nil {
name = strings.TrimSpace(member.User.GlobalName)
}
if name == "" && member.User != nil {
name = strings.TrimSpace(member.User.Username)
}
if name == "" {
u := member.User
if u != nil {
name = strings.TrimSpace(u.GlobalName)
if name == "" {
name = strings.TrimSpace(u.Username)
}
}
}

Copilot uses AI. Check for mistakes.
if name == "" {
return "user"
}
return fmt.Sprintf("user (%s)", name)
}
}

Comment on lines +142 to +157
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

classifySnowflake now performs a GuildMember REST lookup for every snowflake when guildID != "". Since getSnowflakeDetails calls classifySnowflake in loops (and this function already does other REST lookups), this can significantly increase latency and can cause Discord interactions to time out (no deferred response is used) and/or hit rate limits when settings contain many IDs. Consider avoiding per-ID member lookups (e.g., only resolve via User), adding a cap/short-circuit for large inputs, caching results within the request, or deferring the interaction response before doing network-heavy resolution.

Suggested change
if guildID != "" {
if member, err := s.GuildMember(guildID, id); err == nil && member != nil {
name := strings.TrimSpace(member.Nick)
if name == "" && member.User != nil {
name = strings.TrimSpace(member.User.GlobalName)
}
if name == "" && member.User != nil {
name = strings.TrimSpace(member.User.Username)
}
if name == "" {
return "user"
}
return fmt.Sprintf("user (%s)", name)
}
}

Copilot uses AI. Check for mistakes.
if usr, err := s.User(id); err == nil && usr != nil {
name := strings.TrimSpace(usr.Username)
name := strings.TrimSpace(usr.GlobalName)
if name == "" {
name = strings.TrimSpace(usr.Username)
}
if name == "" {
return "user"
}
Expand Down
Loading