2021-01-27 17:43:38 +00:00
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
2021-06-02 02:53:19 +00:00
|
|
|
"github.com/diamondburned/arikawa/v3/discord"
|
|
|
|
"github.com/diamondburned/arikawa/v3/utils/httputil"
|
2021-01-27 17:43:38 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
var EndpointApplications = Endpoint + "applications/"
|
|
|
|
|
2021-08-03 18:44:20 +00:00
|
|
|
// https://discord.com/developers/docs/interactions/slash-commands#create-global-application-command-json-params
|
2021-01-27 17:43:38 +00:00
|
|
|
type CreateCommandData struct {
|
|
|
|
Name string `json:"name"`
|
|
|
|
Description string `json:"description"`
|
|
|
|
Options []discord.CommandOption `json:"options"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) Commands(appID discord.AppID) ([]discord.Command, error) {
|
|
|
|
var cmds []discord.Command
|
|
|
|
return cmds, c.RequestJSON(
|
|
|
|
&cmds, "GET",
|
|
|
|
EndpointApplications+appID.String()+"/commands",
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) Command(
|
|
|
|
appID discord.AppID, commandID discord.CommandID) ([]discord.Command, error) {
|
|
|
|
|
|
|
|
var cmds []discord.Command
|
|
|
|
return cmds, c.RequestJSON(
|
|
|
|
&cmds, "GET",
|
|
|
|
EndpointApplications+appID.String()+"/commands/"+commandID.String(),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) CreateCommand(
|
|
|
|
appID discord.AppID, data CreateCommandData) (*discord.Command, error) {
|
|
|
|
|
|
|
|
var cmd *discord.Command
|
|
|
|
return cmd, c.RequestJSON(
|
|
|
|
&cmd, "POST",
|
|
|
|
EndpointApplications+appID.String()+"/commands",
|
|
|
|
httputil.WithJSONBody(data),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) EditCommand(
|
|
|
|
appID discord.AppID,
|
|
|
|
commandID discord.CommandID, data CreateCommandData) (*discord.Command, error) {
|
|
|
|
|
|
|
|
var cmd *discord.Command
|
|
|
|
return cmd, c.RequestJSON(
|
|
|
|
&cmd, "PATCH",
|
|
|
|
EndpointApplications+appID.String()+"/commands/"+commandID.String(),
|
|
|
|
httputil.WithJSONBody(data),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) DeleteCommand(appID discord.AppID, commandID discord.CommandID) error {
|
|
|
|
return c.FastRequest(
|
|
|
|
"DELETE",
|
|
|
|
EndpointApplications+appID.String()+"/commands/"+commandID.String(),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2021-08-03 18:44:20 +00:00
|
|
|
// BulkOverwriteCommands takes a slice of application commands, overwriting
|
|
|
|
// existing commands that are registered globally for this application. Updates
|
|
|
|
// will be available in all guilds after 1 hour.
|
|
|
|
//
|
|
|
|
// Commands that do not already exist will count toward daily application
|
|
|
|
// command create limits.
|
|
|
|
func (c *Client) BulkOverwriteCommands(
|
|
|
|
appID discord.AppID, commands []discord.Command) ([]discord.Command, error) {
|
|
|
|
|
|
|
|
var cmds []discord.Command
|
|
|
|
return cmds, c.RequestJSON(
|
|
|
|
&cmds, "PUT",
|
|
|
|
EndpointApplications+appID.String()+"/commands",
|
|
|
|
httputil.WithJSONBody(commands))
|
|
|
|
}
|
|
|
|
|
2021-01-27 17:43:38 +00:00
|
|
|
func (c *Client) GuildCommands(
|
|
|
|
appID discord.AppID, guildID discord.GuildID) ([]discord.Command, error) {
|
|
|
|
|
|
|
|
var cmds []discord.Command
|
|
|
|
return cmds, c.RequestJSON(
|
|
|
|
&cmds, "GET",
|
|
|
|
EndpointApplications+appID.String()+"/guilds/"+guildID.String()+"/commands",
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) GuildCommand(
|
|
|
|
appID discord.AppID,
|
|
|
|
guildID discord.GuildID,
|
|
|
|
commandID discord.CommandID) ([]discord.Command, error) {
|
|
|
|
|
|
|
|
var cmds []discord.Command
|
|
|
|
return cmds, c.RequestJSON(
|
|
|
|
&cmds, "GET",
|
|
|
|
EndpointApplications+appID.String()+
|
|
|
|
"/guilds/"+guildID.String()+
|
|
|
|
"/commands/"+commandID.String(),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) CreateGuildCommand(
|
|
|
|
appID discord.AppID,
|
|
|
|
guildID discord.GuildID, data CreateCommandData) (*discord.Command, error) {
|
|
|
|
|
|
|
|
var cmd *discord.Command
|
|
|
|
return cmd, c.RequestJSON(
|
|
|
|
&cmd, "POST",
|
|
|
|
EndpointApplications+appID.String()+"/guilds/"+guildID.String()+"/commands",
|
|
|
|
httputil.WithJSONBody(data),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) EditGuildCommand(
|
|
|
|
appID discord.AppID,
|
|
|
|
guildID discord.GuildID,
|
|
|
|
commandID discord.CommandID, data CreateCommandData) (*discord.Command, error) {
|
|
|
|
|
|
|
|
var cmd *discord.Command
|
|
|
|
return cmd, c.RequestJSON(
|
|
|
|
&cmd, "PATCH",
|
|
|
|
EndpointApplications+appID.String()+
|
|
|
|
"/guilds/"+guildID.String()+
|
|
|
|
"/commands/"+commandID.String(),
|
|
|
|
httputil.WithJSONBody(data),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) DeleteGuildCommand(
|
|
|
|
appID discord.AppID, guildID discord.GuildID, commandID discord.CommandID) error {
|
|
|
|
|
|
|
|
return c.FastRequest(
|
|
|
|
"DELETE",
|
|
|
|
EndpointApplications+appID.String()+
|
|
|
|
"/guilds/"+guildID.String()+
|
|
|
|
"/commands/"+commandID.String(),
|
|
|
|
)
|
|
|
|
}
|
2021-08-03 18:44:20 +00:00
|
|
|
|
|
|
|
// BulkOverwriteGuildCommands takes a slice of application commands,
|
|
|
|
// overwriting existing commands that are registered for the guild.
|
|
|
|
func (c *Client) BulkOverwriteGuildCommands(
|
|
|
|
appID discord.AppID,
|
|
|
|
guildID discord.GuildID, commands []discord.Command) ([]discord.Command, error) {
|
|
|
|
|
|
|
|
var cmds []discord.Command
|
|
|
|
return cmds, c.RequestJSON(
|
|
|
|
&cmds, "PUT",
|
|
|
|
EndpointApplications+appID.String()+"/guilds/"+guildID.String()+"/commands",
|
|
|
|
httputil.WithJSONBody(commands))
|
|
|
|
}
|
|
|
|
|
|
|
|
// GuildCommandPermissions fetches command permissions for all commands for the
|
|
|
|
// application in a guild.
|
|
|
|
func (c *Client) GuildCommandPermissions(
|
|
|
|
appID discord.AppID, guildID discord.GuildID) ([]discord.GuildCommandPermissions, error) {
|
|
|
|
|
|
|
|
var perms []discord.GuildCommandPermissions
|
|
|
|
return perms, c.RequestJSON(
|
|
|
|
&perms, "GET",
|
|
|
|
EndpointApplications+appID.String()+"/guilds/"+guildID.String()+"/commands/permissions",
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
// CommandPermissions fetches command permissions for a specific command for
|
|
|
|
// the application in a guild.
|
|
|
|
func (c *Client) CommandPermissions(
|
|
|
|
appID discord.AppID, guildID discord.GuildID,
|
|
|
|
commandID discord.CommandID) (discord.GuildCommandPermissions, error) {
|
|
|
|
|
|
|
|
var perms discord.GuildCommandPermissions
|
|
|
|
return perms, c.RequestJSON(
|
|
|
|
&perms, "GET",
|
|
|
|
EndpointApplications+appID.String()+"/guilds/"+guildID.String()+
|
|
|
|
"/commands/"+commandID.String()+"/permissions",
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
type editCommandPermissionsData struct {
|
|
|
|
Permissions []discord.CommandPermissions `json:"permissions"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// EditCommandPermissions edits command permissions for a specific command for
|
|
|
|
// the application in a guild. Up to 10 permission overwrites can be added for
|
|
|
|
// a command.
|
|
|
|
//
|
|
|
|
// Existing permissions for the command will be overwritten in that guild.
|
|
|
|
// Deleting or renaming a command will permanently delete all permissions for
|
|
|
|
// that command.
|
|
|
|
func (c *Client) EditCommandPermissions(
|
|
|
|
appID discord.AppID, guildID discord.GuildID, commandID discord.CommandID,
|
|
|
|
permissions []discord.CommandPermissions) (discord.GuildCommandPermissions, error) {
|
|
|
|
|
|
|
|
data := editCommandPermissionsData{Permissions: permissions}
|
|
|
|
|
|
|
|
var perms discord.GuildCommandPermissions
|
|
|
|
return perms, c.RequestJSON(
|
|
|
|
&perms, "PUT",
|
|
|
|
EndpointApplications+appID.String()+"/guilds/"+guildID.String()+
|
|
|
|
"/commands/"+commandID.String()+"/permissions",
|
|
|
|
httputil.WithJSONBody(data),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
// https://discord.com/developers/docs/interactions/slash-commands#application-command-permissions-object-guild-application-command-permissions-structure
|
|
|
|
type BatchEditCommandPermissionsData struct {
|
|
|
|
ID discord.CommandID `json:"id"`
|
|
|
|
Permissions []discord.CommandPermissions `json:"permissions"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// BatchEditCommandPermissions batch edits permissions for all commands in a
|
|
|
|
// guild. Up to 10 permission overwrites can be added for a command.
|
|
|
|
//
|
|
|
|
// Existing permissions for the command will be overwritten in that guild.
|
|
|
|
// Deleting or renaming a command will permanently delete all permissions for
|
|
|
|
// that command.
|
|
|
|
func (c *Client) BatchEditCommandPermissions(
|
|
|
|
appID discord.AppID, guildID discord.GuildID,
|
|
|
|
data []BatchEditCommandPermissionsData) ([]discord.GuildCommandPermissions, error) {
|
|
|
|
|
|
|
|
var perms []discord.GuildCommandPermissions
|
|
|
|
return perms, c.RequestJSON(
|
|
|
|
&perms, "PUT",
|
|
|
|
EndpointApplications+appID.String()+"/guilds/"+guildID.String()+"/commands/permissions",
|
|
|
|
httputil.WithJSONBody(data),
|
|
|
|
)
|
|
|
|
}
|