2024-02-27 22:13:57 -05:00
package eventsub
import "time"
type Condition map [ string ] any
type Subscription struct {
2024-02-27 23:03:40 -05:00
// An ID that identifies the subscription.
ID string ` json:"id" `
// The subscription’ s status. The subscriber receives events only for enabled subscriptions. Possible values are:
//
// enabled — The subscription is enabled.
//
// webhook_callback_verification_pending — The subscription is pending verification of the specified callback URL (see Responding to a challenge request).
Status string ` json:"status" `
// The subscription’ s type.
// See Subscription Types: https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#subscription-types
Type string ` json:"type" `
// The version number that identifies this definition of the subscription’ s data.
Version string ` json:"version" `
// The subscription’ s parameter values. This is a string-encoded JSON object whose contents are determined by the subscription type.
Condition Condition ` json:"condition" `
// The date and time (in RFC3339 format) of when the subscription was created.
CreatedAt time . Time ` json:"created_at" `
// The transport details used to send the notifications.
2024-02-27 22:13:57 -05:00
Transport * Transport ` json:"transport" `
2024-02-27 23:03:40 -05:00
// The amount that the subscription counts against your limit.
// Learn More: https://dev.twitch.tv/docs/eventsub/manage-subscriptions/#subscription-limits
Cost int ` json:"cost" `
2024-02-27 22:13:57 -05:00
}
type Status string
const (
2024-02-27 23:03:40 -05:00
// enabled — The subscription is enabled.
StatusEnabled = "enabled"
// webhook_callback_verification_pending — The subscription is pending verification of the specified callback URL.
2024-02-27 22:13:57 -05:00
StatusWebhookCallbackVerificationPending = "webhook_callback_verification_pending"
2024-02-27 23:03:40 -05:00
// webhook_callback_verification_failed — The specified callback URL failed verification.
StatusWebhookCallbackVerificationFailed = "webhook_callback_verification_failed"
// notification_failures_exceeded — The notification delivery failure rate was too high.
NotificationFailuresExceeded = "notification_failures_exceeded"
// authorization_revoked — The authorization was revoked for one or more users specified in the Condition object.
AuthorizationRevoked = "authorization_revoked"
// moderator_removed — The moderator that authorized the subscription is no longer one of the broadcaster's moderators.
ModeratorRemoved = "moderator_removed"
// user_removed — One of the users specified in the Condition object was removed.
UserRemoved = "user_removed"
// version_removed — The subscription to subscription type and version is no longer supported.
VersionRemoved = "version_removed"
// beta_maintenance — The subscription to the beta subscription type was removed due to maintenance.
BetaMaintenance = "beta_maintenance"
// websocket_disconnected — The client closed the connection.
WebsocketDisconnected = "websocket_disconnected"
// websocket_failed_ping_pong — The client failed to respond to a ping message.
WebsocketFailedPingPong = "websocket_failed_ping_pong"
// websocket_received_inbound_traffic — The client sent a non-pong message.
// Clients may only send pong messages (and only in response to a ping message).
WebsocketReceivedInboundTraffic = "websocket_received_inbound_traffic"
// websocket_connection_unused — The client failed to subscribe to events within the required time.
WebsocketConnectionUnused = "websocket_connection_unused"
// websocket_internal_error — The Twitch WebSocket server experienced an unexpected error.
WebsocketInternalError = "websocket_internal_error"
// websocket_network_timeout — The Twitch WebSocket server timed out writing the message to the client.
WebsocketNetworkTimeout = "websocket_network_timeout"
// websocket_network_error — The Twitch WebSocket server experienced a network error writing the message to the client.
WebsocketnetworkError = "websocket_network_error"
2024-02-27 22:13:57 -05:00
)
type Transport struct {
2024-02-27 23:03:40 -05:00
// The transport method. Possible values are:
//
// webhook, websocket, conduit
Method string ` json:"method" `
// The callback URL where the notifications are sent. The URL must use the HTTPS protocol and port 443.
// See Processing an event. Specify this field only if method is set to webhook.
//
// NOTE: Redirects are not followed.
Callback * string ` json:"callback,omitempty" `
// The secret used to verify the signature.
// The secret must be an ASCII string that’ s a minimum of 10 characters long and a maximum of 100 characters long.
// For information about how the secret is used,
// see Verifying the event message: https://dev.twitch.tv/docs/eventsub/handling-webhook-events#verifying-the-event-message
// Specify this field only if method is set to webhook.
Secret * string ` json:"secret,omitempty" `
// An ID that identifies the WebSocket to send notifications to. When you connect to EventSub using WebSockets,
// the server returns the ID in the Welcome message. Specify this field only if method is set to websocket.
2024-02-27 22:13:57 -05:00
SessionID * string ` json:"session_id,omitempty" `
2024-02-27 23:03:40 -05:00
// An ID that identifies the conduit to send notifications to.
// When you create a conduit, the server returns the conduit ID.
// Specify this field only if method is set to conduit.
2024-02-27 22:13:57 -05:00
ConduitID * string ` json:"conduit_id,omitempty" `
}
func WebhookTransport ( callback string , secret string ) * Transport {
return & Transport {
Method : "webhook" ,
Callback : & callback ,
Secret : & secret ,
SessionID : nil ,
ConduitID : nil ,
}
}
func WebSocketTransport ( sessionID string ) * Transport {
return & Transport {
Method : "websocket" ,
Callback : nil ,
Secret : nil ,
SessionID : & sessionID ,
ConduitID : nil ,
}
}
func ConduitTransport ( conduitID string ) * Transport {
return & Transport {
Method : "websocket" ,
Callback : nil ,
Secret : nil ,
SessionID : nil ,
ConduitID : & conduitID ,
}
}
type SubscriptionType struct {
2024-02-27 23:03:40 -05:00
// The type of subscription.
Name string ` json:"type" `
// The version number that identifies the definition of the subscription type that you want the response to use.
2024-02-27 22:13:57 -05:00
Version string ` json:"version" `
}
var (
ChannelUpdate = SubscriptionType { Name : "channel.update" , Version : "2" }
ChannelFollow = SubscriptionType { Name : "channel.follow" , Version : "2" }
ChannelAdBreakBegin = SubscriptionType { Name : "channel.ad_break_begin" , Version : "1" }
ChannelChatClear = SubscriptionType { Name : "channel.chat.clear" , Version : "1" }
ChannelChatClearUserMessages = SubscriptionType { Name : "channel.chat.clear_user_messages" , Version : "1" }
ChannelChatMessage = SubscriptionType { Name : "channel.chat.message" , Version : "1" }
ChannelChatMessageDelete = SubscriptionType { Name : "channel.chat.message_delete" , Version : "1" }
ChannelChatNotification = SubscriptionType { Name : "channel.chat.notification" , Version : "1" }
ChannelChatSettingsUpdate = SubscriptionType { Name : "channel.chat_settings.update" , Version : "beta" }
ChannelSubscribe = SubscriptionType { Name : "channel.subscribe" , Version : "1" }
ChannelSubscriptionEnd = SubscriptionType { Name : "channel.subscription.end" , Version : "1" }
ChannelSubscriptionGift = SubscriptionType { Name : "channel.subscription.gift" , Version : "1" }
ChannelSubscriptionMessage = SubscriptionType { Name : "channel.subscription.message" , Version : "1" }
ChannelCheer = SubscriptionType { Name : "channel.cheer" , Version : "1" }
ChannelRaid = SubscriptionType { Name : "channel.raid" , Version : "1" }
ChannelBan = SubscriptionType { Name : "channel.ban" , Version : "1" }
ChannelUnban = SubscriptionType { Name : "channel.unban" , Version : "1" }
ChannelModeratorAdd = SubscriptionType { Name : "channel.moderator.add" , Version : "1" }
ChannelModeratorRemove = SubscriptionType { Name : "channel.moderator.remove" , Version : "1" }
ChannelGuestStarSessionBegin = SubscriptionType { Name : "channel.guest_star_session.begin" , Version : "beta" }
ChannelGuestStarSessionEnd = SubscriptionType { Name : "channel.guest_star_session.end" , Version : "beta" }
ChannelGuestStarGuestUpdate = SubscriptionType { Name : "channel.guest_star_guest.update" , Version : "beta" }
ChannelGuestStarSettingsUpdate = SubscriptionType { Name : "channel.guest_star_settings.update" , Version : "beta" }
ChannelPointsCustomRewardAdd = SubscriptionType { Name : "channel.channel_points_custom_reward.add" , Version : "1" }
ChannelPointsCustomRewardUpdate = SubscriptionType { Name : "channel.channel_points_custom_reward.update" , Version : "1" }
ChannelPointsCustomRewardRemove = SubscriptionType { Name : "channel.channel_points_custom_reward.remove" , Version : "1" }
ChannelPointsCustomRewardRedemptionAdd = SubscriptionType { Name : "channel.channel_points_custom_reward_redemption.add" , Version : "1" }
ChannelPointsCustomRewardRedemptionUpdate = SubscriptionType { Name : "channel.channel_points_custom_reward_redemption.update" , Version : "1" }
ChannelPollBegin = SubscriptionType { Name : "channel.poll.begin" , Version : "1" }
ChannelPollProgress = SubscriptionType { Name : "channel.poll.progress" , Version : "1" }
ChannelPollEnd = SubscriptionType { Name : "channel.poll.end" , Version : "1" }
ChannelPredictionBegin = SubscriptionType { Name : "channel.prediction.begin" , Version : "1" }
ChannelPredictionProgress = SubscriptionType { Name : "channel.prediction.progress" , Version : "1" }
ChannelPredictionLock = SubscriptionType { Name : "channel.prediction.lock" , Version : "1" }
ChannelPredictionEnd = SubscriptionType { Name : "channel.prediction.end" , Version : "1" }
CharityCampaignDonate = SubscriptionType { Name : "channel.charity_campaign.donate" , Version : "1" }
CharityCampaignStart = SubscriptionType { Name : "channel.charity_campaign.start" , Version : "1" }
CharityCampaignProgress = SubscriptionType { Name : "channel.charity_campaign.progress" , Version : "1" }
CharityCampaignStop = SubscriptionType { Name : "channel.charity_campaign.stop" , Version : "1" }
ConduitShardDisabled = SubscriptionType { Name : "conduit.shard.disabled" , Version : "1" }
DropEntitlementGrant = SubscriptionType { Name : "drop.entitlement.grant" , Version : "1" }
ExtensionBitsTransactionCreate = SubscriptionType { Name : "extension.bits.transaction.create" , Version : "1" }
GoalBegin = SubscriptionType { Name : "goal.begin" , Version : "1" }
GoalProgress = SubscriptionType { Name : "goal.progress" , Version : "1" }
GoalEnd = SubscriptionType { Name : "goal.end" , Version : "1" }
HypeTrainBegin = SubscriptionType { Name : "hype_train.begin" , Version : "1" }
HypeTrainProgress = SubscriptionType { Name : "hype_train.progress" , Version : "1" }
HypeTrainEnd = SubscriptionType { Name : "hype_train.end" , Version : "1" }
ShieldModeBegin = SubscriptionType { Name : "shield_mode.begin" , Version : "1" }
ShieldModeEnd = SubscriptionType { Name : "shield_mode.end" , Version : "1" }
ShoutoutCreate = SubscriptionType { Name : "shoutout.create" , Version : "1" }
ShoutoutReceived = SubscriptionType { Name : "shoutout.received" , Version : "1" }
StreamOnline = SubscriptionType { Name : "stream.online" , Version : "1" }
StreamOffline = SubscriptionType { Name : "stream.offline" , Version : "1" }
UserAuthorizationGrant = SubscriptionType { Name : "user.authorization.grant" , Version : "1" }
UserAuthorizationRevoke = SubscriptionType { Name : "user.authorization.revoke" , Version : "1" }
UserUpdate = SubscriptionType { Name : "user.update" , Version : "1" }
)