Skip to content

Commit

Permalink
Merge pull request #118 from DisgoOrg/feature/attachment-option-type
Browse files Browse the repository at this point in the history
add attachment option type
  • Loading branch information
topi314 authored Feb 9, 2022
2 parents d3fb97b + 78e4d02 commit 80dc9ee
Showing 7 changed files with 131 additions and 92 deletions.
44 changes: 13 additions & 31 deletions _examples/test/commands.go
Original file line number Diff line number Diff line change
@@ -46,6 +46,18 @@ var commands = []discord.ApplicationCommandCreate{
},
},
},
discord.SlashCommandCreate{
Name: "attachment-test",
Description: "test attachment upload",
Options: []discord.ApplicationCommandOption{
discord.ApplicationCommandOptionAttachment{
Name: "test",
Description: "test attachment",
Required: true,
},
},
DefaultPermission: true,
},
discord.SlashCommandCreate{
Name: "addrole",
Description: "This command adds a role to a member",
@@ -107,37 +119,7 @@ var commands = []discord.ApplicationCommandCreate{
}

func registerCommands(bot *core.Bot) {
cmds, err := bot.SetGuildCommands(guildID, commands)
if err != nil {
if _, err := bot.SetGuildCommands(guildID, commands); err != nil {
log.Fatalf("error while registering guild commands: %s", err)
}

var cmdsPermissions []discord.ApplicationCommandPermissionsSet
for _, cmd := range cmds {
var perms discord.ApplicationCommandPermission
if c, ok := cmd.(core.SlashCommand); ok {
if c.Name == "eval" {
perms = discord.ApplicationCommandPermissionRole{
RoleID: adminRoleID,
Permission: true,
}
} else {
perms = discord.ApplicationCommandPermissionRole{
RoleID: testRoleID,
Permission: true,
}
cmdsPermissions = append(cmdsPermissions, discord.ApplicationCommandPermissionsSet{
ID: c.ID(),
Permissions: []discord.ApplicationCommandPermission{perms},
})
}
cmdsPermissions = append(cmdsPermissions, discord.ApplicationCommandPermissionsSet{
ID: c.ID(),
Permissions: []discord.ApplicationCommandPermission{perms},
})
}
}
if _, err = bot.SetGuildCommandsPermissions(guildID, cmdsPermissions); err != nil {
log.Fatalf("error while setting command permissions: %s", err)
}
}
9 changes: 5 additions & 4 deletions core/application_command_interaction.go
Original file line number Diff line number Diff line change
@@ -56,10 +56,11 @@ func (i SlashCommandInteractionData) CommandPath() string {

// SlashCommandResolved contains resolved mention data for SlashCommand(s)
type SlashCommandResolved struct {
Users map[snowflake.Snowflake]*User
Members map[snowflake.Snowflake]*Member
Roles map[snowflake.Snowflake]*Role
Channels map[snowflake.Snowflake]Channel
Users map[snowflake.Snowflake]*User
Members map[snowflake.Snowflake]*Member
Roles map[snowflake.Snowflake]*Role
Channels map[snowflake.Snowflake]Channel
Attachments map[snowflake.Snowflake]discord.Attachment
}

type UserCommandInteractionData struct {
6 changes: 6 additions & 0 deletions core/entity_builder.go
Original file line number Diff line number Diff line change
@@ -194,6 +194,12 @@ func (b *entityBuilderImpl) CreateInteraction(interaction discord.Interaction, c
SlashCommandOptionFloat: o,
}

case discord.SlashCommandOptionAttachment:
slashCommandOption = SlashCommandOptionAttachment{
SlashCommandOptionAttachment: o,
Resolved: data.Resolved,
}

default:
b.Bot().Logger.Errorf("unknown slash command option with type %d received", option.Type())
continue
9 changes: 9 additions & 0 deletions core/slash_command_option.go
Original file line number Diff line number Diff line change
@@ -138,6 +138,15 @@ type SlashCommandOptionFloat struct {
discord.SlashCommandOptionFloat
}

type SlashCommandOptionAttachment struct {
discord.SlashCommandOptionAttachment
Resolved *SlashCommandResolved
}

func (o SlashCommandOptionAttachment) Attachment() discord.Attachment {
return o.Resolved.Attachments[o.Value]
}

type SlashCommandOptionsMap map[string]SlashCommandOption

func (m SlashCommandOptionsMap) Get(name string) SlashCommandOption {
48 changes: 30 additions & 18 deletions discord/application_command_autocomplete_option.go
Original file line number Diff line number Diff line change
@@ -125,6 +125,7 @@ func (o *AutocompleteOptionSubCommand) UnmarshalJSON(data []byte) error {
return nil
}

func (AutocompleteOptionSubCommand) autocompleteOption() {}
func (AutocompleteOptionSubCommand) Type() ApplicationCommandOptionType {
return ApplicationCommandOptionTypeSubCommand
}
@@ -137,8 +138,6 @@ func (o AutocompleteOptionSubCommand) Focused() bool {
return false
}

func (AutocompleteOptionSubCommand) autocompleteOption() {}

var _ AutocompleteOption = (*AutocompleteOptionSubCommandGroup)(nil)

type AutocompleteOptionSubCommandGroup struct {
@@ -147,6 +146,7 @@ type AutocompleteOptionSubCommandGroup struct {
Options []AutocompleteOptionSubCommand `json:"options,omitempty"`
}

func (AutocompleteOptionSubCommandGroup) autocompleteOption() {}
func (AutocompleteOptionSubCommandGroup) Type() ApplicationCommandOptionType {
return ApplicationCommandOptionTypeSubCommandGroup
}
@@ -159,8 +159,6 @@ func (o AutocompleteOptionSubCommandGroup) Focused() bool {
return false
}

func (AutocompleteOptionSubCommandGroup) autocompleteOption() {}

var _ AutocompleteOption = (*AutocompleteOptionString)(nil)

type AutocompleteOptionString struct {
@@ -169,6 +167,7 @@ type AutocompleteOptionString struct {
OptionFocused bool `json:"focused"`
}

func (AutocompleteOptionString) autocompleteOption() {}
func (AutocompleteOptionString) Type() ApplicationCommandOptionType {
return ApplicationCommandOptionTypeString
}
@@ -181,8 +180,6 @@ func (o AutocompleteOptionString) Focused() bool {
return o.OptionFocused
}

func (AutocompleteOptionString) autocompleteOption() {}

var _ AutocompleteOption = (*AutocompleteOptionInt)(nil)

type AutocompleteOptionInt struct {
@@ -191,6 +188,7 @@ type AutocompleteOptionInt struct {
OptionFocused bool `json:"focused"`
}

func (AutocompleteOptionInt) autocompleteOption() {}
func (AutocompleteOptionInt) Type() ApplicationCommandOptionType {
return ApplicationCommandOptionTypeInt
}
@@ -203,8 +201,6 @@ func (o AutocompleteOptionInt) Focused() bool {
return o.OptionFocused
}

func (AutocompleteOptionInt) autocompleteOption() {}

var _ AutocompleteOption = (*AutocompleteOptionBool)(nil)

type AutocompleteOptionBool struct {
@@ -213,6 +209,7 @@ type AutocompleteOptionBool struct {
OptionFocused bool `json:"focused"`
}

func (AutocompleteOptionBool) autocompleteOption() {}
func (AutocompleteOptionBool) Type() ApplicationCommandOptionType {
return ApplicationCommandOptionTypeBool
}
@@ -225,8 +222,6 @@ func (o AutocompleteOptionBool) Focused() bool {
return o.OptionFocused
}

func (AutocompleteOptionBool) autocompleteOption() {}

var _ AutocompleteOption = (*AutocompleteOptionUser)(nil)

type AutocompleteOptionUser struct {
@@ -235,6 +230,7 @@ type AutocompleteOptionUser struct {
OptionFocused bool `json:"focused"`
}

func (AutocompleteOptionUser) autocompleteOption() {}
func (AutocompleteOptionUser) Type() ApplicationCommandOptionType {
return ApplicationCommandOptionTypeUser
}
@@ -247,8 +243,6 @@ func (o AutocompleteOptionUser) Focused() bool {
return o.OptionFocused
}

func (AutocompleteOptionUser) autocompleteOption() {}

var _ AutocompleteOption = (*AutocompleteOptionChannel)(nil)

type AutocompleteOptionChannel struct {
@@ -257,6 +251,7 @@ type AutocompleteOptionChannel struct {
OptionFocused bool `json:"focused"`
}

func (AutocompleteOptionChannel) autocompleteOption() {}
func (AutocompleteOptionChannel) Type() ApplicationCommandOptionType {
return ApplicationCommandOptionTypeChannel
}
@@ -269,8 +264,6 @@ func (o AutocompleteOptionChannel) Focused() bool {
return o.OptionFocused
}

func (AutocompleteOptionChannel) autocompleteOption() {}

var _ AutocompleteOption = (*AutocompleteOptionRole)(nil)

type AutocompleteOptionRole struct {
@@ -279,6 +272,7 @@ type AutocompleteOptionRole struct {
OptionFocused bool `json:"focused"`
}

func (AutocompleteOptionRole) autocompleteOption() {}
func (AutocompleteOptionRole) Type() ApplicationCommandOptionType {
return ApplicationCommandOptionTypeRole
}
@@ -291,8 +285,6 @@ func (o AutocompleteOptionRole) Focused() bool {
return o.OptionFocused
}

func (AutocompleteOptionRole) autocompleteOption() {}

var _ AutocompleteOption = (*AutocompleteOptionMentionable)(nil)

type AutocompleteOptionMentionable struct {
@@ -301,6 +293,7 @@ type AutocompleteOptionMentionable struct {
OptionFocused bool `json:"focused"`
}

func (AutocompleteOptionMentionable) autocompleteOption() {}
func (AutocompleteOptionMentionable) Type() ApplicationCommandOptionType {
return ApplicationCommandOptionTypeMentionable
}
@@ -313,8 +306,6 @@ func (o AutocompleteOptionMentionable) Focused() bool {
return o.OptionFocused
}

func (AutocompleteOptionMentionable) autocompleteOption() {}

var _ AutocompleteOption = (*AutocompleteOptionFloat)(nil)

type AutocompleteOptionFloat struct {
@@ -336,3 +327,24 @@ func (o AutocompleteOptionFloat) Focused() bool {
}

func (AutocompleteOptionFloat) autocompleteOption() {}

var _ AutocompleteOption = (*AutocompleteOptionAttachment)(nil)

type AutocompleteOptionAttachment struct {
OptionName string `json:"name"`
Value snowflake.Snowflake `json:"value"`
OptionFocused bool `json:"focused"`
}

func (AutocompleteOptionAttachment) autocompleteOption() {}
func (AutocompleteOptionAttachment) Type() ApplicationCommandOptionType {
return ApplicationCommandOptionTypeFloat
}

func (o AutocompleteOptionAttachment) Name() string {
return o.OptionName
}

func (o AutocompleteOptionAttachment) Focused() bool {
return o.OptionFocused
}
Loading

0 comments on commit 80dc9ee

Please sign in to comment.