diff --git a/rest/webhooks.go b/rest/webhooks.go index f4cfcb9b..6e343754 100644 --- a/rest/webhooks.go +++ b/rest/webhooks.go @@ -21,13 +21,49 @@ type Webhooks interface { UpdateWebhookWithToken(webhookID snowflake.ID, webhookToken string, webhookUpdate discord.WebhookUpdateWithToken, opts ...RequestOpt) (discord.Webhook, error) DeleteWebhookWithToken(webhookID snowflake.ID, webhookToken string, opts ...RequestOpt) error - CreateWebhookMessage(webhookID snowflake.ID, webhookToken string, messageCreate discord.WebhookMessageCreate, wait bool, threadID snowflake.ID, opts ...RequestOpt) (*discord.Message, error) - CreateWebhookMessageSlack(webhookID snowflake.ID, webhookToken string, messageCreate discord.Payload, wait bool, threadID snowflake.ID, opts ...RequestOpt) (*discord.Message, error) - CreateWebhookMessageGitHub(webhookID snowflake.ID, webhookToken string, messageCreate discord.Payload, wait bool, threadID snowflake.ID, opts ...RequestOpt) (*discord.Message, error) - UpdateWebhookMessage(webhookID snowflake.ID, webhookToken string, messageID snowflake.ID, messageUpdate discord.WebhookMessageUpdate, threadID snowflake.ID, opts ...RequestOpt) (*discord.Message, error) + CreateWebhookMessage(webhookID snowflake.ID, webhookToken string, messageCreate discord.WebhookMessageCreate, params CreateWebhookMessageParams, opts ...RequestOpt) (*discord.Message, error) + CreateWebhookMessageSlack(webhookID snowflake.ID, webhookToken string, messageCreate discord.Payload, params CreateWebhookMessageParams, opts ...RequestOpt) (*discord.Message, error) + CreateWebhookMessageGitHub(webhookID snowflake.ID, webhookToken string, messageCreate discord.Payload, params CreateWebhookMessageParams, opts ...RequestOpt) (*discord.Message, error) + UpdateWebhookMessage(webhookID snowflake.ID, webhookToken string, messageID snowflake.ID, messageUpdate discord.WebhookMessageUpdate, params UpdateWebhookMessageParams, opts ...RequestOpt) (*discord.Message, error) DeleteWebhookMessage(webhookID snowflake.ID, webhookToken string, messageID snowflake.ID, threadID snowflake.ID, opts ...RequestOpt) error } +type CreateWebhookMessageParams struct { + Wait bool + ThreadID snowflake.ID + WithComponents bool +} + +func (p CreateWebhookMessageParams) ToQueryValues() discord.QueryValues { + queryValues := discord.QueryValues{} + if p.Wait { + queryValues["wait"] = true + } + if p.ThreadID != 0 { + queryValues["thread_id"] = p.ThreadID + } + if p.WithComponents { + queryValues["with_components"] = true + } + return queryValues +} + +type UpdateWebhookMessageParams struct { + ThreadID snowflake.ID + WithComponents bool +} + +func (p UpdateWebhookMessageParams) ToQueryValues() discord.QueryValues { + queryValues := discord.QueryValues{} + if p.ThreadID != 0 { + queryValues["thread_id"] = p.ThreadID + } + if p.WithComponents { + queryValues["with_components"] = true + } + return queryValues +} + type webhookImpl struct { client Client } @@ -76,22 +112,15 @@ func (s *webhookImpl) DeleteWebhookWithToken(webhookID snowflake.ID, webhookToke return s.client.Do(DeleteWebhookWithToken.Compile(nil, webhookID, webhookToken), nil, nil, opts...) } -func (s *webhookImpl) createWebhookMessage(webhookID snowflake.ID, webhookToken string, messageCreate discord.Payload, wait bool, threadID snowflake.ID, endpoint *Endpoint, opts []RequestOpt) (message *discord.Message, err error) { - params := discord.QueryValues{} - if wait { - params["wait"] = true - } - if threadID != 0 { - params["thread_id"] = threadID - } - compiledEndpoint := endpoint.Compile(params, webhookID, webhookToken) +func (s *webhookImpl) createWebhookMessage(webhookID snowflake.ID, webhookToken string, messageCreate discord.Payload, params CreateWebhookMessageParams, endpoint *Endpoint, opts []RequestOpt) (message *discord.Message, err error) { + compiledEndpoint := endpoint.Compile(params.ToQueryValues(), webhookID, webhookToken) body, err := messageCreate.ToBody() if err != nil { return } - if wait { + if params.Wait { err = s.client.Do(compiledEndpoint, body, &message, opts...) } else { err = s.client.Do(compiledEndpoint, body, nil, opts...) @@ -99,29 +128,25 @@ func (s *webhookImpl) createWebhookMessage(webhookID snowflake.ID, webhookToken return } -func (s *webhookImpl) CreateWebhookMessage(webhookID snowflake.ID, webhookToken string, messageCreate discord.WebhookMessageCreate, wait bool, threadID snowflake.ID, opts ...RequestOpt) (*discord.Message, error) { - return s.createWebhookMessage(webhookID, webhookToken, messageCreate, wait, threadID, CreateWebhookMessage, opts) +func (s *webhookImpl) CreateWebhookMessage(webhookID snowflake.ID, webhookToken string, messageCreate discord.WebhookMessageCreate, params CreateWebhookMessageParams, opts ...RequestOpt) (*discord.Message, error) { + return s.createWebhookMessage(webhookID, webhookToken, messageCreate, params, CreateWebhookMessage, opts) } -func (s *webhookImpl) CreateWebhookMessageSlack(webhookID snowflake.ID, webhookToken string, messageCreate discord.Payload, wait bool, threadID snowflake.ID, opts ...RequestOpt) (*discord.Message, error) { - return s.createWebhookMessage(webhookID, webhookToken, messageCreate, wait, threadID, CreateWebhookMessageSlack, opts) +func (s *webhookImpl) CreateWebhookMessageSlack(webhookID snowflake.ID, webhookToken string, messageCreate discord.Payload, params CreateWebhookMessageParams, opts ...RequestOpt) (*discord.Message, error) { + return s.createWebhookMessage(webhookID, webhookToken, messageCreate, params, CreateWebhookMessageSlack, opts) } -func (s *webhookImpl) CreateWebhookMessageGitHub(webhookID snowflake.ID, webhookToken string, messageCreate discord.Payload, wait bool, threadID snowflake.ID, opts ...RequestOpt) (*discord.Message, error) { - return s.createWebhookMessage(webhookID, webhookToken, messageCreate, wait, threadID, CreateWebhookMessageGitHub, opts) +func (s *webhookImpl) CreateWebhookMessageGitHub(webhookID snowflake.ID, webhookToken string, messageCreate discord.Payload, params CreateWebhookMessageParams, opts ...RequestOpt) (*discord.Message, error) { + return s.createWebhookMessage(webhookID, webhookToken, messageCreate, params, CreateWebhookMessageGitHub, opts) } -func (s *webhookImpl) UpdateWebhookMessage(webhookID snowflake.ID, webhookToken string, messageID snowflake.ID, messageUpdate discord.WebhookMessageUpdate, threadID snowflake.ID, opts ...RequestOpt) (message *discord.Message, err error) { - params := discord.QueryValues{} - if threadID != 0 { - params["thread_id"] = threadID - } +func (s *webhookImpl) UpdateWebhookMessage(webhookID snowflake.ID, webhookToken string, messageID snowflake.ID, messageUpdate discord.WebhookMessageUpdate, params UpdateWebhookMessageParams, opts ...RequestOpt) (message *discord.Message, err error) { body, err := messageUpdate.ToBody() if err != nil { return } - err = s.client.Do(UpdateWebhookMessage.Compile(params, webhookID, webhookToken, messageID), body, &message, opts...) + err = s.client.Do(UpdateWebhookMessage.Compile(params.ToQueryValues(), webhookID, webhookToken, messageID), body, &message, opts...) return } diff --git a/webhook/webhook_client_impl.go b/webhook/webhook_client_impl.go index 2a85d138..8385d659 100644 --- a/webhook/webhook_client_impl.go +++ b/webhook/webhook_client_impl.go @@ -93,7 +93,7 @@ func (c *clientImpl) DeleteWebhook(opts ...rest.RequestOpt) error { } func (c *clientImpl) CreateMessageInThread(messageCreate discord.WebhookMessageCreate, threadID snowflake.ID, opts ...rest.RequestOpt) (*discord.Message, error) { - return c.Rest().CreateWebhookMessage(c.id, c.token, messageCreate, true, threadID, opts...) + return c.Rest().CreateWebhookMessage(c.id, c.token, messageCreate, rest.CreateWebhookMessageParams{Wait: true, ThreadID: threadID}, opts...) } func (c *clientImpl) CreateMessage(messageCreate discord.WebhookMessageCreate, opts ...rest.RequestOpt) (*discord.Message, error) { @@ -113,7 +113,7 @@ func (c *clientImpl) UpdateMessage(messageID snowflake.ID, messageUpdate discord } func (c *clientImpl) UpdateMessageInThread(messageID snowflake.ID, messageUpdate discord.WebhookMessageUpdate, threadID snowflake.ID, opts ...rest.RequestOpt) (*discord.Message, error) { - return c.Rest().UpdateWebhookMessage(c.id, c.token, messageID, messageUpdate, threadID, opts...) + return c.Rest().UpdateWebhookMessage(c.id, c.token, messageID, messageUpdate, rest.UpdateWebhookMessageParams{ThreadID: threadID}, opts...) } func (c *clientImpl) UpdateContent(messageID snowflake.ID, content string, opts ...rest.RequestOpt) (*discord.Message, error) {