package twitch import ( "bytes" "context" "encoding/json" "fmt" "net/http" "net/url" "strings" "github.com/pkg/errors" ) // SendChatAnnouncement sends an announcement in the specified // channel with the given message. Colors must be blue, green, // orange, purple or primary (empty color = primary) func (c *Client) SendChatAnnouncement(channel, color, message string) error { var payload struct { Color string `json:"color,omitempty"` Message string `json:"message"` } payload.Color = color payload.Message = message botID, _, err := c.GetAuthorizedUser() if err != nil { return errors.Wrap(err, "getting bot user-id") } channelID, err := c.GetIDForUsername(strings.TrimLeft(channel, "#@")) if err != nil { return errors.Wrap(err, "getting channel user-id") } body := new(bytes.Buffer) if err = json.NewEncoder(body).Encode(payload); err != nil { return errors.Wrap(err, "encoding payload") } return errors.Wrap( c.request(clientRequestOpts{ AuthType: authTypeBearerToken, Context: context.Background(), Method: http.MethodPost, OKStatus: http.StatusNoContent, Body: body, URL: fmt.Sprintf( "https://api.twitch.tv/helix/chat/announcements?broadcaster_id=%s&moderator_id=%s", channelID, botID, ), }), "executing request", ) } // SendShoutout creates a Twitch-native shoutout in the given channel // for the given user. This equals `/shoutout ` in the channel. func (c *Client) SendShoutout(channel, user string) error { botID, _, err := c.GetAuthorizedUser() if err != nil { return errors.Wrap(err, "getting bot user-id") } channelID, err := c.GetIDForUsername(strings.TrimLeft(channel, "#@")) if err != nil { return errors.Wrap(err, "getting channel user-id") } userID, err := c.GetIDForUsername(strings.TrimLeft(user, "#@")) if err != nil { return errors.Wrap(err, "getting user user-id") } params := make(url.Values) params.Set("from_broadcaster_id", channelID) params.Set("moderator_id", botID) params.Set("to_broadcaster_id", userID) return errors.Wrap( c.request(clientRequestOpts{ AuthType: authTypeBearerToken, Context: context.Background(), Method: http.MethodPost, OKStatus: http.StatusNoContent, URL: fmt.Sprintf( "https://api.twitch.tv/helix/chat/shoutouts?%s", params.Encode(), ), }), "executing request", ) }