1
0
Fork 0
mirror of https://github.com/diamondburned/arikawa.git synced 2024-11-27 09:12:53 +00:00
arikawa/api/webhook.go

87 lines
2.7 KiB
Go
Raw Permalink Normal View History

2020-01-19 02:27:30 +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"
"github.com/diamondburned/arikawa/v3/utils/json/option"
2020-01-19 02:27:30 +00:00
)
var EndpointWebhooks = Endpoint + "webhooks/"
2020-01-19 02:27:30 +00:00
2020-05-11 22:06:19 +00:00
// https://discord.com/developers/docs/resources/webhook#create-webhook-json-params
type CreateWebhookData struct {
// Name is the name of the webhook (1-80 characters).
Name string `json:"name"`
// Avatar is the image for the default webhook avatar.
Avatar *Image `json:"avatar"`
}
// CreateWebhook creates a new webhook.
//
// Webhooks cannot be named "clyde".
//
// Requires the MANAGE_WEBHOOKS permission.
2020-01-19 02:27:30 +00:00
func (c *Client) CreateWebhook(
channelID discord.ChannelID, data CreateWebhookData) (*discord.Webhook, error) {
2020-01-19 02:27:30 +00:00
var w *discord.Webhook
return w, c.RequestJSON(
&w, "POST",
EndpointChannels+channelID.String()+"/webhooks",
httputil.WithJSONBody(data),
2020-01-19 02:27:30 +00:00
)
}
2020-05-12 03:26:09 +00:00
// ChannelWebhooks returns the webhooks of the channel with the given ID.
2020-05-11 22:06:19 +00:00
//
// Requires the MANAGE_WEBHOOKS permission.
func (c *Client) ChannelWebhooks(channelID discord.ChannelID) ([]discord.Webhook, error) {
2020-05-12 03:26:09 +00:00
var ws []discord.Webhook
return ws, c.RequestJSON(&ws, "GET", EndpointChannels+channelID.String()+"/webhooks")
}
// GuildWebhooks returns the webhooks of the guild with the given ID.
//
// Requires the MANAGE_WEBHOOKS permission.
func (c *Client) GuildWebhooks(guildID discord.GuildID) ([]discord.Webhook, error) {
2020-01-19 02:27:30 +00:00
var ws []discord.Webhook
2020-04-19 21:53:53 +00:00
return ws, c.RequestJSON(&ws, "GET", EndpointGuilds+guildID.String()+"/webhooks")
2020-01-19 02:27:30 +00:00
}
2020-05-11 22:06:19 +00:00
// Webhook returns the webhook with the given id.
func (c *Client) Webhook(webhookID discord.WebhookID) (*discord.Webhook, error) {
2020-01-19 02:27:30 +00:00
var w *discord.Webhook
2020-04-19 21:53:53 +00:00
return w, c.RequestJSON(&w, "GET", EndpointWebhooks+webhookID.String())
2020-01-19 02:27:30 +00:00
}
2020-05-11 22:06:19 +00:00
// https://discord.com/developers/docs/resources/webhook#modify-webhook-json-params
2020-01-19 02:27:30 +00:00
type ModifyWebhookData struct {
2020-05-11 22:06:19 +00:00
// Name is the default name of the webhook.
Name option.String `json:"name,omitempty"`
// Avatar is the image for the default webhook avatar.
Avatar *Image `json:"avatar,omitempty"`
// ChannelID is the new channel id this webhook should be moved to.
ChannelID discord.ChannelID `json:"channel_id,omitempty"`
2020-01-19 02:27:30 +00:00
}
2020-05-11 22:06:19 +00:00
// ModifyWebhook modifies a webhook.
//
// Requires the MANAGE_WEBHOOKS permission.
2020-01-19 02:27:30 +00:00
func (c *Client) ModifyWebhook(
webhookID discord.WebhookID, data ModifyWebhookData) (*discord.Webhook, error) {
2020-01-19 02:27:30 +00:00
var w *discord.Webhook
2020-05-11 22:06:19 +00:00
return w, c.RequestJSON(
&w, "PATCH",
EndpointWebhooks+webhookID.String(),
httputil.WithJSONBody(data),
)
2020-01-19 02:27:30 +00:00
}
2020-05-11 22:06:19 +00:00
// DeleteWebhook deletes a webhook permanently.
//
// Requires the MANAGE_WEBHOOKS permission.
func (c *Client) DeleteWebhook(webhookID discord.WebhookID) error {
2020-01-19 02:27:30 +00:00
return c.FastRequest("DELETE", EndpointWebhooks+webhookID.String())
}