From cd724aa48ab95324cfc5dbe600e8803e02a9e57b Mon Sep 17 00:00:00 2001 From: Jim Eagle Date: Thu, 31 Mar 2022 20:22:46 +0100 Subject: [PATCH] IconURL for GuildPreview and GuildWithCounts (#885) * Add missing field * Helpers * Renames * Use helper * Add withCounts query option to Guild() * Move IconURL * Add IconURL to GuildPreview * Update comments * Send `[]` rather than `null` on empty activities slice * Add more robust file support for webhooks * Add withCounts query option to Guild() * Update comments * Split guild func * Update structs.go Co-authored-by: Fedor Lapshin * Update structs.go Co-authored-by: Fedor Lapshin * Revert * Format yaml * Add IconURL to GuildPreview * Revert * Revert space * Update restapi.go Co-authored-by: Fedor Lapshin * Remove variadic * Revert yamls * Remove param * Hardcode string Co-authored-by: Carson Hoffman Co-authored-by: Fedor Lapshin --- restapi.go | 15 ++++++++++++++- structs.go | 19 +++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/restapi.go b/restapi.go index 887076fcb..d8ff93137 100644 --- a/restapi.go +++ b/restapi.go @@ -472,6 +472,19 @@ func (s *Session) Guild(guildID string) (st *Guild, err error) { return } +// GuildWithCounts returns a Guild structure of a specific Guild with approximate member and presence counts. +// guildID : The ID of a Guild +func (s *Session) GuildWithCounts(guildID string) (st *Guild, err error) { + + body, err := s.RequestWithBucketID("GET", EndpointGuild(guildID)+"?with_counts=true", nil, EndpointGuild(guildID)) + if err != nil { + return + } + + err = unmarshal(body, &st) + return +} + // GuildPreview returns a GuildPreview structure of a specific public Guild. // guildID : The ID of a Guild func (s *Session) GuildPreview(guildID string) (st *GuildPreview, err error) { @@ -515,7 +528,7 @@ func (s *Session) GuildEdit(guildID string, g GuildParams) (st *Guild, err error } } - //Bounds checking for regions + // Bounds checking for regions if g.Region != "" { isValid := false regions, _ := s.VoiceRegions() diff --git a/structs.go b/structs.go index 88f9d6ec9..b20a49008 100644 --- a/structs.go +++ b/structs.go @@ -757,16 +757,31 @@ type GuildPreview struct { // The list of enabled guild features Features []string `json:"features"` - // Approximate number of members in this guild, returned from the GET /guild/ endpoint when with_counts is true + // Approximate number of members in this guild + // NOTE: this field is only filled when using GuildWithCounts ApproximateMemberCount int `json:"approximate_member_count"` - // Approximate number of non-offline members in this guild, returned from the GET /guild/ endpoint when with_counts is true + // Approximate number of non-offline members in this guild + // NOTE: this field is only filled when using GuildWithCounts ApproximatePresenceCount int `json:"approximate_presence_count"` // the description for the guild Description string `json:"description"` } +// IconURL returns a URL to the guild's icon. +func (g *GuildPreview) IconURL() string { + if g.Icon == "" { + return "" + } + + if strings.HasPrefix(g.Icon, "a_") { + return EndpointGuildIconAnimated(g.ID, g.Icon) + } + + return EndpointGuildIcon(g.ID, g.Icon) +} + // GuildScheduledEvent is a representation of a scheduled event in a guild. Only for retrieval of the data. // https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event type GuildScheduledEvent struct {