add title and game to stream live announcement

This commit is contained in:
lyx0 2024-02-15 21:58:57 +01:00
parent 24cdb70f0b
commit a0bd453132
3 changed files with 61 additions and 7 deletions

View file

@ -133,6 +133,7 @@ func (app *application) handleCommand(message twitch.PrivateMessage) {
reply = app.createOfflineSubscription(target, cmdParams[2])
}
}
case "unnotify":
switch cmdParams[1] {
case "live":

View file

@ -14,6 +14,7 @@ import (
"github.com/julienschmidt/httprouter"
"github.com/lyx0/nourybot/internal/common"
"github.com/lyx0/nourybot/internal/data"
"github.com/lyx0/nourybot/pkg/ivr"
"github.com/nicklaw5/helix/v2"
)
@ -75,15 +76,19 @@ func (app *application) eventsubFollow(w http.ResponseWriter, r *http.Request, _
log.Printf("got stream online event webhook: %s is live\n", liveEvent.BroadcasterUserName)
w.WriteHeader(200)
w.Write([]byte("ok"))
app.SendNoContext("nouryxd", fmt.Sprintf("%s went live FeelsGoodMan", liveEvent.BroadcasterUserName))
game := ivr.GameByUsername(liveEvent.BroadcasterUserLogin)
title := ivr.TitleByUsername(liveEvent.BroadcasterUserLogin)
app.SendNoBanphrase("nouryxd", fmt.Sprintf("%s went live FeelsGoodMan Game: %s; Title: %s; https://twitch.tv/%s", liveEvent.BroadcasterUserName, game, title, liveEvent.BroadcasterUserLogin))
case helix.EventSubTypeStreamOffline:
var offlineEvent helix.EventSubStreamOfflineEvent
err = json.NewDecoder(bytes.NewReader(vals.Event)).Decode(&offlineEvent)
log.Printf("got stream online event webhook: %s is live\n", offlineEvent.BroadcasterUserName)
log.Printf("got stream offline event webhook: %s is now offline\n", offlineEvent.BroadcasterUserName)
w.WriteHeader(200)
w.Write([]byte("ok"))
app.SendNoContext("nouryxd", fmt.Sprintf("%s went offline FeelsBadMan", offlineEvent.BroadcasterUserName))
app.SendNoBanphrase("nouryxd", fmt.Sprintf("%s went offline FeelsBadMan", offlineEvent.BroadcasterUserName))
}
}

View file

@ -6,8 +6,56 @@ import (
"net/http"
)
type ivrIDByUsernameResponse struct {
ID string `json:"id"`
type ivrResponse struct {
ID string `json:"id"`
Stream ivrStream `json:"stream"`
}
type ivrStream struct {
Title string `json:"title"`
Game ivrGame `json:"game"`
}
type ivrGame struct {
DisplayName string `json:"displayName"`
}
func TitleByUsername(login string) string {
baseUrl := "https://api.ivr.fi/v2/twitch/user?login="
resp, err := http.Get(fmt.Sprintf("%s%s", baseUrl, login))
if err != nil {
return "xd"
}
defer resp.Body.Close()
responseList := make([]ivrResponse, 0)
_ = json.NewDecoder(resp.Body).Decode(&responseList)
if len(responseList) == 0 {
return "xd"
}
return responseList[0].Stream.Title
}
func GameByUsername(login string) string {
baseUrl := "https://api.ivr.fi/v2/twitch/user?login="
resp, err := http.Get(fmt.Sprintf("%s%s", baseUrl, login))
if err != nil {
return "xd"
}
defer resp.Body.Close()
responseList := make([]ivrResponse, 0)
_ = json.NewDecoder(resp.Body).Decode(&responseList)
if len(responseList) == 0 {
return "xd"
}
return responseList[0].Stream.Game.DisplayName
}
func IDByUsernameReply(username string) string {
@ -18,7 +66,7 @@ func IDByUsernameReply(username string) string {
return "xd"
}
responseList := make([]ivrIDByUsernameResponse, 0)
responseList := make([]ivrResponse, 0)
err = json.NewDecoder(resp.Body).Decode(&responseList)
if len(responseList) == 0 {
return "xd"
@ -38,7 +86,7 @@ func IDByUsername(username string) string {
defer resp.Body.Close()
responseList := make([]ivrIDByUsernameResponse, 0)
responseList := make([]ivrResponse, 0)
_ = json.NewDecoder(resp.Body).Decode(&responseList)
if len(responseList) == 0 {
return "xd"