This commit is contained in:
Fijxu 2025-02-17 01:27:29 -03:00
parent a0f10e2dd1
commit 338685398e
Signed by: Fijxu
GPG key ID: 32C1DDF333EDA6A4
4 changed files with 164 additions and 69 deletions

View file

@ -6,7 +6,6 @@ import (
func createDb(db *sql.DB) error { func createDb(db *sql.DB) error {
var exists bool var exists bool
// rows := db.QueryRow("SELECT EXISTS (SELECT 1 FROM sqlite_schema WHERE type='table' AND name='seventv_ids') AND EXISTS (SELECT 1 FROM sqlite_schema WHERE type='table' AND name='seventv_ids');")
err := db.QueryRow(`SELECT EXISTS (SELECT 1 FROM sqlite_schema WHERE type='table' AND name='seventv_ids') AND EXISTS (SELECT 1 FROM sqlite_schema WHERE type='table' AND name='seventv_ids');`).Scan(&exists) err := db.QueryRow(`SELECT EXISTS (SELECT 1 FROM sqlite_schema WHERE type='table' AND name='seventv_ids') AND EXISTS (SELECT 1 FROM sqlite_schema WHERE type='table' AND name='seventv_ids');`).Scan(&exists)
if err != nil { if err != nil {
return err return err

View file

@ -34,7 +34,7 @@ func (s *Gql) getUserID(username string) (string, error) {
if err != nil { if err != nil {
return "", logger.Error().GetCtx().Err() return "", logger.Error().GetCtx().Err()
} }
logger.Trace().Msg(string(data)) // logger.Trace().Msg(string(data))
request, err := http.NewRequest("POST", "https://gql.twitch.tv/gql", bytes.NewBuffer(data)) request, err := http.NewRequest("POST", "https://gql.twitch.tv/gql", bytes.NewBuffer(data))
if err != nil { if err != nil {
@ -52,6 +52,9 @@ func (s *Gql) getUserID(username string) (string, error) {
defer res.Body.Close() defer res.Body.Close()
body, err := io.ReadAll(res.Body) body, err := io.ReadAll(res.Body)
if err != nil {
logger.Error().Msg("Failed to get user ID from Twitch GQL: " + err.Error())
}
return string(body), nil return string(body), nil
} }

View file

@ -17,11 +17,9 @@ import (
// } // }
type _Bttv struct { type _Bttv struct {
Badges []struct { Name string `json:"name"`
Name string `json:"name"` Url map[string]string `json:"url"`
Url map[string]string `json:"url"` Users []string `json:"users"`
Users []string `json:"users"`
} `json:"badges"`
} }
// TODO // TODO
@ -51,6 +49,18 @@ type defaultFormat struct {
Users []string `json:"users"` Users []string `json:"users"`
} }
type _Homies struct {
ID string `json:"id"`
// Name string `json:"name"`
// Url struct {
// Image1 string `json:"1"`
// Image2 string `json:"2"`
// Image4 string `json:"4"`
// } `json:"url"`
// Users []string `json:"users"`
defaultFormat
}
type _FrankerFz struct { type _FrankerFz struct {
Name string `json:"name"` Name string `json:"name"`
Color string `json:"color"` Color string `json:"color"`
@ -94,16 +104,17 @@ type _FrankerFzAp struct {
type Format struct { type Format struct {
wg sync.WaitGroup wg sync.WaitGroup
SevenTv SevenTvBadges `json:"seventv"` SevenTv *[]SevenTvBadges `json:"seventv"`
Chatterino []defaultFormat `json:"chatterino"` Chatterino []defaultFormat `json:"chatterino"`
Ffz []_FrankerFz `json:"frankerfacez"` Ffz []_FrankerFz `json:"frankerfacez"`
FfzAp []_FrankerFzAp `json:"frankerfacez_ap"` FfzAp []_FrankerFzAp `json:"frankerfacez_ap"`
Bttv _Bttv `json:"betterttv"` Bttv []defaultFormat `json:"betterttv"`
DankChat []defaultFormat `json:"dankchat"` DankChat []defaultFormat `json:"dankchat"`
Homies []defaultFormat `json:"homies"` Homies []_Homies `json:"homies"`
PurpleTv []defaultFormat `json:"purpletv"` PurpleTv []defaultFormat `json:"purpletv"`
Chatty []defaultFormat `json:"chatty"` Chatty []defaultFormat `json:"chatty"`
Chatsen []defaultFormat `json:"chatsen"` Chatsen []defaultFormat `json:"chatsen"`
Twitch []defaultFormat `json:"twitch"`
} }
// Done // Done
@ -282,51 +293,68 @@ func formatHomiesBadges(format *Format) {
data.getBadges() data.getBadges()
data.getBadgesTwo() data.getBadgesTwo()
// var mergedBadges []Homies
// for i := range data.Badges.Badges {
// mergedBadges[data.Badges.Badges[i].Tooltip] = &badges1.Badges[i]
// }
// // Iterate through the second set of badges
// for _, badge := range badges2.Badges {
// // Check if a badge with the same tooltip exists in the map
// if existingBadge, ok := badgeMap[badge.Tooltip]; ok {
// // Combine users if the existing badge has users
// if badge.Users != nil {
// existingBadge.Users = append(existingBadge.Users, badge.Users...)
// }
// } else {
// // Add new badge to the map and the badges1.Badges slice
// badgeMap[badge.Tooltip] = &badge
// badges1.Badges = append(badges1.Badges, badge)
// }
// }
for _, badge := range data.Badges.Badges { for _, badge := range data.Badges.Badges {
format.Homies = append(format.Homies, struct { format.Homies = append(format.Homies, struct {
Name string `json:"name"` ID string `json:"id"`
Url struct { defaultFormat
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
} `json:"url"`
Users []string `json:"users"`
}{ }{
Name: badge.Tooltip, ID: badge.ID,
Url: struct { defaultFormat: defaultFormat{
Image1 string `json:"1"` Name: badge.Tooltip,
Image2 string `json:"2"` Url: struct {
Image4 string `json:"4"` Image1 string `json:"1"`
}{ Image2 string `json:"2"`
Image1: badge.Image1, Image4 string `json:"4"`
Image2: badge.Image2, }{
Image4: badge.Image3, Image1: badge.Image1,
Image2: badge.Image2,
Image4: badge.Image3,
},
Users: badge.Users,
}, },
Users: badge.Users,
}) })
} }
for _, badge := range data.BadgesTwo.Badges { for _, badge := range data.BadgesTwo.Badges {
format.Homies = append(format.Homies, struct { format.Homies = append(format.Homies, struct {
Name string `json:"name"` ID string `json:"id"`
Url struct { defaultFormat
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
} `json:"url"`
Users []string `json:"users"`
}{ }{
Name: badge.Tooltip, // ID: badge.ID,
Url: struct { defaultFormat: defaultFormat{
Image1 string `json:"1"` Name: badge.Tooltip,
Image2 string `json:"2"` Url: struct {
Image4 string `json:"4"` Image1 string `json:"1"`
}{ Image2 string `json:"2"`
Image1: badge.Image1, Image4 string `json:"4"`
Image2: badge.Image2, }{
Image4: badge.Image3, Image1: badge.Image1,
Image2: badge.Image2,
Image4: badge.Image3,
},
Users: badge.Users,
}, },
Users: badge.Users,
}) })
} }
} }
@ -452,6 +480,38 @@ func formatChatsen(format *Format) {
} }
} }
func formatTwitch(format *Format) {
// defer format.wg.Done()
data := &Twitch{}
data.getBadges()
for _, badge := range *(data) {
for _, version := range badge.Versions {
format.Twitch = append(format.Twitch, struct {
Name string `json:"name"`
Url struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
} `json:"url"`
Users []string `json:"users"`
}{
Name: version.Title,
Url: struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
}{
Image1: version.ImageURL1X,
Image2: version.ImageURL2X,
Image4: version.ImageURL4X,
},
Users: []string{},
})
}
}
}
// func formatSevenTvBadges() string { // func formatSevenTvBadges() string {
// data := &SevenTv{} // data := &SevenTv{}
// data.getBadges() // data.getBadges()
@ -467,7 +527,7 @@ func formatSevenTvBadges(format *Format) {
data := &SevenTv{} data := &SevenTv{}
data.getBadges() data.getBadges()
format.SevenTv = data.Badges format.SevenTv = &data.Badges.Data.Cosmetics.Badges
// badges, err := json.Marshal(data.Badges.Data.Cosmetics) // badges, err := json.Marshal(data.Badges.Data.Cosmetics)
// if err != nil { // if err != nil {
@ -502,16 +562,17 @@ func formatAllBadges() string {
format := &Format{} format := &Format{}
// format.wg.Add(7) // format.wg.Add(7)
formatSevenTvBadges(format) // formatSevenTvBadges(format)
// formatChatterino(format) // formatChatterino(format)
// formatFfz(format) // formatFfz(format)
// formatFfzAp(format) // formatFfzAp(format)
// formatDankChat(format) // formatDankChat(format)
// formatChatsen(format) // formatChatsen(format)
// go formatBttv(format) // go formatBttv(format)
// formatHomiesBadges(format) formatHomiesBadges(format)
// formatPurpleTv(format) // formatPurpleTv(format)
// formatChatty(format) // formatChatty(format)
// formatTwitch(format)
// format.wg.Wait() // format.wg.Wait()

View file

@ -27,19 +27,12 @@ type Chatterino struct {
} }
type SevenTvBadges struct { type SevenTvBadges struct {
Data struct { ID string `json:"id"`
Cosmetics struct { Kind string `json:"kind"`
Badges []struct { Name string `json:"name"`
ID string `json:"id"` Tooltip string `json:"tooltip"`
Kind string `json:"kind"` Tag string `json:"tag"`
Name string `json:"name"` Typename string `json:"__typename"`
Tooltip string `json:"tooltip"`
Tag string `json:"tag"`
Typename string `json:"__typename"`
} `json:"badges"`
Typename string `json:"__typename"`
} `json:"cosmetics"`
} `json:"data"`
} }
type SevenTv struct { type SevenTv struct {
@ -62,7 +55,14 @@ type SevenTv struct {
} `json:"data"` } `json:"data"`
} }
// 7tv Badges // 7tv Badges
Badges SevenTvBadges `json:"sevenTvBadges"` Badges struct {
Data struct {
Cosmetics struct {
Badges []SevenTvBadges `json:"badges"`
Typename string `json:"__typename"`
} `json:"cosmetics"`
} `json:"data"`
} `json:"sevenTvBadges"`
// 7tv Paints // 7tv Paints
Name string `json:"name"` Name string `json:"name"`
Paints struct { Paints struct {
@ -212,6 +212,29 @@ type Chatsen struct {
} }
} }
// Twitch
type ClickAction string
const (
SubscribeToChannel ClickAction = "subscribe_to_channel"
Turbo ClickAction = "turbo"
VisitURL ClickAction = "visit_url"
)
type Twitch []struct {
SetID string `json:"set_id"`
Versions []struct {
ID string `json:"id"`
ImageURL1X string `json:"image_url_1x"`
ImageURL2X string `json:"image_url_2x"`
ImageURL4X string `json:"image_url_4x"`
Title string `json:"title"`
Description string `json:"description"`
ClickAction *ClickAction `json:"click_action"`
ClickURL *string `json:"click_url"`
} `json:"versions"`
}
func doGetRequest(url string) []byte { func doGetRequest(url string) []byte {
request, err := http.NewRequest("GET", url, nil) request, err := http.NewRequest("GET", url, nil)
if err != nil { if err != nil {
@ -277,7 +300,7 @@ func (s *SevenTv) getBadges() *SevenTv {
} }
res := doPostRequest("https://7tv.io/v3/gql", data) res := doPostRequest("https://7tv.io/v3/gql", data)
logger.Trace().Msg(string(res)) // logger.Trace().Msg(string(res))
err = json.Unmarshal(res, &s.Badges) err = json.Unmarshal(res, &s.Badges)
if err != nil { if err != nil {
@ -477,3 +500,12 @@ func (s *Chatsen) getBadges() *Chatsen {
} }
return s return s
} }
func (s *Twitch) getBadges() *Twitch {
res := doGetRequest("https://api.ivr.fi/v2/twitch/badges/global")
err := json.Unmarshal(res, &s)
if err != nil {
logger.Error().Msg(err.Error())
}
return s
}