Documentation ¶
Overview ¶
Package twitch implements a client for the Twitch APIs
Index ¶
- Constants
- Variables
- func ValidateStatus(opts ClientRequestOpts, resp *http.Response) error
- type APICache
- type AuthType
- type BadgeCollection
- type Category
- type ChannelStreamSchedule
- type ChannelStreamScheduleSegment
- type Client
- func (c *Client) APICache() *APICache
- func (c *Client) AddChannelVIP(ctx context.Context, channel, userName string) error
- func (c *Client) BanUser(ctx context.Context, channel, username string, duration time.Duration, ...) error
- func (c *Client) CreateClip(ctx context.Context, channel string, addDelay bool) (ccr CreateClipResponse, err error)
- func (c *Client) DeleteMessage(ctx context.Context, channel, messageID string) error
- func (c *Client) GetAuthorizedUser(ctx context.Context) (userID string, userName string, err error)
- func (c *Client) GetBroadcasterSubscriptionCount(ctx context.Context, broadcasterName string) (subCount, subPoints int64, err error)
- func (c *Client) GetChannelStreamSchedule(ctx context.Context, channel string) (*ChannelStreamSchedule, error)
- func (c *Client) GetClipByID(ctx context.Context, clipID string) (ClipInfo, error)
- func (c *Client) GetCurrentStreamInfo(ctx context.Context, username string) (*StreamInfo, error)
- func (c *Client) GetDisplayNameForUser(ctx context.Context, username string) (string, error)
- func (c *Client) GetFollowDate(ctx context.Context, from, to string) (time.Time, error)
- func (c *Client) GetIDForUsername(ctx context.Context, username string) (string, error)
- func (c *Client) GetLatestPoll(ctx context.Context, channel string) (*PollInfo, error)
- func (c *Client) GetRecentStreamInfo(ctx context.Context, username string) (category string, title string, err error)
- func (c *Client) GetToken(ctx context.Context) (string, error)
- func (c *Client) GetTokenInfo(ctx context.Context) (user string, scopes []string, expiresAt time.Time, err error)
- func (c *Client) GetTwitchAppAccessToken(ctx context.Context) (string, error)
- func (c *Client) GetUserInformation(ctx context.Context, user string) (*User, error)
- func (c *Client) GetUsernameForID(ctx context.Context, id string) (string, error)
- func (c *Client) HasLiveStream(ctx context.Context, username string) (bool, error)
- func (c *Client) ModifyChannelInformation(ctx context.Context, channel string, category, title *string) error
- func (c *Client) RefreshToken(ctx context.Context) error
- func (c *Client) RemoveChannelVIP(ctx context.Context, channel, userName string) error
- func (c *Client) Request(ctx context.Context, opts ClientRequestOpts) error
- func (c *Client) RunCommercial(ctx context.Context, channel string, duration int64) error
- func (c *Client) SearchCategories(ctx context.Context, name string) ([]Category, error)
- func (c *Client) SendChatAnnouncement(ctx context.Context, channel, color, message string) error
- func (c *Client) SendShoutout(ctx context.Context, channel, user string) error
- func (c *Client) SendWhisper(ctx context.Context, toUser, message string) error
- func (c *Client) SetTokenUpdateHook(f func(string, string) error)
- func (c *Client) UnbanUser(ctx context.Context, channel, username string) error
- func (c *Client) UpdateShieldMode(ctx context.Context, channel string, enable bool) error
- func (c *Client) UpdateToken(accessToken, refreshToken string)
- func (c *Client) ValidateToken(ctx context.Context, force bool) error
- type ClientRequestOpts
- type ClipInfo
- type CreateClipResponse
- type ErrorResponse
- type EventSubCondition
- type EventSubEventAdBreakBegin
- type EventSubEventChannelPointCustomRewardRedemptionAdd
- type EventSubEventChannelUpdate
- type EventSubEventFollow
- type EventSubEventHypetrain
- type EventSubEventPoll
- type EventSubEventRaid
- type EventSubEventShoutoutCreated
- type EventSubEventShoutoutReceived
- type EventSubEventStreamOffline
- type EventSubEventStreamOnline
- type EventSubEventSuspiciousUserMessage
- type EventSubEventSuspiciousUserUpdated
- type EventSubEventUserAuthorizationRevoke
- type EventSubSocketClient
- type EventSubSocketClientOpt
- func WithLogger(logger *logrus.Entry) EventSubSocketClientOpt
- func WithMustSubscribe(event, version string, condition EventSubCondition, ...) EventSubSocketClientOpt
- func WithRetryBackgroundSubscribe(event, version string, condition EventSubCondition, ...) EventSubSocketClientOpt
- func WithSocketURL(url string) EventSubSocketClientOpt
- func WithTwitchClient(c *Client) EventSubSocketClientOpt
- type HTTPError
- type OAuthTokenResponse
- type OAuthTokenValidationResponse
- type PollInfo
- type StreamInfo
- type User
Constants ¶
const ( BadgeBroadcaster = "broadcaster" BadgeFounder = "founder" BadgeModerator = "moderator" BadgeSubscriber = "subscriber" BadgeVIP = "vip" )
Collection of known badges
const ( EventSubEventTypeChannelAdBreakBegin = "channel.ad_break.begin" EventSubEventTypeChannelFollow = "channel.follow" EventSubEventTypeChannelPointCustomRewardRedemptionAdd = "channel.channel_points_custom_reward_redemption.add" EventSubEventTypeChannelHypetrainBegin = "channel.hype_train.begin" EventSubEventTypeChannelHypetrainProgress = "channel.hype_train.progress" EventSubEventTypeChannelHypetrainEnd = "channel.hype_train.end" EventSubEventTypeChannelRaid = "channel.raid" EventSubEventTypeChannelShoutoutCreate = "channel.shoutout.create" EventSubEventTypeChannelShoutoutReceive = "channel.shoutout.receive" EventSubEventTypeChannelUpdate = "channel.update" EventSubEventTypeChannelPollBegin = "channel.poll.begin" EventSubEventTypeChannelPollEnd = "channel.poll.end" EventSubEventTypeChannelPollProgress = "channel.poll.progress" EventSubEventTypeChannelSuspiciousUserMessage = "channel.suspicious_user.message" EventSubEventTypeChannelSuspiciousUserUpdate = "channel.suspicious_user.update" EventSubEventTypeStreamOffline = "stream.offline" EventSubEventTypeStreamOnline = "stream.online" EventSubEventTypeUserAuthorizationRevoke = "user.authorization.revoke" )
Collection of known EventSub event-types
const ( EventSubTopicVersion1 = "1" EventSubTopicVersion2 = "2" EventSubTopicVersionBeta = "beta" )
Collection of topic versions known to the API
const ( // API Scopes ScopeChannelBot = "channel:bot" ScopeChannelEditCommercial = "channel:edit:commercial" ScopeChannelManageAds = "channel:manage:ads" ScopeChannelManageBroadcast = "channel:manage:broadcast" ScopeChannelManageModerators = "channel:manage:moderators" ScopeChannelManagePolls = "channel:manage:polls" ScopeChannelManagePredictions = "channel:manage:predictions" ScopeChannelManageRaids = "channel:manage:raids" ScopeChannelManageRedemptions = "channel:manage:redemptions" ScopeChannelManageVIPS = "channel:manage:vips" ScopeChannelManageWhispers = "user:manage:whispers" ScopeChannelReadAds = "channel:read:ads" ScopeChannelReadHypetrain = "channel:read:hype_train" ScopeChannelReadPolls = "channel:read:polls" ScopeChannelReadRedemptions = "channel:read:redemptions" ScopeChannelReadSubscriptions = "channel:read:subscriptions" ScopeClipsEdit = "clips:edit" ScopeModeratorManageAnnoucements = "moderator:manage:announcements" ScopeModeratorManageBannedUsers = "moderator:manage:banned_users" ScopeModeratorManageChatMessages = "moderator:manage:chat_messages" ScopeModeratorManageChatSettings = "moderator:manage:chat_settings" ScopeModeratorManageShieldMode = "moderator:manage:shield_mode" ScopeModeratorManageShoutouts = "moderator:manage:shoutouts" ScopeModeratorReadFollowers = "moderator:read:followers" ScopeModeratorReadShoutouts = "moderator:read:shoutouts" ScopeModeratorReadSuspiciousUsers = "moderator:read:suspicious_users" ScopeUserBot = "user:bot" ScopeUserManageChatColor = "user:manage:chat_color" ScopeUserManageWhispers = "user:manage:whispers" ScopeUserReadChat = "user:read:chat" // Deprecated v5 scope but used in chat ScopeV5ChannelEditor = "channel_editor" // Chat Scopes ScopeChatEdit = "chat:edit" // Send live stream chat and rooms messages. ScopeChatRead = "chat:read" // View live stream chat and rooms messages. ScopeWhisperRead = "whispers:read" // View your whisper messages. )
Collection of known API scopes
Variables ¶
var ErrAnyHTTPError = newHTTPError(0, nil, nil)
ErrAnyHTTPError can be used in errors.Is() to match an HTTPError with any status code
var ErrNoStreamsFound = errors.New("no streams found")
ErrNoStreamsFound allows to differntiate between an HTTP error and the fact there just is no stream found
var ErrUserDoesNotFollow = errors.New("no follow-relation found")
ErrUserDoesNotFollow states the user does not follow the given channel
var KnownBadges = []string{ BadgeBroadcaster, BadgeFounder, BadgeModerator, BadgeSubscriber, BadgeVIP, }
KnownBadges contains a list of all known badges
Functions ¶
func ValidateStatus ¶ added in v3.15.0
func ValidateStatus(opts ClientRequestOpts, resp *http.Response) error
ValidateStatus is the default validation function used when no ValidateFunc is given in the ClientRequestOpts and checks for the returned HTTP status is equal to the OKStatus.
When the status is http.StatusTooManyRequests the function will return an error terminating any retries as retrying would not make sense (the error returned from Request will still be an HTTPError with status 429).
When wrapping this function the body should not have been read before in order to have the response body available in the returned HTTPError
Types ¶
type APICache ¶
type APICache struct {
// contains filtered or unexported fields
}
APICache is used to cache API responses in order not to ask the API over and over again for information seldom changing
type AuthType ¶ added in v3.14.0
type AuthType uint8
AuthType is a collection of available authorization types in the Twitch API
const ( AuthTypeAppAccessToken AuthTypeBearerToken )
Definitions of possible / understood auth types
type BadgeCollection ¶
BadgeCollection represents a collection of badges the user has set
func ParseBadgeLevels ¶
func ParseBadgeLevels(m *irc.Message) BadgeCollection
ParseBadgeLevels takes the badges from the irc.Message and returns a BadgeCollection containing all badges the user has set
func (BadgeCollection) Add ¶
func (b BadgeCollection) Add(badge string, level int)
Add sets the given badge to the given level
func (BadgeCollection) Get ¶
func (b BadgeCollection) Get(badge string) int
Get returns the level of the given badge. If the badge is not set its level will be 0.
func (BadgeCollection) Has ¶
func (b BadgeCollection) Has(badge string) bool
Has checks whether the collection contains the given badge at any level
type Category ¶
type Category struct { BoxArtURL string `json:"box_art_url"` ID string `json:"id"` Name string `json:"name"` }
Category represents information about a category
type ChannelStreamSchedule ¶ added in v3.15.0
type ChannelStreamSchedule struct { Segments []ChannelStreamScheduleSegment `json:"segments"` BroadcasterID string `json:"broadcaster_id"` BroadcasterName string `json:"broadcaster_name"` BroadcasterLogin string `json:"broadcaster_login"` Vacation struct { StartTime time.Time `json:"start_time"` EndTime time.Time `json:"end_time"` } `json:"vacation"` }
ChannelStreamSchedule represents the schedule of a channels with its segments represening single planned streams
type ChannelStreamScheduleSegment ¶ added in v3.20.0
type ChannelStreamScheduleSegment struct { ID string `json:"id"` StartTime time.Time `json:"start_time"` EndTime time.Time `json:"end_time"` Title string `json:"title"` CanceledUntil *time.Time `json:"canceled_until"` Category struct { ID string `json:"id"` Name string `json:"name"` } `json:"category"` IsRecurring bool `json:"is_recurring"` }
ChannelStreamScheduleSegment represents a single stream inside the ChannelStreamSchedule
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client bundles the API access methods into a Client
func (*Client) AddChannelVIP ¶ added in v3.2.0
AddChannelVIP adds the given user as a VIP in the given channel
func (*Client) BanUser ¶
func (c *Client) BanUser(ctx context.Context, channel, username string, duration time.Duration, reason string) error
BanUser bans or timeouts a user in the given channel. Setting the duration to 0 will result in a ban, setting if greater than 0 will result in a timeout. The timeout is automatically converted to full seconds. The timeout duration must be less than 1209600s.
func (*Client) CreateClip ¶ added in v3.16.0
func (c *Client) CreateClip(ctx context.Context, channel string, addDelay bool) (ccr CreateClipResponse, err error)
CreateClip triggers the creation of a clip in the given channel. If addDelay is true an artificial delay will be added (for broadcasters who trigger this function already knowing something will happen but not yet visible in stream).
func (*Client) DeleteMessage ¶
DeleteMessage deletes one or all messages from the specified chat. If no messageID is given all messages are deleted. If a message ID is given the message must be no older than 6 hours and it must not be posted by broadcaster or moderator.
func (*Client) GetAuthorizedUser ¶
GetAuthorizedUser returns the userID / userName of the user the client is authorized for
func (*Client) GetBroadcasterSubscriptionCount ¶ added in v3.9.0
func (c *Client) GetBroadcasterSubscriptionCount(ctx context.Context, broadcasterName string) (subCount, subPoints int64, err error)
GetBroadcasterSubscriptionCount gets a list of users that subscribe to the specified broadcaster.
func (*Client) GetChannelStreamSchedule ¶ added in v3.15.0
func (c *Client) GetChannelStreamSchedule(ctx context.Context, channel string) (*ChannelStreamSchedule, error)
GetChannelStreamSchedule gets the broadcaster’s streaming schedule
func (*Client) GetClipByID ¶ added in v3.8.0
GetClipByID gets a video clip that were captured from streams by its ID (slug in the URL)
func (*Client) GetCurrentStreamInfo ¶
GetCurrentStreamInfo returns the StreamInfo of the currently running stream of the given username
func (*Client) GetDisplayNameForUser ¶
GetDisplayNameForUser returns the display name for a login name set by the user themselves
func (*Client) GetFollowDate ¶
GetFollowDate returns the point-in-time the {from} followed the {to} or an ErrUserDoesNotFollow in case they do not follow
func (*Client) GetIDForUsername ¶
GetIDForUsername takes a login name and returns the userID for that username
func (*Client) GetLatestPoll ¶ added in v3.11.0
GetLatestPoll returns the lastest (active or past) poll inside the given channel
func (*Client) GetRecentStreamInfo ¶
func (c *Client) GetRecentStreamInfo(ctx context.Context, username string) (category string, title string, err error)
GetRecentStreamInfo returns the category and the title the given username has configured for their recent (or next) stream
func (*Client) GetToken ¶
GetToken returns the access-token for the configured credentials after validating and - if required - renewing the token
func (*Client) GetTokenInfo ¶ added in v3.20.0
func (c *Client) GetTokenInfo(ctx context.Context) (user string, scopes []string, expiresAt time.Time, err error)
GetTokenInfo requests a validation for the token set within the client and returns the authorized user, their granted scopes on this token and an error in case something went wrong.
func (*Client) GetTwitchAppAccessToken ¶ added in v3.19.0
GetTwitchAppAccessToken uses client-id and -secret to generate a new app-access-token in case none is present or returns the cached token.
func (*Client) GetUserInformation ¶
GetUserInformation takes an userID or an userName and returns the User information for them
func (*Client) GetUsernameForID ¶ added in v3.18.0
GetUsernameForID retrieves the login name (not the display name) for the given user ID
func (*Client) HasLiveStream ¶
HasLiveStream checks whether the given user is currently streaming
func (*Client) ModifyChannelInformation ¶
func (c *Client) ModifyChannelInformation(ctx context.Context, channel string, category, title *string) error
ModifyChannelInformation adjusts category and title for the given channel
func (*Client) RefreshToken ¶
RefreshToken takes the configured refresh-token and renews the corresponding access-token
func (*Client) RemoveChannelVIP ¶ added in v3.2.0
RemoveChannelVIP removes the given user as a VIP in the given channel
func (*Client) Request ¶ added in v3.14.0
func (c *Client) Request(ctx context.Context, opts ClientRequestOpts) error
Request executes the request towards the Twitch API defined by the ClientRequestOpts and takes care of token management and response checking
func (*Client) RunCommercial ¶ added in v3.7.0
RunCommercial starts a commercial on the specified channel
func (*Client) SearchCategories ¶
SearchCategories returns a list of categories matching the given search. The result is not exact but contains Twitchs fuzzy-results.
func (*Client) SendChatAnnouncement ¶
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 (*Client) SendShoutout ¶ added in v3.4.0
SendShoutout creates a Twitch-native shoutout in the given channel for the given user. This equals `/shoutout <user>` in the channel.
func (*Client) SendWhisper ¶
SendWhisper sends a whisper from the bot to the specified user.
For details about message limits see the official documentation: https://dev.twitch.tv/docs/api/reference#send-whisper
func (*Client) SetTokenUpdateHook ¶
SetTokenUpdateHook registers a function to listen for token changes after renewing the internal token. It is presented with an access- and a refresh-token if those changes.
func (*Client) UpdateShieldMode ¶ added in v3.5.0
UpdateShieldMode activates or deactivates the Shield Mode in the given channel
func (*Client) UpdateToken ¶
UpdateToken overwrites the configured access- and refresh-tokens
type ClientRequestOpts ¶ added in v3.14.0
type ClientRequestOpts struct { AuthType AuthType Body io.Reader Method string NoRetry bool NoValidateToken bool OKStatus int Out interface{} URL string ValidateFunc func(ClientRequestOpts, *http.Response) error }
ClientRequestOpts contains the options to create a request to the Twitch APIs
type ClipInfo ¶ added in v3.8.0
type ClipInfo struct { ID string `json:"id"` URL string `json:"url"` EmbedURL string `json:"embed_url"` BroadcasterID string `json:"broadcaster_id"` BroadcasterName string `json:"broadcaster_name"` CreatorID string `json:"creator_id"` CreatorName string `json:"creator_name"` VideoID string `json:"video_id"` GameID string `json:"game_id"` Language string `json:"language"` Title string `json:"title"` ViewCount int64 `json:"view_count"` CreatedAt time.Time `json:"created_at"` ThumbnailURL string `json:"thumbnail_url"` Duration float64 `json:"duration"` VodOffset int64 `json:"vod_offset"` }
ClipInfo contains the information about a clip
type CreateClipResponse ¶ added in v3.16.0
CreateClipResponse contains the API response to a create clip call
type ErrorResponse ¶ added in v3.15.0
type ErrorResponse struct { Error string `json:"error"` Status int `json:"status"` Message string `json:"message"` }
ErrorResponse is a response sent by Twitch API in case there is an error
type EventSubCondition ¶
type EventSubCondition struct { BroadcasterUserID string `json:"broadcaster_user_id,omitempty"` CampaignID string `json:"campaign_id,omitempty"` CategoryID string `json:"category_id,omitempty"` ClientID string `json:"client_id,omitempty"` ExtensionClientID string `json:"extension_client_id,omitempty"` FromBroadcasterUserID string `json:"from_broadcaster_user_id,omitempty"` OrganizationID string `json:"organization_id,omitempty"` RewardID string `json:"reward_id,omitempty"` ToBroadcasterUserID string `json:"to_broadcaster_user_id,omitempty"` UserID string `json:"user_id,omitempty"` ModeratorUserID string `json:"moderator_user_id,omitempty"` }
EventSubCondition defines the condition the subscription should listen on - all fields are optional and those defined in the EventSub documentation for the given topic should be set
func (EventSubCondition) Hash ¶
func (e EventSubCondition) Hash() (string, error)
Hash generates a hashstructure hash for the condition for comparison
type EventSubEventAdBreakBegin ¶ added in v3.19.0
type EventSubEventAdBreakBegin struct { Duration int64 `json:"duration_seconds"` StartedAt time.Time `json:"started_at"` IsAutomatic bool `json:"is_automatic"` BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserLogin string `json:"broadcaster_user_login"` BroadcasterUserName string `json:"broadcaster_user_name"` RequesterUserID string `json:"requester_user_id"` RequesterUserLogin string `json:"requester_user_login"` RequesterUserName string `json:"requester_user_name"` }
EventSubEventAdBreakBegin contains the payload for an AdBreak event
type EventSubEventChannelPointCustomRewardRedemptionAdd ¶
type EventSubEventChannelPointCustomRewardRedemptionAdd struct { ID string `json:"id"` BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserLogin string `json:"broadcaster_user_login"` BroadcasterUserName string `json:"broadcaster_user_name"` UserID string `json:"user_id"` UserLogin string `json:"user_login"` UserName string `json:"user_name"` UserInput string `json:"user_input"` Status string `json:"status"` Reward struct { ID string `json:"id"` Title string `json:"title"` Cost int64 `json:"cost"` Prompt string `json:"prompt"` } `json:"reward"` RedeemedAt time.Time `json:"redeemed_at"` }
EventSubEventChannelPointCustomRewardRedemptionAdd contains the payload for an channel-point redeem event
type EventSubEventChannelUpdate ¶
type EventSubEventChannelUpdate struct { BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserLogin string `json:"broadcaster_user_login"` BroadcasterUserName string `json:"broadcaster_user_name"` Title string `json:"title"` Language string `json:"language"` CategoryID string `json:"category_id"` CategoryName string `json:"category_name"` ContentClassificationLabels []string `json:"content_classification_labels"` }
EventSubEventChannelUpdate contains the payload for a channel update event
type EventSubEventFollow ¶
type EventSubEventFollow struct { UserID string `json:"user_id"` UserLogin string `json:"user_login"` UserName string `json:"user_name"` BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserLogin string `json:"broadcaster_user_login"` BroadcasterUserName string `json:"broadcaster_user_name"` FollowedAt time.Time `json:"followed_at"` }
EventSubEventFollow contains the payload for a follow event
type EventSubEventHypetrain ¶ added in v3.26.0
type EventSubEventHypetrain struct { ID string `json:"id"` BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserLogin string `json:"broadcaster_user_login"` BroadcasterUserName string `json:"broadcaster_user_name"` Level int64 `json:"level"` Total int64 `json:"total"` Progress int64 `json:"progress"` // Only Beginn, Progress Goal int64 `json:"goal"` // Only Beginn, Progress TopContributions []struct { UserID string `json:"user_id"` UserLogin string `json:"user_login"` UserName string `json:"user_name"` Type string `json:"type"` Total int64 `json:"total"` } `json:"top_contributions"` LastContribution *struct { UserID string `json:"user_id"` UserLogin string `json:"user_login"` UserName string `json:"user_name"` Type string `json:"type"` Total int64 `json:"total"` } `json:"last_contribution,omitempty"` StartedAt time.Time `json:"started_at"` ExpiresAt *time.Time `json:"expires_at,omitempty"` // Only Begin, Progress EndedAt *time.Time `json:"ended_at,omitempty"` // Only End CooldownEndsAt *time.Time `json:"cooldown_ends_at,omitempty"` // Only End }
EventSubEventHypetrain contains the payload for all three (begin, progress and end) hypetrain events. Certain fields are not available at all event types
type EventSubEventPoll ¶ added in v3.11.0
type EventSubEventPoll struct { ID string `json:"id"` BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserLogin string `json:"broadcaster_user_login"` BroadcasterUserName string `json:"broadcaster_user_name"` Title string `json:"title"` Choices []struct { ID string `json:"id"` Title string `json:"title"` ChannelPointsVotes int `json:"channel_points_votes"` Votes int `json:"votes"` } `json:"choices"` ChannelPointsVoting struct { IsEnabled bool `json:"is_enabled"` AmountPerVote int `json:"amount_per_vote"` } `json:"channel_points_voting"` StartedAt time.Time `json:"started_at"` // begin, progress, end EndsAt time.Time `json:"ends_at,omitempty"` // begin, progress Status string `json:"status,omitempty"` // end -- enum(completed, archived, terminated) EndedAt time.Time `json:"ended_at,omitempty"` // end }
EventSubEventPoll contains the payload for a poll change event (not all fields are present in all poll events, see docs!)
type EventSubEventRaid ¶
type EventSubEventRaid struct { FromBroadcasterUserID string `json:"from_broadcaster_user_id"` FromBroadcasterUserLogin string `json:"from_broadcaster_user_login"` FromBroadcasterUserName string `json:"from_broadcaster_user_name"` ToBroadcasterUserID string `json:"to_broadcaster_user_id"` ToBroadcasterUserLogin string `json:"to_broadcaster_user_login"` ToBroadcasterUserName string `json:"to_broadcaster_user_name"` Viewers int64 `json:"viewers"` }
EventSubEventRaid contains the payload for a raid event
type EventSubEventShoutoutCreated ¶ added in v3.7.0
type EventSubEventShoutoutCreated struct { BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserLogin string `json:"broadcaster_user_login"` BroadcasterUserName string `json:"broadcaster_user_name"` ModeratorUserID string `json:"moderator_user_id"` ModeratorUserLogin string `json:"moderator_user_login"` ModeratorUserName string `json:"moderator_user_name"` ToBroadcasterUserID string `json:"to_broadcaster_user_id"` ToBroadcasterUserLogin string `json:"to_broadcaster_user_login"` ToBroadcasterUserName string `json:"to_broadcaster_user_name"` ViewerCount int64 `json:"viewer_count"` StartedAt time.Time `json:"started_at"` CooldownEndsAt time.Time `json:"cooldown_ends_at"` TargetCooldownEndsAt time.Time `json:"target_cooldown_ends_at"` }
EventSubEventShoutoutCreated contains the payload for a shoutout created event
type EventSubEventShoutoutReceived ¶ added in v3.6.0
type EventSubEventShoutoutReceived struct { BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserLogin string `json:"broadcaster_user_login"` BroadcasterUserName string `json:"broadcaster_user_name"` FromBroadcasterUserID string `json:"from_broadcaster_user_id"` FromBroadcasterUserLogin string `json:"from_broadcaster_user_login"` FromBroadcasterUserName string `json:"from_broadcaster_user_name"` ViewerCount int64 `json:"viewer_count"` StartedAt time.Time `json:"started_at"` }
EventSubEventShoutoutReceived contains the payload for a shoutout received event
type EventSubEventStreamOffline ¶
type EventSubEventStreamOffline struct { BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserLogin string `json:"broadcaster_user_login"` BroadcasterUserName string `json:"broadcaster_user_name"` }
EventSubEventStreamOffline contains the payload for a stream offline event
type EventSubEventStreamOnline ¶
type EventSubEventStreamOnline struct { ID string `json:"id"` BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserLogin string `json:"broadcaster_user_login"` BroadcasterUserName string `json:"broadcaster_user_name"` Type string `json:"type"` StartedAt time.Time `json:"started_at"` }
EventSubEventStreamOnline contains the payload for a stream online event
type EventSubEventSuspiciousUserMessage ¶ added in v3.29.0
type EventSubEventSuspiciousUserMessage struct { BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserName string `json:"broadcaster_user_name"` BroadcasterUserLogin string `json:"broadcaster_user_login"` UserID string `json:"user_id"` UserName string `json:"user_name"` UserLogin string `json:"user_login"` LowTrustStatus string `json:"low_trust_status"` // Can be the following: "none", "active_monitoring", or "restricted" Types []string `json:"types"` // can be "manual", "ban_evader_detector", or "shared_channel_ban" BanEvasionEvaluation string `json:"ban_evasion_evaluation"` // can be "unknown", "possible", or "likely" Message struct { MessageID string `json:"message_id"` Text string `json:"text"` Fragments []struct { Type string `json:"type"` Text string `json:"text"` Cheermote struct { Prefix string `json:"prefix"` Bits int `json:"bits"` Tier int `json:"tier"` } `json:"Cheermote"` Emote struct { ID string `json:"id"` EmoteSetID string `json:"emote_set_id"` } `json:"emote"` } `json:"fragments"` } `json:"message"` }
EventSubEventSuspiciousUserMessage contains the payload for a channel.suspicious_user.message
type EventSubEventSuspiciousUserUpdated ¶ added in v3.29.0
type EventSubEventSuspiciousUserUpdated struct { BroadcasterUserID string `json:"broadcaster_user_id"` BroadcasterUserName string `json:"broadcaster_user_name"` BroadcasterUserLogin string `json:"broadcaster_user_login"` ModeratorUserID string `json:"moderator_user_id"` ModeratorUserName string `json:"moderator_user_name"` ModeratorUserLogin string `json:"moderator_user_login"` UserID string `json:"user_id"` UserName string `json:"user_name"` UserLogin string `json:"user_login"` LowTrustStatus string `json:"low_trust_status"` // Can be the following: "none", "active_monitoring", or "restricted" }
EventSubEventSuspiciousUserUpdated contains the payload for a channel.suspicious_user.update
type EventSubEventUserAuthorizationRevoke ¶
type EventSubEventUserAuthorizationRevoke struct { ClientID string `json:"client_id"` UserID string `json:"user_id"` UserLogin string `json:"user_login"` UserName string `json:"user_name"` }
EventSubEventUserAuthorizationRevoke contains the payload for an authorization revoke event
type EventSubSocketClient ¶ added in v3.10.0
type EventSubSocketClient struct {
// contains filtered or unexported fields
}
EventSubSocketClient manages a WebSocket transport for the Twitch EventSub API
func NewEventSubSocketClient ¶ added in v3.10.0
func NewEventSubSocketClient(opts ...EventSubSocketClientOpt) (*EventSubSocketClient, error)
NewEventSubSocketClient creates a new EventSubSocketClient and applies the given EventSubSocketClientOpts
func (*EventSubSocketClient) Close ¶ added in v3.10.0
func (e *EventSubSocketClient) Close()
Close cancels the contained context and brings the EventSubSocketClient to a halt
func (*EventSubSocketClient) Run ¶ added in v3.10.0
func (e *EventSubSocketClient) Run() error
Run starts the main communcation loop for the EventSubSocketClient
type EventSubSocketClientOpt ¶ added in v3.10.0
type EventSubSocketClientOpt func(*EventSubSocketClient)
EventSubSocketClientOpt is a setter function to apply changes to the EventSubSocketClient on create
func WithLogger ¶ added in v3.10.0
func WithLogger(logger *logrus.Entry) EventSubSocketClientOpt
WithLogger configures the logger within the EventSubSocketClient
func WithMustSubscribe ¶ added in v3.22.0
func WithMustSubscribe(event, version string, condition EventSubCondition, callback func(json.RawMessage) error) EventSubSocketClientOpt
WithMustSubscribe adds a topic to the subscriptions to be done on connect
func WithRetryBackgroundSubscribe ¶ added in v3.22.0
func WithRetryBackgroundSubscribe(event, version string, condition EventSubCondition, callback func(json.RawMessage) error) EventSubSocketClientOpt
WithRetryBackgroundSubscribe adds a topic to the subscriptions to be done on connect async
func WithSocketURL ¶ added in v3.10.0
func WithSocketURL(url string) EventSubSocketClientOpt
WithSocketURL overwrites the socket URL to connect to
func WithTwitchClient ¶ added in v3.10.0
func WithTwitchClient(c *Client) EventSubSocketClientOpt
WithTwitchClient overwrites the Client to be used
type HTTPError ¶ added in v3.15.0
HTTPError represents an HTTP error containing the response body (or the wrapped error occurred while readiny the body) and the status code returned by the server
func (HTTPError) Error ¶ added in v3.15.0
Error implements the error interface and returns a formatted version of the error including the body, might therefore leak confidential information when included in the response body
type OAuthTokenResponse ¶
type OAuthTokenResponse struct { AccessToken string `json:"access_token"` RefreshToken string `json:"refresh_token"` ExpiresIn int `json:"expires_in"` Scope []string `json:"scope"` TokenType string `json:"token_type"` }
OAuthTokenResponse is used when requesting a token
type OAuthTokenValidationResponse ¶
type OAuthTokenValidationResponse struct { ClientID string `json:"client_id"` Login string `json:"login"` Scopes []string `json:"scopes"` UserID string `json:"user_id"` ExpiresIn int `json:"expires_in"` }
OAuthTokenValidationResponse is used when validating a token
type PollInfo ¶ added in v3.11.0
type PollInfo struct { ID string `json:"id"` BroadcasterID string `json:"broadcaster_id"` BroadcasterName string `json:"broadcaster_name"` BroadcasterLogin string `json:"broadcaster_login"` Title string `json:"title"` Choices []struct { ID string `json:"id"` Title string `json:"title"` Votes int `json:"votes"` ChannelPointsVotes int `json:"channel_points_votes"` } `json:"choices"` ChannelPointsVotingEnabled bool `json:"channel_points_voting_enabled"` ChannelPointsPerVote int `json:"channel_points_per_vote"` Status string `json:"status"` Duration int `json:"duration"` StartedAt time.Time `json:"started_at"` EndedAt *time.Time `json:"ended_at"` }
PollInfo contains information about a Twitch poll
type StreamInfo ¶
type StreamInfo struct { ID string `json:"id"` UserID string `json:"user_id"` UserLogin string `json:"user_login"` UserName string `json:"user_name"` GameID string `json:"game_id"` GameName string `json:"game_name"` Type string `json:"type"` Title string `json:"title"` ViewerCount int64 `json:"viewer_count"` StartedAt time.Time `json:"started_at"` Language string `json:"language"` ThumbnailURL string `json:"thumbnail_url"` TagIds []string `json:"tag_ids"` //revive:disable-line:var-naming // Disabled to prevent breaking change IsMature bool `json:"is_mature"` }
StreamInfo contains all the information known about a stream