diff --git a/cmd/vanity-tester-backend/endpoints.go b/cmd/vanity-tester-backend/endpoints.go index cf47412..3ac844d 100644 --- a/cmd/vanity-tester-backend/endpoints.go +++ b/cmd/vanity-tester-backend/endpoints.go @@ -10,8 +10,7 @@ func root(w http.ResponseWriter, r *http.Request) { } func getAllBadges(w http.ResponseWriter, r *http.Request) { - asd := parseAllBadges() - io.WriteString(w, asd) + io.WriteString(w, formatAllBadges()) } // func sevenTvPaints(w http.ResponseWriter, r *http.Request) { diff --git a/cmd/vanity-tester-backend/parser.go b/cmd/vanity-tester-backend/parser.go index 6ae5844..eb02dc6 100644 --- a/cmd/vanity-tester-backend/parser.go +++ b/cmd/vanity-tester-backend/parser.go @@ -1,6 +1,9 @@ package main -import "encoding/json" +import ( + "encoding/json" + "strconv" +) type _Chatterino struct { Badges []struct { @@ -10,31 +13,81 @@ type _Chatterino struct { } `json:"badges"` } -type _FrankerFz struct { - Badges []struct { - Name string `json:"name"` - Url string `json:"url"` - Users []string `json:"users"` - } `json:"badges"` -} - type _SevenTv struct { Badges []struct { Name string `json:"name"` Url string `json:"url"` Users []string `json:"users"` } `json:"badges"` - Paints []struct { - } + // Paints []struct { + // } +} + +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"` +} + +type _Chatty struct{} + +type _DankChat struct { + Badges []struct { + Name string `json:"name"` + Url string `json:"url"` + Users []string `json:"users"` + } `json:"badges"` +} + +type _Homies struct { + CustomBadges []struct { + Name string `json:"name"` + Url string `json:"url"` + Users []string `json:"users"` + } `json:"customBadges"` + 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 { Chatterino _Chatterino `json:"chatterino"` - SevenTv _SevenTv `json:"7tv"` + SevenTv _SevenTv `json:"seventv"` Ffz _FrankerFz `json:"ffz"` + Bttv _Bttv `json:"bttv"` + DankChat _DankChat `json:"dankchat"` + Homies _Homies `json:"homies"` + PurpleTv _PurpleTv `json:"purpletv"` } -func parseChatterino(format *Format) { +// Done +func formatChatterino(format *Format) { chatterino := &Chatterino{} chatterino.getBadges() @@ -51,30 +104,115 @@ func parseChatterino(format *Format) { } } -func parseSevenTv(format *Format) { - sevenTv := &Chatterino{} - sevenTv.getBadges() +// TODO +func formatSevenTv(format *Format) { + data := &SevenTv{} + data.getBadges() - for _, badge := range sevenTv.Badges { - format.Chatterino.Badges = append(format.Chatterino.Badges, struct { +} + +// Done +func formatFfz(format *Format) { + 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"` + }{ + ID: badge.ID, + Name: badge.Title, + Url: badge.Urls, + }) + } + + for id, userIDs := range data.Users { + badgeID, err := strconv.ParseInt(id, 10, 64) + if err != nil { + continue + } + + for i := range format.Ffz.Badges { + if format.Ffz.Badges[i].ID == badgeID { + for _, userID := range userIDs { + format.Ffz.Badges[i].Users = append(format.Ffz.Badges[i].Users, strconv.FormatInt(userID, 10)) + } + break + } + } + } +} + +// Done +func formatDankChat(format *Format) { + data := &DankChat{} + data.getBadges() + + for _, badge := range data.Badges { + format.DankChat.Badges = append(format.DankChat.Badges, struct { Name string `json:"name"` Url string `json:"url"` Users []string `json:"users"` }{ - Name: badge.Tooltip, - Url: badge.Image3, + Name: badge.Type, + Url: badge.URL, Users: badge.Users, }) } } -func parseAllBadges() string { +// func parseHomies(format *Format) { +// data := &Homies{} +// data.getBadges() + +// for _, badge := range data.Badges { +// format.Homies.Badges = append(format.Homies.Badges, struct { +// Name string `json:"name"` +// Url string `json:"url"` +// Users []string `json:"users"` +// }{ +// Name: badge.Tooltip, +// Url: badge.Image3, +// Users: []string{badge.Username}, +// }) +// } +// } + +// Done +func formatPurpleTv(format *Format) { + data := &PurpleTV{} + data.getBadges() + + var users []string + for _, user := range data.Users { + users = append(users, user.UserName) + } + + format.PurpleTv.Badges = append(format.PurpleTv.Badges, struct { + Name string `json:"name"` + Url string `json:"url"` + Users []string `json:"users"` + }{ + Name: "PurpleTV Supporter", + Url: data.DefaultBadgeURL, + Users: users, + }) +} + +func formatAllBadges() string { format := &Format{} - parseChatterino(format) + // formatChatterino(format) + // formatSevenTv(format) + formatFfz(format) + // formatDankChat(format) + // parseHomies(format) + // formatPurpleTv(format) json, _ := json.Marshal(format) - return string(json) // bttv := &Bttv{} // ffz := &FrankerFz{} diff --git a/cmd/vanity-tester-backend/providers.go b/cmd/vanity-tester-backend/providers.go index f778697..4749913 100644 --- a/cmd/vanity-tester-backend/providers.go +++ b/cmd/vanity-tester-backend/providers.go @@ -16,6 +16,15 @@ type GqlQuery struct { Query string `json:"query"` } +type Chatterino struct { + Badges []struct { + Tooltip string `json:"tooltip"` + Image1 string `json:"image1"` + Image2 string `json:"image2"` + Image3 string `json:"image3"` + Users []string `json:"users"` + } `json:"badges"` +} type SevenTv struct { Query GqlQuery `json:"query"` UserID string @@ -35,21 +44,8 @@ type SevenTv struct { } `json:"data"` } `json:"sevenTvBadges"` } - -type Chatterino struct { - Badges []struct { - Tooltip string `json:"tooltip"` - Image1 string `json:"image1"` - Image2 string `json:"image2"` - Image3 string `json:"image3"` - Users []string `json:"users"` - } `json:"badges"` -} - -type Bttv struct{} - type FrankerFz struct { - Badge struct { + Badges []struct { ID int64 `json:"id"` Name string `json:"name"` Title string `json:"title"` @@ -63,16 +59,64 @@ type FrankerFz struct { Users map[string][]int64 `json:"users"` } +type Bttv struct{} + type Chatty struct{} type DankChat struct { - Type string `json:"type"` - URL string `json:"url"` - Users []string `json:"users"` + Badges []struct { + Type string `json:"type"` + URL string `json:"url"` + Users []string `json:"users"` + } } -type Homies struct{} -type PurpleTV struct{} +type Homies struct { + UserBadges struct { + Badges []struct { + UserID string `json:"userId"` + BadgeID string `json:"badgeId"` + BadgeFileType string `json:"badgeFileType"` + Username string `json:"username"` + Tooltip string `json:"tooltip"` + Image1 string `json:"image1"` + Image2 string `json:"image2"` + Image3 string `json:"image3"` + V int64 `json:"__v"` + } `json:"badges"` + } + Badges struct { + Badges []struct { + ID string `json:"id"` + Tooltip string `json:"tooltip"` + Image1 string `json:"image1"` + Users []string `json:"users"` + Image2 string `json:"image2"` + Image3 string `json:"image3"` + } `json:"badges"` + } + BadgesTwo struct { + Badges []struct { + Tooltip string `json:"tooltip"` + Image1 string `json:"image1"` + Users []string `json:"users"` + Image2 string `json:"image2"` + Image3 string `json:"image3"` + } `json:"badges"` + } +} + +type PurpleTV struct { + DefaultBadgeURL string `json:"defaultBadgeUrl"` + Users []struct { + UserID string `json:"userId"` + UserName string `json:"userName"` + DisplayName string `json:"displayName"` + Date string `json:"date"` // Always "null" + Type interface{} `json:"type"` + BadgeURL string `json:"badgeUrl"` + } `json:"users"` +} func doGetRequest(url string) []byte { request, err := http.NewRequest("GET", url, nil) @@ -238,8 +282,8 @@ func (s *Chatterino) getBadges() *Chatterino { return s } -func (s *Bttv) getBadges() *Bttv { - res := doGetRequest("https://api.betterttv.net/3/cached/badges/twitch") +func (s *FrankerFz) getBadges() *FrankerFz { + res := doGetRequest("https://api.frankerfacez.com/v1/badges/ids") err := json.Unmarshal(res, &s) if err != nil { logger.Error().Msg(err.Error()) @@ -247,8 +291,8 @@ func (s *Bttv) getBadges() *Bttv { return s } -func (s *FrankerFz) getBadges() *FrankerFz { - res := doGetRequest("https://api.frankerfacez.com/v1/badges/ids") +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()) @@ -267,6 +311,42 @@ func (s *Chatty) getBadges() *Chatty { func (s *DankChat) getBadges() *DankChat { res := doGetRequest("https://flxrs.com/api/badges") + err := json.Unmarshal(res, &s.Badges) + if err != nil { + logger.Error().Msg(err.Error()) + } + return s +} + +func (s *Homies) getUserBadges() *Homies { + res := doGetRequest("https://chatterinohomies.com/api/badges/list") + err := json.Unmarshal(res, &s.UserBadges) + if err != nil { + logger.Error().Msg(err.Error()) + } + return s +} + +func (s *Homies) getBadges() *Homies { + res := doGetRequest("https://itzalex.github.io/badges") + err := json.Unmarshal(res, &s.Badges) + if err != nil { + logger.Error().Msg(err.Error()) + } + return s +} + +func (s *Homies) getBadgesTwo() *Homies { + res := doGetRequest("https://itzalex.github.io/badges2") + err := json.Unmarshal(res, &s.BadgesTwo) + if err != nil { + logger.Error().Msg(err.Error()) + } + return s +} + +func (s *PurpleTV) getBadges() *PurpleTV { + res := doGetRequest("https://api.nopbreak.ru/orange/donations") err := json.Unmarshal(res, &s) if err != nil { logger.Error().Msg(err.Error())