add command to remove a websub subscription

This commit is contained in:
lyx0 2024-02-14 22:13:07 +01:00
parent 7cf1d4ade8
commit d6efd14139
2 changed files with 84 additions and 11 deletions

View file

@ -133,6 +133,13 @@ func (app *application) handleCommand(message twitch.PrivateMessage) {
//reply = app.createFollowSubscription(target, cmdParams[2])
}
}
case "unnotify":
switch cmdParams[1] {
case "live":
if userLevel >= 100 {
reply = app.deleteLiveSubscription(target, cmdParams[2])
}
}
case "ddg":
reply = commands.DuckDuckGo(message.Message[6:len(message.Message)])

View file

@ -7,20 +7,32 @@ import (
"github.com/nicklaw5/helix/v2"
)
const (
eventSubResponseOK = 200
eventSubResponseAccepted = 202
eventSubResponseNoContent = 204
eventSubResponseBadRequest = 400
eventSubResponseUnauthorized = 401
eventSubResponseForbidden = 403
)
func (app *application) createLiveSubscription(target, channel string) string {
client, err := helix.NewClient(&helix.Options{
ClientID: app.Config.twitchClientId,
AppAccessToken: app.HelixClient.GetAppAccessToken(),
})
if err != nil {
app.Log.Errorw("Error creating new helix client",
"err", err,
)
}
// client, err := helix.NewClient(&helix.Options{
// ClientID: app.Config.twitchClientId,
// AppAccessToken: app.HelixClient.GetAppAccessToken(),
// })
// if err != nil {
// app.Log.Errorw("Error creating new helix client",
// "err", err,
// )
// }
uid := ivr.IDByUsername(channel)
if uid == "xd" {
return fmt.Sprintf("Could not find user with name %v", channel)
}
resp, err := client.CreateEventSubSubscription(&helix.EventSubSubscription{
resp, err := app.HelixClient.CreateEventSubSubscription(&helix.EventSubSubscription{
Type: helix.EventSubTypeStreamOnline,
Version: "1",
Condition: helix.EventSubCondition{
@ -33,7 +45,7 @@ func (app *application) createLiveSubscription(target, channel string) string {
},
})
if err != nil {
app.Log.Errorw("Error creating EvenSub subscription",
app.Log.Errorw("Error creating EventSub subscription",
"resp", resp,
"err", err,
)
@ -42,3 +54,57 @@ func (app *application) createLiveSubscription(target, channel string) string {
app.Log.Infof("%+v\n", resp)
return fmt.Sprintf("Created subscription for channel %v; uid=%v", channel, uid)
}
func (app *application) deleteLiveSubscription(target, channel string) string {
client, err := helix.NewClient(&helix.Options{
ClientID: app.Config.twitchClientId,
AppAccessToken: app.HelixClient.GetAppAccessToken(),
})
if err != nil {
app.Log.Errorw("Error creating new helix client",
"err", err,
)
}
uid := ivr.IDByUsername(channel)
if uid == "xd" {
return fmt.Sprintf("Could not find user with name %v", channel)
}
resp, err := client.GetEventSubSubscriptions(&helix.EventSubSubscriptionsParams{
UserID: uid,
})
if err != nil {
app.Log.Errorw("Error getting EventSub subscriptions",
"resp", resp,
"err", err,
)
return "Something went wrong FeelsBadMan"
}
app.Log.Infof("%+v\n", resp)
if resp.StatusCode != eventSubResponseOK {
return "Subscription was not found FeelsBadMan"
}
if len(resp.Data.EventSubSubscriptions) == 0 {
return "No such subscription found"
}
eventSubID := resp.Data.EventSubSubscriptions[0].ID
resp2, err := client.RemoveEventSubSubscription(eventSubID)
if err != nil {
app.Log.Errorw("Error getting EventSub subscriptions",
"resp", resp,
"err", err,
)
return "Something went wrong FeelsBadMan"
}
if resp2.StatusCode != eventSubResponseNoContent {
return "Subscription was not found FeelsBadMan"
}
app.Log.Infof("%+v\n", resp2)
return fmt.Sprintf("Successfully deleted live notification for channel %s; id=%v", channel, uid)
}