Compare commits

...
Sign in to create a new pull request.

5 commits

Author SHA1 Message Date
338685398e
asdklf 2025-02-17 01:27:29 -03:00
a0f10e2dd1
a 2025-02-15 02:13:20 -03:00
f5520ae3b3
akjdsajuhtdgsaydyuasdgasiudas 2025-02-03 02:36:47 -03:00
fd1fef7e02
asd 2025-02-02 23:47:23 -03:00
0ff2f11956
asd 2025-02-02 14:03:19 -03:00
6 changed files with 508 additions and 147 deletions

View file

@ -6,7 +6,6 @@ import (
func createDb(db *sql.DB) error {
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)
if err != nil {
return err

View file

@ -18,9 +18,9 @@ func getSevenTvPaints(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, formatSevenTvPaints())
}
func getSevenTvBadges(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, formatSevenTvBadges())
}
// func getSevenTvBadges(w http.ResponseWriter, r *http.Request) {
// io.WriteString(w, formatSevenTvBadges())
// }
func sevenTvUserCosmetics(w http.ResponseWriter, r *http.Request) {
svt := &SevenTv{}
@ -30,7 +30,7 @@ func sevenTvUserCosmetics(w http.ResponseWriter, r *http.Request) {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
logger.Trace().Msg("sevenTvUserCosmetics: user: " + userID)
// logger.Trace().Msg("sevenTvUserCosmetics: user: " + userID)
io.WriteString(w, formatSevenTvUserCosmetics(userID))
}

View file

@ -34,7 +34,7 @@ func (s *Gql) getUserID(username string) (string, error) {
if err != nil {
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))
if err != nil {
@ -52,6 +52,9 @@ func (s *Gql) getUserID(username string) (string, error) {
defer res.Body.Close()
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
}

View file

@ -59,8 +59,8 @@ func main() {
mux.HandleFunc("/", root)
mux.HandleFunc("/badges", middleware(getAllBadges))
mux.HandleFunc("/7tv/badges", middleware(getSevenTvBadges))
mux.HandleFunc("/7tv/paints", middleware(getSevenTvPaints))
// mux.HandleFunc("/7tvbadges", middleware(getSevenTvBadges))
mux.HandleFunc("/paints", middleware(getSevenTvPaints))
// CONSIDERATION: github.com/gorilla/mux may be an option to make use of something like this:
// mux.HandleFunc("/7tv/cosmetics/{user}", middleware(sevenTvUserCosmetics))
// For now I will just trim the path

View file

@ -6,116 +6,197 @@ import (
"sync"
)
type _Chatterino struct {
Badges []struct {
Name string `json:"name"`
Url string `json:"url"`
Users []string `json:"users"`
} `json:"badges"`
}
// type _Chatterino []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"`
// }
type _Bttv struct {
Badges []struct {
Name string `json:"name"`
Url map[string]string `json:"url"`
Users []string `json:"users"`
} `json:"badges"`
}
type _FrankerFz struct {
Badges []struct {
ID int64 `json:"id"`
Name string `json:"name"`
Url map[string]string `json:"url"`
Users []string `json:"users"`
} `json:"badges"`
Name string `json:"name"`
Url map[string]string `json:"url"`
Users []string `json:"users"`
}
// TODO
type _Chatty struct {
Badges []struct {
Name string `json:"name"`
Url string `json:"url"`
Users []string `json:"users"`
} `json:"badges"`
}
// type _Chatty 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"`
// }
type _DankChat struct {
Badges []struct {
Name string `json:"name"`
Url string `json:"url"`
Users []string `json:"users"`
} `json:"badges"`
// type _DankChat []struct {
// Name string `json:"name"`
// Url string `json:"url"`
// Users []string `json:"users"`
// }
type defaultFormat 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"`
}
type _Homies struct {
Badges []struct {
Name string `json:"name"`
Url string `json:"url"`
Users []string `json:"users"`
} `json:"badges"`
BadgesTwo []struct {
Name string `json:"name"`
Url string `json:"url"`
Users []string `json:"users"`
} `json:"badges2"`
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 _PurpleTv struct {
Badges []struct {
Name string `json:"name"`
Url string `json:"url"`
Users []string `json:"users"`
} `json:"badges"`
type _FrankerFz struct {
Name string `json:"name"`
Color string `json:"color"`
ID int64 `json:"id"`
Url struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
} `json:"url"`
Users []string `json:"users"`
}
type _FrankerFzAp struct {
ID string `json:"id"`
BadgeColor *string `json:"badge_color,omitempty"`
BadgeIsColored *int64 `json:"badge_is_colored,omitempty"`
Tier int64 `json:"tier"`
Admin *int64 `json:"admin,omitempty"`
}
// type _Homies struct {
// Badges []struct {
// Name string `json:"name"`
// Url string `json:"url"`
// Users []string `json:"users"`
// } `json:"badges"`
// BadgesTwo []struct {
// Name string `json:"name"`
// Url string `json:"url"`
// Users []string `json:"users"`
// } `json:"badges2"`
// }
// type _PurpleTv struct {
// Badges []struct {
// Name string `json:"name"`
// Url string `json:"url"`
// Users []string `json:"users"`
// } `json:"badges"`
// }
type Format struct {
wg sync.WaitGroup
Chatterino _Chatterino `json:"chatterino"`
Ffz _FrankerFz `json:"ffz"`
Bttv _Bttv `json:"bttv"`
DankChat _DankChat `json:"dankchat"`
Homies _Homies `json:"homies"`
PurpleTv _PurpleTv `json:"purpletv"`
Chatty _Chatty `json:"chatty"`
SevenTv *[]SevenTvBadges `json:"seventv"`
Chatterino []defaultFormat `json:"chatterino"`
Ffz []_FrankerFz `json:"frankerfacez"`
FfzAp []_FrankerFzAp `json:"frankerfacez_ap"`
Bttv []defaultFormat `json:"betterttv"`
DankChat []defaultFormat `json:"dankchat"`
Homies []_Homies `json:"homies"`
PurpleTv []defaultFormat `json:"purpletv"`
Chatty []defaultFormat `json:"chatty"`
Chatsen []defaultFormat `json:"chatsen"`
Twitch []defaultFormat `json:"twitch"`
}
// Done
func formatChatterino(format *Format) {
defer format.wg.Done()
// defer format.wg.Done()
chatterino := &Chatterino{}
chatterino.getBadges()
for _, badge := range chatterino.Badges {
format.Chatterino.Badges = append(format.Chatterino.Badges, struct {
Name string `json:"name"`
Url string `json:"url"`
format.Chatterino = append(format.Chatterino, 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: badge.Tooltip,
Url: badge.Image3,
Name: badge.Tooltip,
Url: struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
}{
Image1: badge.Image1,
Image2: badge.Image2,
Image4: badge.Image3,
},
Users: badge.Users,
})
}
}
// Done
func formatFfz(format *Format) {
defer format.wg.Done()
// defer format.wg.Done()
data := &FrankerFz{}
data.getBadges()
for _, badge := range data.Badges {
format.Ffz.Badges = append(format.Ffz.Badges, struct {
ID int64 `json:"id"`
Name string `json:"name"`
Url map[string]string `json:"url"`
Users []string `json:"users"`
format.Ffz = append(format.Ffz, struct {
Name string `json:"name"`
Color string `json:"color"`
ID int64 `json:"id"`
Url struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
} `json:"url"`
Users []string `json:"users"`
}{
ID: badge.ID,
Name: badge.Title,
Url: badge.Urls,
Name: badge.Name,
Color: badge.Color,
ID: badge.ID,
Url: struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
}{
Image1: badge.Image,
Image2: badge.Image,
Image4: badge.Image,
},
})
// for _, badge := range data.Badges {
// format.Ffz = append(format.Ffz, 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: badge.Name,
// Name: badge.Name,
// Name: badge.Name,
// }
// )
// }
}
for id, userIDs := range data.Users {
@ -124,10 +205,10 @@ func formatFfz(format *Format) {
continue
}
for i := range format.Ffz.Badges {
if format.Ffz.Badges[i].ID == badgeID {
for i := range format.Ffz {
if format.Ffz[i].ID == badgeID {
for _, userID := range userIDs {
format.Ffz.Badges[i].Users = append(format.Ffz.Badges[i].Users, strconv.FormatInt(userID, 10))
format.Ffz[i].Users = append(format.Ffz[i].Users, strconv.FormatInt(userID, 10))
}
break
}
@ -135,6 +216,31 @@ func formatFfz(format *Format) {
}
}
// Done?
func formatFfzAp(format *Format) {
// defer format.wg.Done()
data := &FrankerFzAp{}
data.getBadges()
// fmt.Println((*data)[0])
for _, badge := range *data {
format.FfzAp = append(format.FfzAp, struct {
ID string `json:"id"`
BadgeColor *string `json:"badge_color,omitempty"`
BadgeIsColored *int64 `json:"badge_is_colored,omitempty"`
Tier int64 `json:"tier"`
Admin *int64 `json:"admin,omitempty"`
}{
ID: badge.ID,
BadgeColor: badge.BadgeColor,
BadgeIsColored: badge.BadgeIsColored,
Tier: badge.Tier,
Admin: badge.Admin,
})
}
}
// TODO
func formatBttv(format *Format) {
defer format.wg.Done()
@ -145,79 +251,168 @@ func formatBttv(format *Format) {
// Done
func formatDankChat(format *Format) {
defer format.wg.Done()
// defer format.wg.Done()
data := &DankChat{}
data.getBadges()
// Gets rid of the "DankChat Top Supporter" badge ;)
for i, badge := range data.Badges {
if badge.Type == "DankChat Top Supporter" {
data.Badges = append(data.Badges[:i], data.Badges[i+1:]...)
}
}
for _, badge := range data.Badges {
format.DankChat.Badges = append(format.DankChat.Badges, struct {
Name string `json:"name"`
Url string `json:"url"`
format.DankChat = append(format.DankChat, 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: badge.Type,
Url: badge.URL,
Name: badge.Type,
Url: struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
}{
Image1: badge.URL,
Image2: badge.URL,
Image4: badge.URL,
},
Users: badge.Users,
})
}
}
func formatHomiesBadges(format *Format) {
defer format.wg.Done()
// defer format.wg.Done()
data := &Homies{}
data.getBadges()
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 {
format.Homies.Badges = append(format.Homies.Badges, struct {
Name string `json:"name"`
Url string `json:"url"`
Users []string `json:"users"`
format.Homies = append(format.Homies, struct {
ID string `json:"id"`
defaultFormat
}{
Name: badge.Tooltip,
Url: badge.Image3,
Users: badge.Users,
ID: badge.ID,
defaultFormat: defaultFormat{
Name: badge.Tooltip,
Url: struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
}{
Image1: badge.Image1,
Image2: badge.Image2,
Image4: badge.Image3,
},
Users: badge.Users,
},
})
}
for _, badge := range data.BadgesTwo.Badges {
format.Homies.BadgesTwo = append(format.Homies.BadgesTwo, struct {
Name string `json:"name"`
Url string `json:"url"`
Users []string `json:"users"`
format.Homies = append(format.Homies, struct {
ID string `json:"id"`
defaultFormat
}{
Name: badge.Tooltip,
Url: badge.Image3,
Users: badge.Users,
// ID: badge.ID,
defaultFormat: defaultFormat{
Name: badge.Tooltip,
Url: struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
}{
Image1: badge.Image1,
Image2: badge.Image2,
Image4: badge.Image3,
},
Users: badge.Users,
},
})
}
}
// Done
func formatPurpleTv(format *Format) {
defer format.wg.Done()
// defer format.wg.Done()
data := &PurpleTV{}
data.getBadges()
var users []string
for _, user := range data.Users {
users = append(users, user.UserName)
if user.UserID == "157861306" {
continue
}
users = append(users, user.UserID)
}
format.PurpleTv.Badges = append(format.PurpleTv.Badges, struct {
Name string `json:"name"`
Url string `json:"url"`
format.PurpleTv = append(format.PurpleTv, 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: "PurpleTV Supporter",
Url: data.DefaultBadgeURL,
Name: "PurpleTV Developer",
// ID of user @n0pbreak
Users: []string{"157861306"},
})
format.PurpleTv = append(format.PurpleTv, 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: "PurpleTV Supporter",
Url: struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
}{
Image1: data.DefaultBadgeURL,
Image2: data.DefaultBadgeURL,
Image4: data.DefaultBadgeURL,
},
Users: users,
})
}
// TODO: Replace the data from the Chatty struct in place to use less memory.
func formatChatty(format *Format) {
defer format.wg.Done()
// defer format.wg.Done()
data := &Chatty{}
newData := Chatty{}
data.getBadges()
@ -230,34 +425,122 @@ func formatChatty(format *Format) {
}
for _, badge := range newData {
format.Chatty.Badges = append(format.Chatty.Badges, struct {
Name string `json:"name"`
Url string `json:"url"`
format.Chatty = append(format.Chatty, 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: badge.MetaTitle,
Url: badge.ImageURL4,
Name: badge.MetaTitle,
Url: struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
}{
// Chatty API doesn't include the URI schemein their imageURLs
Image1: "https:" + badge.ImageURL,
Image2: "https:" + badge.ImageURL2,
Image4: "https:" + badge.ImageURL4,
},
Users: badge.Usernames,
})
}
}
func formatSevenTvBadges() string {
func formatChatsen(format *Format) {
// defer format.wg.Done()
data := &Chatsen{}
data.getBadges()
for _, badge := range data.Badges {
format.Chatsen = append(format.Chatsen, 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: badge.Name,
Url: struct {
Image1 string `json:"1"`
Image2 string `json:"2"`
Image4 string `json:"4"`
}{
Image1: badge.Mipmap[0],
Image2: badge.Mipmap[0],
Image4: badge.Mipmap[0],
},
Users: badge.Users,
})
}
}
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 {
// data := &SevenTv{}
// data.getBadges()
// badges, err := json.Marshal(data.Badges.Data.Cosmetics)
// if err != nil {
// logger.Error().Msg(err.Error())
// }
// return string(badges)
// }
func formatSevenTvBadges(format *Format) {
data := &SevenTv{}
data.getBadges()
badges, err := json.Marshal(data.Badges.Data.Cosmetics)
if err != nil {
logger.Error().Msg(err.Error())
}
return string(badges)
format.SevenTv = &data.Badges.Data.Cosmetics.Badges
// badges, err := json.Marshal(data.Badges.Data.Cosmetics)
// if err != nil {
// logger.Error().Msg(err.Error())
// }
// return string(badges)
}
func formatSevenTvPaints() string {
data := &SevenTv{}
data.getPaints()
paints, err := json.Marshal(data.Paints.Data.Cosmetics)
paints, err := json.Marshal(data.Paints.Data.Cosmetics.Paints)
if err != nil {
logger.Error().Msg(err.Error())
}
@ -277,17 +560,21 @@ func formatSevenTvUserCosmetics(stvUserID string) string {
func formatAllBadges() string {
format := &Format{}
format.wg.Add(7)
// format.wg.Add(7)
go formatChatterino(format)
go formatFfz(format)
go formatDankChat(format)
go formatBttv(format)
go formatHomiesBadges(format)
go formatPurpleTv(format)
go formatChatty(format)
// formatSevenTvBadges(format)
// formatChatterino(format)
// formatFfz(format)
// formatFfzAp(format)
// formatDankChat(format)
// formatChatsen(format)
// go formatBttv(format)
formatHomiesBadges(format)
// formatPurpleTv(format)
// formatChatty(format)
// formatTwitch(format)
format.wg.Wait()
// format.wg.Wait()
json, err := json.Marshal(format)
if err != nil {

View file

@ -25,6 +25,16 @@ type Chatterino struct {
Users []string `json:"users"`
} `json:"badges"`
}
type SevenTvBadges struct {
ID string `json:"id"`
Kind string `json:"kind"`
Name string `json:"name"`
Tooltip string `json:"tooltip"`
Tag string `json:"tag"`
Typename string `json:"__typename"`
}
type SevenTv struct {
Query GqlQuery `json:"query"`
User struct {
@ -48,19 +58,13 @@ type SevenTv struct {
Badges struct {
Data struct {
Cosmetics struct {
Badges []struct {
ID string `json:"id"`
Kind string `json:"kind"`
Name string `json:"name"`
Tooltip string `json:"tooltip"`
Tag string `json:"tag"`
Typename string `json:"__typename"`
} `json:"badges"`
Typename string `json:"__typename"`
Badges []SevenTvBadges `json:"badges"`
Typename string `json:"__typename"`
} `json:"cosmetics"`
} `json:"data"`
} `json:"sevenTvBadges"`
// 7tv Paints
Name string `json:"name"`
Paints struct {
Data struct {
Cosmetics struct {
@ -109,6 +113,14 @@ type FrankerFz struct {
Users map[string][]int64 `json:"users"`
}
type FrankerFzAp []struct {
ID string `json:"id"`
BadgeColor *string `json:"badge_color,omitempty"`
BadgeIsColored *int64 `json:"badge_is_colored,omitempty"`
Tier int64 `json:"tier"`
Admin *int64 `json:"admin,omitempty"`
}
type Bttv []struct {
ID string `json:"id"`
Name string `json:"name"`
@ -190,6 +202,39 @@ type Chatty []struct {
Userids []string `json:"userids,omitempty"`
}
type Chatsen struct {
Badges []struct {
// ID string `json:"id"`
Name string `json:"name"`
// Description interface{} `json:"description"`
Mipmap []string `json:"mipmap"`
Users []string `json:"users"`
}
}
// 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 {
request, err := http.NewRequest("GET", url, nil)
if err != nil {
@ -255,7 +300,7 @@ func (s *SevenTv) getBadges() *SevenTv {
}
res := doPostRequest("https://7tv.io/v3/gql", data)
logger.Trace().Msg(string(res))
// logger.Trace().Msg(string(res))
err = json.Unmarshal(res, &s.Badges)
if err != nil {
@ -375,8 +420,8 @@ func (s *FrankerFz) getBadges() *FrankerFz {
return s
}
func (s *Bttv) getBadges() *Bttv {
res := doGetRequest("https://api.betterttv.net/3/cached/badges/twitch")
func (s *FrankerFzAp) getBadges() *FrankerFzAp {
res := doGetRequest("https://api.ffzap.com/v1/supporters")
err := json.Unmarshal(res, &s)
if err != nil {
logger.Error().Msg(err.Error())
@ -384,8 +429,8 @@ func (s *Bttv) getBadges() *Bttv {
return s
}
func (s *Chatty) getBadges() *Chatty {
res := doGetRequest("https://tduva.com/res/badges")
func (s *Bttv) getBadges() *Bttv {
res := doGetRequest("https://api.betterttv.net/3/cached/badges/twitch")
err := json.Unmarshal(res, &s)
if err != nil {
logger.Error().Msg(err.Error())
@ -437,3 +482,30 @@ func (s *PurpleTV) getBadges() *PurpleTV {
}
return s
}
func (s *Chatty) getBadges() *Chatty {
res := doGetRequest("https://tduva.com/res/badges")
err := json.Unmarshal(res, &s)
if err != nil {
logger.Error().Msg(err.Error())
}
return s
}
func (s *Chatsen) getBadges() *Chatsen {
res := doGetRequest("https://api.chatsen.app/account/badges")
err := json.Unmarshal(res, &s.Badges)
if err != nil {
logger.Error().Msg(err.Error())
}
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
}