TwitchWH is a Twitch Webhook EventSub library for Go.
Full documentation: https://pkg.go.dev/github.com/LinneB/twitchwh
Table of contents:
go get github.com/LinneB/twitchwh
This is a basic example of how to use TwitchWH. It creates a new client, adds an event listener, and subscribes to an event.
For more examples and methods, see USAGE.md.
package main
import (
"log"
"net/http"
"github.com/LinneB/twitchwh"
)
func main() {
// Create a new Client
client, err := twitchwh.New(twitchwh.ClientConfig{
ClientID: "client id",
ClientSecret: "super secret client secret",
WebhookSecret: "random string between 10 and 100 characters",
// This example assumes you have a domain that points to this app on port 8080
WebhookURL: "https://yourdomain.com/eventsub",
// If you have your own token logic, set this to true and update the token using Client.SetToken()
ExternalToken: false,
// Enable log output
Debug: true,
})
if err != nil {
log.Panic(err)
}
// Set up an event handler
client.OnStreamOnline = func(event twitchwh.StreamOnline) {
log.Printf("%s went live!", event.BroadcasterUserLogin)
}
// Setup the HTTP event handler
// This needs to be done before you subscribe to any events, since AddSubscription will wait until Twitch sends the challenge request
http.HandleFunc("/eventsub", client.Handler)
go http.ListenAndServe(":8080", nil)
// Add a subscription for LinneB going live
// Note that this will throw an error if the subscription already exists
err = client.AddSubscription("stream.online", "1", twitchwh.Condition{
BroadcasterUserID: "215185844",
})
if err != nil {
log.Panic(err)
}
// Wait forever
select {}
}
Contributions are welcome. If you find any issues or have any suggestions, please open an issue or a pull request.
Questions and feature requests are also welcome, just open an issue.
TwitchWH supports all non-beta events as of 2024-06-07
. For a complete list of events, see EventSub subscription types.
Please note that most of these events are not tested, and are only modeled based on the documentation. Double check the documentation and make sure the struct fields match.
Full list of supported events:
automod.message.hold
automod.message.update
automod.settings.update
automod.terms.update
channel.update
channel.follow
channel.ad_break.begin
channel.chat.clear
channel.chat.clear_user_messages
channel.chat.message
channel.chat.message_delete
channel.chat.notification
channel.chat_settings.update
channel.chat.user_message_hold
channel.chat.user_message_update
channel.subscribe
channel.subscription.end
channel.subscription.gift
channel.subscription.message
channel.cheer
channel.raid
channel.ban
channel.unban
channel.unban_request.create
channel.unban_request.resolve
channel.moderate
channel.moderator.add
channel.moderator.remove
channel.channel_points_automatic_reward_redemption.add
channel.channel_points_custom_reward.add
channel.channel_points_custom_reward.update
channel.channel_points_custom_reward.remove
channel.channel_points_custom_reward_redemption.add
channel.channel_points_custom_reward_redemption.update
channel.poll.begin
channel.poll.progress
channel.poll.end
channel.prediction.begin
channel.prediction.progress
channel.prediction.lock
channel.prediction.end
channel.suspicious_user.message
channel.suspicious_user.update
channel.vip.add
channel.vip.remove
channel.charity_campaign.donate
channel.charity_campaign.start
channel.charity_campaign.progress
channel.charity_campaign.stop
conduit.shard.disabled
drop.entitlement.grant
extension.bits_transaction.create
channel.goal.begin
channel.goal.progress
channel.goal.end
channel.hype_train.begin
channel.hype_train.progress
channel.hype_train.end
channel.shield_mode.begin
channel.shield_mode.end
channel.shoutout.create
channel.shoutout.receive
stream.online
stream.offline
user.authorization.grant
user.authorization.revoke
user.update
user.whisper.message