From eb82d614b3abf42acbed0dd2d3811d38a10f1236 Mon Sep 17 00:00:00 2001 From: caneleex Date: Mon, 15 Aug 2022 23:33:57 +0200 Subject: [PATCH 1/8] initial work (nothing) --- discord/application_command_create.go | 33 +++++- discord/application_command_option.go | 148 ++++++++++++++++++++++++++ go.mod | 7 +- go.sum | 14 ++- 4 files changed, 194 insertions(+), 8 deletions(-) diff --git a/discord/application_command_create.go b/discord/application_command_create.go index b3019895..5d048852 100644 --- a/discord/application_command_create.go +++ b/discord/application_command_create.go @@ -1,6 +1,9 @@ package discord -import "github.com/disgoorg/disgo/json" +import ( + "github.com/disgoorg/disgo/json" + "github.com/disgoorg/validate" +) type ApplicationCommandCreate interface { json.Marshaler @@ -19,6 +22,27 @@ type SlashCommandCreate struct { DMPermission bool `json:"dm_permission"` } +func (c SlashCommandCreate) Validate() (err error) { + err = validate.Validate( + validate.New(c.Name, validate.Required[string], validate.StringRange(1, ApplicationCommandNameMaxLength)), + validate.New(c.Description, validate.Required[string], validate.StringRange(1, ApplicationCommandDescriptionMaxLength))) + if err != nil { + return + } + err = validate.Validate(validate.New(c.Options, + validate.SliceNoneNil[ApplicationCommandOption], + validate.SliceMaxLen[ApplicationCommandOption](ApplicationCommandMaxOptions))) + if err != nil { + return + } + for _, option := range c.Options { + if err = option.Validate(); err != nil { + return + } + } + return nil +} + func (c SlashCommandCreate) MarshalJSON() ([]byte, error) { type slashCommandCreate SlashCommandCreate return json.Marshal(struct { @@ -95,3 +119,10 @@ func (c MessageCommandCreate) CommandName() string { } func (MessageCommandCreate) applicationCommandCreate() {} + +const ( + ApplicationCommandNameMaxLength = 32 + ApplicationCommandDescriptionMaxLength = 100 + + ApplicationCommandMaxOptions = 25 +) diff --git a/discord/application_command_option.go b/discord/application_command_option.go index 509785c5..f7c29c51 100644 --- a/discord/application_command_option.go +++ b/discord/application_command_option.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/disgoorg/disgo/json" + "github.com/disgoorg/validate" ) // ApplicationCommandOptionType specifies the type of the arguments used in ApplicationCommand.Options @@ -26,6 +27,7 @@ const ( type ApplicationCommandOption interface { json.Marshaler + validate.Validator Type() ApplicationCommandOptionType OptionName() string OptionDescription() string @@ -169,6 +171,26 @@ func (o ApplicationCommandOptionSubCommand) OptionDescription() string { return o.Description } +func (o ApplicationCommandOptionSubCommand) Validate() (err error) { + err = validateOptionName(o) + if err != nil { + return err + } + options := o.Options + err = validate.Validate(validate.New(options, + validate.SliceNoneNil[ApplicationCommandOption], + validate.SliceMaxLen[ApplicationCommandOption](ApplicationCommandMaxOptions))) + if err != nil { + return + } + for _, option := range options { + if err = option.Validate(); err != nil { + return + } + } + return nil +} + func (ApplicationCommandOptionSubCommand) applicationCommandOption() {} func (ApplicationCommandOptionSubCommand) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeSubCommand @@ -203,6 +225,26 @@ func (o ApplicationCommandOptionSubCommandGroup) OptionDescription() string { return o.Description } +func (o ApplicationCommandOptionSubCommandGroup) Validate() (err error) { + err = validateOptionName(o) + if err != nil { + return + } + subcommands := o.Options + err = validate.Validate(validate.New(subcommands, + validate.SliceNoneNil[ApplicationCommandOptionSubCommand], + validate.SliceMaxLen[ApplicationCommandOptionSubCommand](ApplicationCommandMaxOptions))) + if err != nil { + return + } + for _, subcommand := range subcommands { + if err = subcommand.Validate(); err != nil { + return + } + } + return nil +} + func (ApplicationCommandOptionSubCommandGroup) applicationCommandOption() {} func (ApplicationCommandOptionSubCommandGroup) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeSubCommandGroup @@ -241,6 +283,27 @@ func (o ApplicationCommandOptionString) OptionDescription() string { return o.Description } +func (o ApplicationCommandOptionString) Validate() (err error) { + err = validateOptionName(o) + choices := o.Choices + err = validate.Validate( + validate.New(choices, + validate.SliceNoneNil[ApplicationCommandOptionChoiceString], + validate.SliceMaxLen[ApplicationCommandOptionChoiceString](ApplicationCommandOptionMaxChoices))) + if err != nil { + return + } + for _, choice := range choices { + err = validate.Validate( + validate.New(choice.Name, validate.Required[string], validate.StringRange(1, ApplicationCommandOptionChoiceNameMaxLength)), + validate.New(choice.Value, validate.Required[string], validate.StringRange(1, ApplicationCommandOptionStringChoiceValueMaxLength))) + if err != nil { + return + } + } + return nil +} + func (ApplicationCommandOptionString) applicationCommandOption() {} func (ApplicationCommandOptionString) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeString @@ -279,6 +342,29 @@ func (o ApplicationCommandOptionInt) OptionDescription() string { return o.Description } +func (o ApplicationCommandOptionInt) Validate() (err error) { + err = validateOptionName(o) + if err != nil { + return + } + choices := o.Choices + err = validate.Validate(validate.New(choices, + validate.SliceNoneNil[ApplicationCommandOptionChoiceInt], + validate.SliceMaxLen[ApplicationCommandOptionChoiceInt](ApplicationCommandOptionMaxChoices))) + if err != nil { + return + } + for _, choice := range choices { + err = validate.Validate(validate.New(choice.Name, + validate.Required[string], + validate.StringRange(1, ApplicationCommandOptionChoiceNameMaxLength))) + if err != nil { + return + } + } + return nil +} + func (ApplicationCommandOptionInt) applicationCommandOption() {} func (ApplicationCommandOptionInt) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeInt @@ -313,6 +399,10 @@ func (o ApplicationCommandOptionBool) OptionDescription() string { return o.Description } +func (o ApplicationCommandOptionBool) Validate() error { + return validateOptionName(o) +} + func (ApplicationCommandOptionBool) applicationCommandOption() {} func (ApplicationCommandOptionBool) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeBool @@ -347,6 +437,10 @@ func (o ApplicationCommandOptionUser) OptionDescription() string { return o.Description } +func (o ApplicationCommandOptionUser) Validate() error { + return validateOptionName(o) +} + func (ApplicationCommandOptionUser) applicationCommandOption() {} func (ApplicationCommandOptionUser) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeUser @@ -382,6 +476,10 @@ func (o ApplicationCommandOptionChannel) OptionDescription() string { return o.Name } +func (o ApplicationCommandOptionChannel) Validate() error { + return validateOptionName(o) +} + func (ApplicationCommandOptionChannel) applicationCommandOption() {} func (ApplicationCommandOptionChannel) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeChannel @@ -416,6 +514,10 @@ func (o ApplicationCommandOptionRole) OptionDescription() string { return o.Name } +func (o ApplicationCommandOptionRole) Validate() error { + return validateOptionName(o) +} + func (ApplicationCommandOptionRole) applicationCommandOption() {} func (ApplicationCommandOptionRole) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeRole @@ -450,6 +552,10 @@ func (o ApplicationCommandOptionMentionable) OptionDescription() string { return o.Name } +func (o ApplicationCommandOptionMentionable) Validate() error { + return validateOptionName(o) +} + func (ApplicationCommandOptionMentionable) applicationCommandOption() {} func (ApplicationCommandOptionMentionable) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeMentionable @@ -488,6 +594,29 @@ func (o ApplicationCommandOptionFloat) OptionDescription() string { return o.Name } +func (o ApplicationCommandOptionFloat) Validate() (err error) { + err = validateOptionName(o) + if err != nil { + return + } + choices := o.Choices + err = validate.Validate( + validate.New(choices, + validate.SliceNoneNil[ApplicationCommandOptionChoiceFloat], + validate.SliceMaxLen[ApplicationCommandOptionChoiceFloat](ApplicationCommandOptionMaxChoices))) + if err != nil { + return + } + for _, choice := range choices { + err = validate.Validate( + validate.New(choice.Name, validate.Required[string], validate.StringRange(1, ApplicationCommandOptionChoiceNameMaxLength))) + if err != nil { + return + } + } + return nil +} + func (ApplicationCommandOptionFloat) applicationCommandOption() {} func (ApplicationCommandOptionFloat) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeFloat @@ -554,7 +683,26 @@ func (o ApplicationCommandOptionAttachment) OptionDescription() string { return o.Name } +func (o ApplicationCommandOptionAttachment) Validate() error { + return validateOptionName(o) +} + func (ApplicationCommandOptionAttachment) applicationCommandOption() {} func (ApplicationCommandOptionAttachment) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeAttachment } + +func validateOptionName(o ApplicationCommandOption) error { + return validate.Validate( + validate.New(o.OptionName(), validate.Required[string], validate.StringRange(1, ApplicationCommandOptionNameMaxLength)), + validate.New(o.OptionDescription(), validate.Required[string], validate.StringRange(1, ApplicationCommandOptionDescriptionMaxLength))) +} + +const ( + ApplicationCommandOptionNameMaxLength = 32 + ApplicationCommandOptionDescriptionMaxLength = 32 + + ApplicationCommandOptionMaxChoices = 25 + ApplicationCommandOptionChoiceNameMaxLength = 100 + ApplicationCommandOptionStringChoiceValueMaxLength = 100 +) diff --git a/go.mod b/go.mod index 8c3f2edf..68229929 100644 --- a/go.mod +++ b/go.mod @@ -5,14 +5,15 @@ go 1.18 require ( github.com/disgoorg/log v1.2.0 github.com/disgoorg/snowflake/v2 v2.0.0 + github.com/disgoorg/validate v0.0.0-20220815195220-efcff7601103 github.com/gorilla/websocket v1.5.0 github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b - github.com/stretchr/testify v1.7.0 + github.com/stretchr/testify v1.8.0 golang.org/x/exp v0.0.0-20220325121720-054d8573a5d8 ) require ( - github.com/davecgh/go-spew v1.1.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index dcfd2a05..84bf2b6a 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,12 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/disgoorg/log v1.2.0 h1:sqlXnu/ZKAlIlHV9IO+dbMto7/hCQ474vlIdMWk8QKo= github.com/disgoorg/log v1.2.0/go.mod h1:3x1KDG6DI1CE2pDwi3qlwT3wlXpeHW/5rVay+1qDqOo= github.com/disgoorg/snowflake/v2 v2.0.0 h1:+xvyyDddXmXLHmiG8SZiQ3sdZdZPbUR22fSHoqwkrOA= github.com/disgoorg/snowflake/v2 v2.0.0/go.mod h1:SPU9c2CNn5DSyb86QcKtdZgix9osEtKrHLW4rMhfLCs= +github.com/disgoorg/validate v0.0.0-20220815195220-efcff7601103 h1:y6VMN4sJ8YQUFvTDG2K6gr0sOp+vnF7m4I0LnDsSxcw= +github.com/disgoorg/validate v0.0.0-20220815195220-efcff7601103/go.mod h1:Poy8FU7v7afr/qacLzuf/qQrtSmtlarMHXwvNxl+Wrs= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -11,11 +14,14 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b h1:qYTY2tN72LhgDj2rtWG+LI6TXFl2ygFQQ4YezfVaGQE= github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b/go.mod h1:/pA7k3zsXKdjjAiUhB5CjuKib9KJGCaLvZwtxGC8U0s= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= golang.org/x/exp v0.0.0-20220325121720-054d8573a5d8 h1:Xt4/LzbTwfocTk9ZLEu4onjeFucl88iW+v4j4PWbQuE= golang.org/x/exp v0.0.0-20220325121720-054d8573a5d8/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From b6f8d75ce7432f920db122729c7ca3c33bbb64b4 Mon Sep 17 00:00:00 2001 From: caneleex Date: Mon, 15 Aug 2022 23:36:46 +0200 Subject: [PATCH 2/8] return err --- discord/application_command_option.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/discord/application_command_option.go b/discord/application_command_option.go index f7c29c51..c657e468 100644 --- a/discord/application_command_option.go +++ b/discord/application_command_option.go @@ -285,6 +285,9 @@ func (o ApplicationCommandOptionString) OptionDescription() string { func (o ApplicationCommandOptionString) Validate() (err error) { err = validateOptionName(o) + if err != nil { + return + } choices := o.Choices err = validate.Validate( validate.New(choices, From 6985a66a2b6ed9903baf6e5d5513ab8baa59b02b Mon Sep 17 00:00:00 2001 From: caneleex Date: Mon, 15 Aug 2022 23:38:05 +0200 Subject: [PATCH 3/8] rename validateOptionName to validateOptionProps --- discord/application_command_option.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/discord/application_command_option.go b/discord/application_command_option.go index c657e468..1bc3ebce 100644 --- a/discord/application_command_option.go +++ b/discord/application_command_option.go @@ -172,7 +172,7 @@ func (o ApplicationCommandOptionSubCommand) OptionDescription() string { } func (o ApplicationCommandOptionSubCommand) Validate() (err error) { - err = validateOptionName(o) + err = validateOptionProps(o) if err != nil { return err } @@ -226,7 +226,7 @@ func (o ApplicationCommandOptionSubCommandGroup) OptionDescription() string { } func (o ApplicationCommandOptionSubCommandGroup) Validate() (err error) { - err = validateOptionName(o) + err = validateOptionProps(o) if err != nil { return } @@ -284,7 +284,7 @@ func (o ApplicationCommandOptionString) OptionDescription() string { } func (o ApplicationCommandOptionString) Validate() (err error) { - err = validateOptionName(o) + err = validateOptionProps(o) if err != nil { return } @@ -346,7 +346,7 @@ func (o ApplicationCommandOptionInt) OptionDescription() string { } func (o ApplicationCommandOptionInt) Validate() (err error) { - err = validateOptionName(o) + err = validateOptionProps(o) if err != nil { return } @@ -403,7 +403,7 @@ func (o ApplicationCommandOptionBool) OptionDescription() string { } func (o ApplicationCommandOptionBool) Validate() error { - return validateOptionName(o) + return validateOptionProps(o) } func (ApplicationCommandOptionBool) applicationCommandOption() {} @@ -441,7 +441,7 @@ func (o ApplicationCommandOptionUser) OptionDescription() string { } func (o ApplicationCommandOptionUser) Validate() error { - return validateOptionName(o) + return validateOptionProps(o) } func (ApplicationCommandOptionUser) applicationCommandOption() {} @@ -480,7 +480,7 @@ func (o ApplicationCommandOptionChannel) OptionDescription() string { } func (o ApplicationCommandOptionChannel) Validate() error { - return validateOptionName(o) + return validateOptionProps(o) } func (ApplicationCommandOptionChannel) applicationCommandOption() {} @@ -518,7 +518,7 @@ func (o ApplicationCommandOptionRole) OptionDescription() string { } func (o ApplicationCommandOptionRole) Validate() error { - return validateOptionName(o) + return validateOptionProps(o) } func (ApplicationCommandOptionRole) applicationCommandOption() {} @@ -556,7 +556,7 @@ func (o ApplicationCommandOptionMentionable) OptionDescription() string { } func (o ApplicationCommandOptionMentionable) Validate() error { - return validateOptionName(o) + return validateOptionProps(o) } func (ApplicationCommandOptionMentionable) applicationCommandOption() {} @@ -598,7 +598,7 @@ func (o ApplicationCommandOptionFloat) OptionDescription() string { } func (o ApplicationCommandOptionFloat) Validate() (err error) { - err = validateOptionName(o) + err = validateOptionProps(o) if err != nil { return } @@ -687,7 +687,7 @@ func (o ApplicationCommandOptionAttachment) OptionDescription() string { } func (o ApplicationCommandOptionAttachment) Validate() error { - return validateOptionName(o) + return validateOptionProps(o) } func (ApplicationCommandOptionAttachment) applicationCommandOption() {} @@ -695,7 +695,7 @@ func (ApplicationCommandOptionAttachment) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeAttachment } -func validateOptionName(o ApplicationCommandOption) error { +func validateOptionProps(o ApplicationCommandOption) error { return validate.Validate( validate.New(o.OptionName(), validate.Required[string], validate.StringRange(1, ApplicationCommandOptionNameMaxLength)), validate.New(o.OptionDescription(), validate.Required[string], validate.StringRange(1, ApplicationCommandOptionDescriptionMaxLength))) From 99edda0673ca6f35388f41e3db659f546c4e7d90 Mon Sep 17 00:00:00 2001 From: caneleex Date: Mon, 15 Aug 2022 23:39:02 +0200 Subject: [PATCH 4/8] create a var for options --- discord/application_command_create.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/discord/application_command_create.go b/discord/application_command_create.go index 5d048852..c87fd931 100644 --- a/discord/application_command_create.go +++ b/discord/application_command_create.go @@ -29,13 +29,14 @@ func (c SlashCommandCreate) Validate() (err error) { if err != nil { return } - err = validate.Validate(validate.New(c.Options, + options := c.Options + err = validate.Validate(validate.New(options, validate.SliceNoneNil[ApplicationCommandOption], validate.SliceMaxLen[ApplicationCommandOption](ApplicationCommandMaxOptions))) if err != nil { return } - for _, option := range c.Options { + for _, option := range options { if err = option.Validate(); err != nil { return } From 1c1537cb9173f6b5ac37785747943b288126d343 Mon Sep 17 00:00:00 2001 From: caneleex Date: Mon, 15 Aug 2022 23:48:48 +0200 Subject: [PATCH 5/8] fix max option description length --- discord/application_command_option.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discord/application_command_option.go b/discord/application_command_option.go index 1bc3ebce..e5fea743 100644 --- a/discord/application_command_option.go +++ b/discord/application_command_option.go @@ -703,7 +703,7 @@ func validateOptionProps(o ApplicationCommandOption) error { const ( ApplicationCommandOptionNameMaxLength = 32 - ApplicationCommandOptionDescriptionMaxLength = 32 + ApplicationCommandOptionDescriptionMaxLength = 100 ApplicationCommandOptionMaxChoices = 25 ApplicationCommandOptionChoiceNameMaxLength = 100 From 3513506cb6b44111f090ac2146bfbe11c6743891 Mon Sep 17 00:00:00 2001 From: caneleex Date: Mon, 15 Aug 2022 23:57:21 +0200 Subject: [PATCH 6/8] no need to use the var name here --- discord/application_command_option.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discord/application_command_option.go b/discord/application_command_option.go index e5fea743..b44f6c59 100644 --- a/discord/application_command_option.go +++ b/discord/application_command_option.go @@ -174,7 +174,7 @@ func (o ApplicationCommandOptionSubCommand) OptionDescription() string { func (o ApplicationCommandOptionSubCommand) Validate() (err error) { err = validateOptionProps(o) if err != nil { - return err + return } options := o.Options err = validate.Validate(validate.New(options, From 036e3c8180f4e59b42a376a754ec2534a96c1869 Mon Sep 17 00:00:00 2001 From: caneleex Date: Tue, 16 Aug 2022 17:00:53 +0200 Subject: [PATCH 7/8] validate choice values for all supported types --- discord/application_command_option.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/discord/application_command_option.go b/discord/application_command_option.go index b44f6c59..b0f9c368 100644 --- a/discord/application_command_option.go +++ b/discord/application_command_option.go @@ -289,10 +289,9 @@ func (o ApplicationCommandOptionString) Validate() (err error) { return } choices := o.Choices - err = validate.Validate( - validate.New(choices, - validate.SliceNoneNil[ApplicationCommandOptionChoiceString], - validate.SliceMaxLen[ApplicationCommandOptionChoiceString](ApplicationCommandOptionMaxChoices))) + err = validate.Validate(validate.New(choices, + validate.SliceNoneNil[ApplicationCommandOptionChoiceString], + validate.SliceMaxLen[ApplicationCommandOptionChoiceString](ApplicationCommandOptionMaxChoices))) if err != nil { return } @@ -358,9 +357,9 @@ func (o ApplicationCommandOptionInt) Validate() (err error) { return } for _, choice := range choices { - err = validate.Validate(validate.New(choice.Name, - validate.Required[string], - validate.StringRange(1, ApplicationCommandOptionChoiceNameMaxLength))) + err = validate.Validate( + validate.New(choice.Name, validate.Required[string], validate.StringRange(1, ApplicationCommandOptionChoiceNameMaxLength)), + validate.New(choice.Value, validate.Required[int])) if err != nil { return } @@ -612,7 +611,8 @@ func (o ApplicationCommandOptionFloat) Validate() (err error) { } for _, choice := range choices { err = validate.Validate( - validate.New(choice.Name, validate.Required[string], validate.StringRange(1, ApplicationCommandOptionChoiceNameMaxLength))) + validate.New(choice.Name, validate.Required[string], validate.StringRange(1, ApplicationCommandOptionChoiceNameMaxLength)), + validate.New(choice.Value, validate.Required[float64])) if err != nil { return } From 9602e9c6b42e73e7b346e688289a0b3f08f15d0b Mon Sep 17 00:00:00 2001 From: TopiSenpai Date: Fri, 9 Dec 2022 18:35:24 +0100 Subject: [PATCH 8/8] cleanup validators --- discord/application_command_create.go | 27 +- discord/application_command_option.go | 297 +++++++++---------- discord/application_command_option_choice.go | 97 ++++++ discord/message_create.go | 28 ++ go.mod | 6 +- go.sum | 8 +- 6 files changed, 285 insertions(+), 178 deletions(-) create mode 100644 discord/application_command_option_choice.go diff --git a/discord/application_command_create.go b/discord/application_command_create.go index c87fd931..90b60bd1 100644 --- a/discord/application_command_create.go +++ b/discord/application_command_create.go @@ -22,26 +22,13 @@ type SlashCommandCreate struct { DMPermission bool `json:"dm_permission"` } -func (c SlashCommandCreate) Validate() (err error) { - err = validate.Validate( - validate.New(c.Name, validate.Required[string], validate.StringRange(1, ApplicationCommandNameMaxLength)), - validate.New(c.Description, validate.Required[string], validate.StringRange(1, ApplicationCommandDescriptionMaxLength))) - if err != nil { - return - } - options := c.Options - err = validate.Validate(validate.New(options, - validate.SliceNoneNil[ApplicationCommandOption], - validate.SliceMaxLen[ApplicationCommandOption](ApplicationCommandMaxOptions))) - if err != nil { - return - } - for _, option := range options { - if err = option.Validate(); err != nil { - return - } - } - return nil +func (c SlashCommandCreate) Validate() error { + return validate.Validate( + validate.Value(c.Name, validate.Required[string], validate.StringRange(1, ApplicationCommandNameMaxLength)), + validate.Value(c.Description, validate.Required[string], validate.StringRange(1, ApplicationCommandDescriptionMaxLength)), + validate.Value(c.Options, validate.SliceMaxLen[ApplicationCommandOption](ApplicationCommandMaxOptions)), + validate.Slice(c.Options), + ) } func (c SlashCommandCreate) MarshalJSON() ([]byte, error) { diff --git a/discord/application_command_option.go b/discord/application_command_option.go index b0f9c368..3950cf53 100644 --- a/discord/application_command_option.go +++ b/discord/application_command_option.go @@ -2,6 +2,7 @@ package discord import ( "fmt" + "math" "github.com/disgoorg/disgo/json" "github.com/disgoorg/validate" @@ -30,7 +31,9 @@ type ApplicationCommandOption interface { validate.Validator Type() ApplicationCommandOptionType OptionName() string + OptionNameLocalizations() map[Locale]string OptionDescription() string + OptionDescriptionLocalizations() map[Locale]string applicationCommandOption() } @@ -167,28 +170,24 @@ func (o ApplicationCommandOptionSubCommand) OptionName() string { return o.Name } +func (o ApplicationCommandOptionSubCommand) OptionNameLocalizations() map[Locale]string { + return o.NameLocalizations +} + func (o ApplicationCommandOptionSubCommand) OptionDescription() string { return o.Description } -func (o ApplicationCommandOptionSubCommand) Validate() (err error) { - err = validateOptionProps(o) - if err != nil { - return - } - options := o.Options - err = validate.Validate(validate.New(options, - validate.SliceNoneNil[ApplicationCommandOption], - validate.SliceMaxLen[ApplicationCommandOption](ApplicationCommandMaxOptions))) - if err != nil { - return - } - for _, option := range options { - if err = option.Validate(); err != nil { - return - } - } - return nil +func (o ApplicationCommandOptionSubCommand) OptionDescriptionLocalizations() map[Locale]string { + return o.DescriptionLocalizations +} + +func (o ApplicationCommandOptionSubCommand) Validate() error { + return validate.Validate( + applicationCommandOptionValidator(o), + validate.Value(o.Options, validate.SliceMaxLen[ApplicationCommandOption](ApplicationCommandMaxOptions)), + validate.Slice(o.Options), + ) } func (ApplicationCommandOptionSubCommand) applicationCommandOption() {} @@ -221,28 +220,24 @@ func (o ApplicationCommandOptionSubCommandGroup) OptionName() string { return o.Name } +func (o ApplicationCommandOptionSubCommandGroup) OptionNameLocalizations() map[Locale]string { + return o.NameLocalizations +} + func (o ApplicationCommandOptionSubCommandGroup) OptionDescription() string { return o.Description } -func (o ApplicationCommandOptionSubCommandGroup) Validate() (err error) { - err = validateOptionProps(o) - if err != nil { - return - } - subcommands := o.Options - err = validate.Validate(validate.New(subcommands, - validate.SliceNoneNil[ApplicationCommandOptionSubCommand], - validate.SliceMaxLen[ApplicationCommandOptionSubCommand](ApplicationCommandMaxOptions))) - if err != nil { - return - } - for _, subcommand := range subcommands { - if err = subcommand.Validate(); err != nil { - return - } - } - return nil +func (o ApplicationCommandOptionSubCommandGroup) OptionDescriptionLocalizations() map[Locale]string { + return o.DescriptionLocalizations +} + +func (o ApplicationCommandOptionSubCommandGroup) Validate() error { + return validate.Validate( + applicationCommandOptionValidator(o), + validate.Value(o.Options, validate.SliceNoneNil[ApplicationCommandOptionSubCommand], validate.SliceMaxLen[ApplicationCommandOptionSubCommand](ApplicationCommandMaxOptions)), + validate.Slice(o.Options), + ) } func (ApplicationCommandOptionSubCommandGroup) applicationCommandOption() {} @@ -279,31 +274,20 @@ func (o ApplicationCommandOptionString) OptionName() string { return o.Name } +func (o ApplicationCommandOptionString) OptionNameLocalizations() map[Locale]string { + return o.NameLocalizations +} + func (o ApplicationCommandOptionString) OptionDescription() string { return o.Description } -func (o ApplicationCommandOptionString) Validate() (err error) { - err = validateOptionProps(o) - if err != nil { - return - } - choices := o.Choices - err = validate.Validate(validate.New(choices, - validate.SliceNoneNil[ApplicationCommandOptionChoiceString], - validate.SliceMaxLen[ApplicationCommandOptionChoiceString](ApplicationCommandOptionMaxChoices))) - if err != nil { - return - } - for _, choice := range choices { - err = validate.Validate( - validate.New(choice.Name, validate.Required[string], validate.StringRange(1, ApplicationCommandOptionChoiceNameMaxLength)), - validate.New(choice.Value, validate.Required[string], validate.StringRange(1, ApplicationCommandOptionStringChoiceValueMaxLength))) - if err != nil { - return - } - } - return nil +func (o ApplicationCommandOptionString) OptionDescriptionLocalizations() map[Locale]string { + return o.DescriptionLocalizations +} + +func (o ApplicationCommandOptionString) Validate() error { + return applicationCommandOptionValidator(o).Validate() } func (ApplicationCommandOptionString) applicationCommandOption() {} @@ -340,31 +324,23 @@ func (o ApplicationCommandOptionInt) OptionName() string { return o.Name } +func (o ApplicationCommandOptionInt) OptionNameLocalizations() map[Locale]string { + return o.NameLocalizations +} + func (o ApplicationCommandOptionInt) OptionDescription() string { return o.Description } -func (o ApplicationCommandOptionInt) Validate() (err error) { - err = validateOptionProps(o) - if err != nil { - return - } - choices := o.Choices - err = validate.Validate(validate.New(choices, - validate.SliceNoneNil[ApplicationCommandOptionChoiceInt], - validate.SliceMaxLen[ApplicationCommandOptionChoiceInt](ApplicationCommandOptionMaxChoices))) - if err != nil { - return - } - for _, choice := range choices { - err = validate.Validate( - validate.New(choice.Name, validate.Required[string], validate.StringRange(1, ApplicationCommandOptionChoiceNameMaxLength)), - validate.New(choice.Value, validate.Required[int])) - if err != nil { - return - } - } - return nil +func (o ApplicationCommandOptionInt) OptionDescriptionLocalizations() map[Locale]string { + return o.DescriptionLocalizations +} + +func (o ApplicationCommandOptionInt) Validate() error { + return validate.Validate( + applicationCommandOptionValidator(o), + validate.Value(o.MinValue, validate.NumberRangePtr[int](0, math.MaxInt32)), + ) } func (ApplicationCommandOptionInt) applicationCommandOption() {} @@ -397,12 +373,20 @@ func (o ApplicationCommandOptionBool) OptionName() string { return o.Name } +func (o ApplicationCommandOptionBool) OptionNameLocalizations() map[Locale]string { + return o.NameLocalizations +} + func (o ApplicationCommandOptionBool) OptionDescription() string { return o.Description } +func (o ApplicationCommandOptionBool) OptionDescriptionLocalizations() map[Locale]string { + return o.DescriptionLocalizations +} + func (o ApplicationCommandOptionBool) Validate() error { - return validateOptionProps(o) + return applicationCommandOptionValidator(o).Validate() } func (ApplicationCommandOptionBool) applicationCommandOption() {} @@ -435,12 +419,20 @@ func (o ApplicationCommandOptionUser) OptionName() string { return o.Name } +func (o ApplicationCommandOptionUser) OptionNameLocalizations() map[Locale]string { + return o.NameLocalizations +} + func (o ApplicationCommandOptionUser) OptionDescription() string { return o.Description } +func (o ApplicationCommandOptionUser) OptionDescriptionLocalizations() map[Locale]string { + return o.DescriptionLocalizations +} + func (o ApplicationCommandOptionUser) Validate() error { - return validateOptionProps(o) + return applicationCommandOptionValidator(o).Validate() } func (ApplicationCommandOptionUser) applicationCommandOption() {} @@ -474,12 +466,20 @@ func (o ApplicationCommandOptionChannel) OptionName() string { return o.Name } +func (o ApplicationCommandOptionChannel) OptionNameLocalizations() map[Locale]string { + return o.NameLocalizations +} + func (o ApplicationCommandOptionChannel) OptionDescription() string { - return o.Name + return o.Description +} + +func (o ApplicationCommandOptionChannel) OptionDescriptionLocalizations() map[Locale]string { + return o.DescriptionLocalizations } func (o ApplicationCommandOptionChannel) Validate() error { - return validateOptionProps(o) + return applicationCommandOptionValidator(o).Validate() } func (ApplicationCommandOptionChannel) applicationCommandOption() {} @@ -512,12 +512,20 @@ func (o ApplicationCommandOptionRole) OptionName() string { return o.Name } +func (o ApplicationCommandOptionRole) OptionNameLocalizations() map[Locale]string { + return o.NameLocalizations +} + func (o ApplicationCommandOptionRole) OptionDescription() string { - return o.Name + return o.Description +} + +func (o ApplicationCommandOptionRole) OptionDescriptionLocalizations() map[Locale]string { + return o.DescriptionLocalizations } func (o ApplicationCommandOptionRole) Validate() error { - return validateOptionProps(o) + return applicationCommandOptionValidator(o).Validate() } func (ApplicationCommandOptionRole) applicationCommandOption() {} @@ -550,12 +558,20 @@ func (o ApplicationCommandOptionMentionable) OptionName() string { return o.Name } +func (o ApplicationCommandOptionMentionable) OptionNameLocalizations() map[Locale]string { + return o.NameLocalizations +} + func (o ApplicationCommandOptionMentionable) OptionDescription() string { - return o.Name + return o.Description +} + +func (o ApplicationCommandOptionMentionable) OptionDescriptionLocalizations() map[Locale]string { + return o.DescriptionLocalizations } func (o ApplicationCommandOptionMentionable) Validate() error { - return validateOptionProps(o) + return applicationCommandOptionValidator(o).Validate() } func (ApplicationCommandOptionMentionable) applicationCommandOption() {} @@ -592,73 +608,31 @@ func (o ApplicationCommandOptionFloat) OptionName() string { return o.Name } -func (o ApplicationCommandOptionFloat) OptionDescription() string { - return o.Name -} - -func (o ApplicationCommandOptionFloat) Validate() (err error) { - err = validateOptionProps(o) - if err != nil { - return - } - choices := o.Choices - err = validate.Validate( - validate.New(choices, - validate.SliceNoneNil[ApplicationCommandOptionChoiceFloat], - validate.SliceMaxLen[ApplicationCommandOptionChoiceFloat](ApplicationCommandOptionMaxChoices))) - if err != nil { - return - } - for _, choice := range choices { - err = validate.Validate( - validate.New(choice.Name, validate.Required[string], validate.StringRange(1, ApplicationCommandOptionChoiceNameMaxLength)), - validate.New(choice.Value, validate.Required[float64])) - if err != nil { - return - } - } - return nil -} - -func (ApplicationCommandOptionFloat) applicationCommandOption() {} -func (ApplicationCommandOptionFloat) Type() ApplicationCommandOptionType { - return ApplicationCommandOptionTypeFloat +func (o ApplicationCommandOptionFloat) OptionNameLocalizations() map[Locale]string { + return o.NameLocalizations } -type ApplicationCommandOptionChoice interface { - applicationCommandOptionChoice() +func (o ApplicationCommandOptionFloat) OptionDescription() string { + return o.Description } -var _ ApplicationCommandOptionChoice = (*ApplicationCommandOptionChoiceInt)(nil) - -type ApplicationCommandOptionChoiceInt struct { - Name string `json:"name"` - NameLocalizations map[Locale]string `json:"name_localizations,omitempty"` - Value int `json:"value"` +func (o ApplicationCommandOptionFloat) OptionDescriptionLocalizations() map[Locale]string { + return o.DescriptionLocalizations } -func (ApplicationCommandOptionChoiceInt) applicationCommandOptionChoice() {} - -var _ ApplicationCommandOptionChoice = (*ApplicationCommandOptionChoiceString)(nil) - -type ApplicationCommandOptionChoiceString struct { - Name string `json:"name"` - NameLocalizations map[Locale]string `json:"name_localizations,omitempty"` - Value string `json:"value"` +func (o ApplicationCommandOptionFloat) Validate() error { + return validate.Validate( + applicationCommandOptionValidator(o), + validate.Value(o.Choices, validate.SliceNoneNil[ApplicationCommandOptionChoiceFloat], validate.SliceMaxLen[ApplicationCommandOptionChoiceFloat](ApplicationCommandOptionMaxChoices)), + validate.Slice(o.Choices), + ) } -func (ApplicationCommandOptionChoiceString) applicationCommandOptionChoice() {} - -var _ ApplicationCommandOptionChoice = (*ApplicationCommandOptionChoiceInt)(nil) - -type ApplicationCommandOptionChoiceFloat struct { - Name string `json:"name"` - NameLocalizations map[Locale]string `json:"name_localizations,omitempty"` - Value float64 `json:"value"` +func (ApplicationCommandOptionFloat) applicationCommandOption() {} +func (ApplicationCommandOptionFloat) Type() ApplicationCommandOptionType { + return ApplicationCommandOptionTypeFloat } -func (ApplicationCommandOptionChoiceFloat) applicationCommandOptionChoice() {} - type ApplicationCommandOptionAttachment struct { Name string `json:"name"` NameLocalizations map[Locale]string `json:"name_localizations,omitempty"` @@ -682,12 +656,20 @@ func (o ApplicationCommandOptionAttachment) OptionName() string { return o.Name } +func (o ApplicationCommandOptionAttachment) OptionNameLocalizations() map[Locale]string { + return o.NameLocalizations +} + func (o ApplicationCommandOptionAttachment) OptionDescription() string { - return o.Name + return o.Description +} + +func (o ApplicationCommandOptionAttachment) OptionDescriptionLocalizations() map[Locale]string { + return o.DescriptionLocalizations } func (o ApplicationCommandOptionAttachment) Validate() error { - return validateOptionProps(o) + return applicationCommandOptionValidator(o).Validate() } func (ApplicationCommandOptionAttachment) applicationCommandOption() {} @@ -695,17 +677,26 @@ func (ApplicationCommandOptionAttachment) Type() ApplicationCommandOptionType { return ApplicationCommandOptionTypeAttachment } -func validateOptionProps(o ApplicationCommandOption) error { - return validate.Validate( - validate.New(o.OptionName(), validate.Required[string], validate.StringRange(1, ApplicationCommandOptionNameMaxLength)), - validate.New(o.OptionDescription(), validate.Required[string], validate.StringRange(1, ApplicationCommandOptionDescriptionMaxLength))) +func applicationCommandOptionValidator(o ApplicationCommandOption) validate.Validator { + return validate.Combine( + validate.Value(o.OptionName(), validate.Required[string], validate.StringRange(1, ApplicationCommandOptionNameMaxLength)), + validate.Map(o.OptionNameLocalizations(), validateLocalizations(1, ApplicationCommandOptionNameMaxLength)), + validate.Value(o.OptionDescription(), validate.Required[string], validate.StringRange(1, ApplicationCommandOptionDescriptionMaxLength)), + validate.Map(o.OptionDescriptionLocalizations(), validateLocalizations(1, ApplicationCommandOptionDescriptionMaxLength)), + ) +} + +func validateLocalizations(valueMinLength int, valueMaxLength int) validate.MapValidateFunc[Locale, string] { + return func(k Locale, v string) error { + return validate.Validate( + validate.Value(k, validate.EnumInMapKeys(Locales)), + validate.Value(v, validate.Required[string], validate.StringRange(valueMinLength, valueMaxLength)), + ) + } } const ( ApplicationCommandOptionNameMaxLength = 32 ApplicationCommandOptionDescriptionMaxLength = 100 - - ApplicationCommandOptionMaxChoices = 25 - ApplicationCommandOptionChoiceNameMaxLength = 100 - ApplicationCommandOptionStringChoiceValueMaxLength = 100 + ApplicationCommandOptionMaxChoices = 25 ) diff --git a/discord/application_command_option_choice.go b/discord/application_command_option_choice.go new file mode 100644 index 00000000..a57c05af --- /dev/null +++ b/discord/application_command_option_choice.go @@ -0,0 +1,97 @@ +package discord + +import ( + "math" + + "github.com/disgoorg/validate" +) + +type ApplicationCommandOptionChoice interface { + ChoiceName() string + ChoiceNameLocalizations() map[Locale]string + validate.Validator + applicationCommandOptionChoice() +} + +var _ ApplicationCommandOptionChoice = (*ApplicationCommandOptionChoiceInt)(nil) + +type ApplicationCommandOptionChoiceInt struct { + Name string `json:"name"` + NameLocalizations map[Locale]string `json:"name_localizations,omitempty"` + Value int `json:"value"` +} + +func (ApplicationCommandOptionChoiceInt) applicationCommandOptionChoice() {} +func (c ApplicationCommandOptionChoiceInt) ChoiceName() string { + return c.Name +} +func (c ApplicationCommandOptionChoiceInt) ChoiceNameLocalizations() map[Locale]string { + return c.NameLocalizations +} +func (c ApplicationCommandOptionChoiceInt) Validate() error { + min := math.SmallestNonzeroFloat64 + max := math.MaxFloat64 + return validate.Validate( + validate.Value(c.Value, validate.NumberRange[int](int(min), int(max))), + applicationCommandOptionChoiceValidator(c), + ) +} + +var _ ApplicationCommandOptionChoice = (*ApplicationCommandOptionChoiceString)(nil) + +type ApplicationCommandOptionChoiceString struct { + Name string `json:"name"` + NameLocalizations map[Locale]string `json:"name_localizations,omitempty"` + Value string `json:"value"` +} + +func (ApplicationCommandOptionChoiceString) applicationCommandOptionChoice() {} + +func (c ApplicationCommandOptionChoiceString) ChoiceName() string { + return c.Name +} + +func (c ApplicationCommandOptionChoiceString) ChoiceNameLocalizations() map[Locale]string { + return c.NameLocalizations +} + +func (c ApplicationCommandOptionChoiceString) Validate() error { + return validate.Validate( + validate.Value(c.Value, validate.Required[string], validate.StringRange(1, ApplicationCommandOptionStringChoiceValueMaxLength)), + applicationCommandOptionChoiceValidator(c), + ) +} + +var _ ApplicationCommandOptionChoice = (*ApplicationCommandOptionChoiceInt)(nil) + +type ApplicationCommandOptionChoiceFloat struct { + Name string `json:"name"` + NameLocalizations map[Locale]string `json:"name_localizations,omitempty"` + Value float64 `json:"value"` +} + +func (ApplicationCommandOptionChoiceFloat) applicationCommandOptionChoice() {} + +func (c ApplicationCommandOptionChoiceFloat) ChoiceName() string { + return c.Name +} + +func (c ApplicationCommandOptionChoiceFloat) ChoiceNameLocalizations() map[Locale]string { + return c.NameLocalizations +} + +func (c ApplicationCommandOptionChoiceFloat) Validate() error { + return applicationCommandOptionChoiceValidator(c).Validate() +} + +func applicationCommandOptionChoiceValidator(c ApplicationCommandOptionChoice) validate.Validator { + return validate.Combine( + validate.Value(c.ChoiceName(), validate.Required[string], validate.StringRange(1, ApplicationCommandOptionChoiceNameMaxLength)), + validate.Map(c.ChoiceNameLocalizations(), validateLocalizations(1, ApplicationCommandOptionChoiceNameMaxLength)), + ) +} + +const ( + ApplicationCommandOptionChoiceNameMaxLength = 100 + ApplicationCommandOptionStringChoiceValueMaxLength = 100 +) diff --git a/discord/message_create.go b/discord/message_create.go index 776a7d00..aceec31a 100644 --- a/discord/message_create.go +++ b/discord/message_create.go @@ -2,6 +2,16 @@ package discord import ( "github.com/disgoorg/snowflake/v2" + "github.com/disgoorg/validate" +) + +const ( + MessageContentMaxLength = 2000 + MessageNonceMaxLength = 25 + MessageMaxEmbeds = 10 + MessageMaxComponents = 5 + MessageMaxStickers = 3 + MessageMaxFiles = 10 ) // MessageCreate is the struct to create a new Message with @@ -21,6 +31,24 @@ type MessageCreate struct { func (MessageCreate) interactionCallbackData() {} +func (m MessageCreate) Validate() error { + return validate.Validate( + validate.Value(m.Nonce, validate.StringRange(0, MessageNonceMaxLength)), + validate.Value(m.Content, validate.StringRange(0, MessageContentMaxLength)), + validate.Value(m.Embeds, validate.SliceMaxLen[Embed](MessageMaxEmbeds)), + validate.Slice(m.Embeds), + validate.Value(m.Components, validate.SliceMaxLen[ContainerComponent](MessageMaxComponents)), + validate.Slice(m.Components), + validate.Value(m.StickerIDs, validate.SliceMaxLen[snowflake.ID](MessageMaxStickers)), + validate.Slice(m.StickerIDs), + validate.Value(m.Files, validate.SliceMaxLen[*File](MessageMaxFiles)), + validate.Slice(m.Files), + validate.Value(m.Attachments, validate.SliceMaxLen[AttachmentCreate](MessageMaxFiles)), + validate.Slice(m.Attachments), + validate.Value(m.Flags, validate.AllowedFlags[MessageFlags](MessageFlagCrossposted, MessageFlagIsCrosspost, MessageFlagSuppressEmbeds, MessageFlagSourceMessageDeleted, MessageFlagUrgent)), + ) +} + // ToBody returns the MessageCreate ready for body func (m MessageCreate) ToBody() (any, error) { if len(m.Files) > 0 { diff --git a/go.mod b/go.mod index 68229929..ce611d98 100644 --- a/go.mod +++ b/go.mod @@ -1,15 +1,15 @@ module github.com/disgoorg/disgo -go 1.18 +go 1.20 require ( github.com/disgoorg/log v1.2.0 github.com/disgoorg/snowflake/v2 v2.0.0 - github.com/disgoorg/validate v0.0.0-20220815195220-efcff7601103 + github.com/disgoorg/validate v0.0.0-20221209173304-92bd15dea5d7 github.com/gorilla/websocket v1.5.0 github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b github.com/stretchr/testify v1.8.0 - golang.org/x/exp v0.0.0-20220325121720-054d8573a5d8 + golang.org/x/exp v0.0.0-20221208152030-732eee02a75a ) require ( diff --git a/go.sum b/go.sum index 84bf2b6a..49e66483 100644 --- a/go.sum +++ b/go.sum @@ -5,8 +5,10 @@ github.com/disgoorg/log v1.2.0 h1:sqlXnu/ZKAlIlHV9IO+dbMto7/hCQ474vlIdMWk8QKo= github.com/disgoorg/log v1.2.0/go.mod h1:3x1KDG6DI1CE2pDwi3qlwT3wlXpeHW/5rVay+1qDqOo= github.com/disgoorg/snowflake/v2 v2.0.0 h1:+xvyyDddXmXLHmiG8SZiQ3sdZdZPbUR22fSHoqwkrOA= github.com/disgoorg/snowflake/v2 v2.0.0/go.mod h1:SPU9c2CNn5DSyb86QcKtdZgix9osEtKrHLW4rMhfLCs= -github.com/disgoorg/validate v0.0.0-20220815195220-efcff7601103 h1:y6VMN4sJ8YQUFvTDG2K6gr0sOp+vnF7m4I0LnDsSxcw= -github.com/disgoorg/validate v0.0.0-20220815195220-efcff7601103/go.mod h1:Poy8FU7v7afr/qacLzuf/qQrtSmtlarMHXwvNxl+Wrs= +github.com/disgoorg/validate v0.0.0-20221208173314-b3ae0648c785 h1:9s3xryESQBYP0tz0pabauAizDK2VBjNzttY6D5d+gyg= +github.com/disgoorg/validate v0.0.0-20221208173314-b3ae0648c785/go.mod h1:5XrYwGGxWUAh655hu+6+a8nVhu+xN3MOgV7V2jdGZN4= +github.com/disgoorg/validate v0.0.0-20221209173304-92bd15dea5d7 h1:0MQmBBvksxA7dRotFkabOYjMnE94I7ramxRTMbdzO1s= +github.com/disgoorg/validate v0.0.0-20221209173304-92bd15dea5d7/go.mod h1:XpKGGd9bGTniM/9lgCeNdy4GO/rSbAZYPAf5fwS4ghI= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -20,6 +22,8 @@ github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PK github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= golang.org/x/exp v0.0.0-20220325121720-054d8573a5d8 h1:Xt4/LzbTwfocTk9ZLEu4onjeFucl88iW+v4j4PWbQuE= golang.org/x/exp v0.0.0-20220325121720-054d8573a5d8/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= +golang.org/x/exp v0.0.0-20221208152030-732eee02a75a h1:4iLhBPcpqFmylhnkbY3W0ONLUYYkDAW9xMFLfxgsvCw= +golang.org/x/exp v0.0.0-20221208152030-732eee02a75a/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=