Skip to content

Commit

Permalink
Add with_components param to webhook messages
Browse files Browse the repository at this point in the history
  • Loading branch information
sebm253 committed Jan 25, 2025
1 parent 25685c9 commit 6b677e8
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 28 deletions.
77 changes: 51 additions & 26 deletions rest/webhooks.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down Expand Up @@ -76,52 +112,41 @@ 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...)
}
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
}

Expand Down
4 changes: 2 additions & 2 deletions webhook/webhook_client_impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down

0 comments on commit 6b677e8

Please sign in to comment.