From 1a844d697d0544114785903c9731420b66b32d11 Mon Sep 17 00:00:00 2001 From: Nicholas Stafie Date: Thu, 25 Feb 2016 00:21:09 +0200 Subject: [PATCH] Add support for guild region and verification level --- restapi.go | 38 ++++++++++++++++++++++++++++++++++---- structs.go | 44 ++++++++++++++++++++++++++------------------ 2 files changed, 60 insertions(+), 22 deletions(-) diff --git a/restapi.go b/restapi.go index 76b678b..aae606a 100644 --- a/restapi.go +++ b/restapi.go @@ -372,13 +372,43 @@ func (s *Session) GuildCreate(name string) (st *Guild, err error) { // GuildEdit edits a new Guild // guildID : The ID of a Guild // name : A name for the Guild (2-100 characters) -func (s *Session) GuildEdit(guildID, name string) (st *Guild, err error) { +func (s *Session) GuildEdit(guildID string, g GuildParams) (st *Guild, err error) { + + // Bounds checking for VerificationLevel, interval: [0, 3] + if g.VerificationLevel != nil { + val := *g.VerificationLevel + if val < 0 || val > 3 { + err = errors.New("VerificationLevel out of bounds, should be between 0 and 3") + return + } + } + + //Bounds checking for regions + if g.Region != "" { + isValid := false + regions, _ := s.VoiceRegions() + for _, r := range regions { + if g.Region == r.ID { + isValid = true + } + } + if !isValid { + var valid []string + for _, r := range regions { + valid = append(valid, r.ID) + } + err = errors.New(fmt.Sprintf("Region not a valid region (%q)", valid)) + return + } + } data := struct { - Name string `json:"name"` - }{name} + Name string `json:"name,omitempty"` + Region string `json:"region,omitempty"` + VerificationLevel *int `json:"verification_level,omitempty"` + }{g.Name, g.Region, g.VerificationLevel} - body, err := s.Request("POST", GUILD(guildID), data) + body, err := s.Request("PATCH", GUILD(guildID), data) if err != nil { return } diff --git a/structs.go b/structs.go index f364fa4..ffb4801 100644 --- a/structs.go +++ b/structs.go @@ -148,24 +148,32 @@ type Emoji struct { // A Guild holds all data related to a specific Discord Guild. Guilds are also // sometimes referred to as Servers in the Discord client. type Guild struct { - ID string `json:"id"` - Name string `json:"name"` - Icon string `json:"icon"` - Region string `json:"region"` - AfkChannelID string `json:"afk_channel_id"` - EmbedChannelID string `json:"embed_channel_id"` - OwnerID string `json:"owner_id"` - JoinedAt string `json:"joined_at"` // make this a timestamp - Splash string `json:"splash"` - AfkTimeout int `json:"afk_timeout"` - EmbedEnabled bool `json:"embed_enabled"` - Large bool `json:"large"` // ?? - Roles []*Role `json:"roles"` - Emojis []*Emoji `json:"emojis"` - Members []*Member `json:"members"` - Presences []*Presence `json:"presences"` - Channels []*Channel `json:"channels"` - VoiceStates []*VoiceState `json:"voice_states"` + ID string `json:"id"` + Name string `json:"name"` + Icon string `json:"icon"` + Region string `json:"region"` + AfkChannelID string `json:"afk_channel_id"` + EmbedChannelID string `json:"embed_channel_id"` + OwnerID string `json:"owner_id"` + JoinedAt string `json:"joined_at"` // make this a timestamp + Splash string `json:"splash"` + AfkTimeout int `json:"afk_timeout"` + VerificationLevel int `json:"verification_level"` + EmbedEnabled bool `json:"embed_enabled"` + Large bool `json:"large"` // ?? + Roles []*Role `json:"roles"` + Emojis []*Emoji `json:"emojis"` + Members []*Member `json:"members"` + Presences []*Presence `json:"presences"` + Channels []*Channel `json:"channels"` + VoiceStates []*VoiceState `json:"voice_states"` +} + +// A GuildParams stores all the data needed to update discord guild settings +type GuildParams struct { + Name string `json:"name"` + Region string `json:"region"` + VerificationLevel *int `json:"verification_level"` } // A Role stores information about Discord guild member roles.