Skip to content

✨feat: prefer guild nickname/global name when resolving users#2279

Merged
mkmccarty merged 1 commit intomainfrom
mm-branch-1
Mar 22, 2026
Merged

✨feat: prefer guild nickname/global name when resolving users#2279
mkmccarty merged 1 commit intomainfrom
mm-branch-1

Conversation

@mkmccarty
Copy link
Owner

No description provided.

Copilot AI review requested due to automatic review settings March 22, 2026 02:18
@mkmccarty mkmccarty merged commit 00f850d into main Mar 22, 2026
4 checks passed
@mkmccarty mkmccarty deleted the mm-branch-1 branch March 22, 2026 02:18
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR updates snowflake/user resolution used in guild settings slash command output to display more human-friendly names by preferring guild nicknames and Discord global display names when available.

Changes:

  • Enhance classifySnowflake to resolve user IDs to member.Nick (guild nickname) first when a guildID is available.
  • Fall back to User.GlobalName before User.Username when resolving users.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +142 to +157
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)
}
}

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.
Comment on lines +145 to +150
if name == "" && member.User != nil {
name = strings.TrimSpace(member.User.GlobalName)
}
if name == "" && member.User != nil {
name = strings.TrimSpace(member.User.Username)
}
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants