297 lines
6.3 KiB
Go
297 lines
6.3 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strconv"
|
|
"sync"
|
|
)
|
|
|
|
type _Chatterino struct {
|
|
Badges []struct {
|
|
Name string `json:"name"`
|
|
Url string `json:"url"`
|
|
Users []string `json:"users"`
|
|
} `json:"badges"`
|
|
}
|
|
|
|
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"`
|
|
}
|
|
|
|
// TODO
|
|
type _Chatty struct {
|
|
Badges []struct {
|
|
Name string `json:"name"`
|
|
Url string `json:"url"`
|
|
Users []string `json:"users"`
|
|
} `json:"badges"`
|
|
}
|
|
|
|
type _DankChat struct {
|
|
Badges []struct {
|
|
Name string `json:"name"`
|
|
Url string `json:"url"`
|
|
Users []string `json:"users"`
|
|
} `json:"badges"`
|
|
}
|
|
|
|
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"`
|
|
}
|
|
|
|
// Done
|
|
func formatChatterino(format *Format) {
|
|
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"`
|
|
Users []string `json:"users"`
|
|
}{
|
|
Name: badge.Tooltip,
|
|
Url: badge.Image3,
|
|
Users: badge.Users,
|
|
})
|
|
}
|
|
}
|
|
|
|
// Done
|
|
func formatFfz(format *Format) {
|
|
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"`
|
|
}{
|
|
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
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// TODO
|
|
func formatBttv(format *Format) {
|
|
defer format.wg.Done()
|
|
data := &Bttv{}
|
|
data.getBadges()
|
|
|
|
}
|
|
|
|
// Done
|
|
func formatDankChat(format *Format) {
|
|
defer format.wg.Done()
|
|
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.Type,
|
|
Url: badge.URL,
|
|
Users: badge.Users,
|
|
})
|
|
}
|
|
}
|
|
|
|
func formatHomiesBadges(format *Format) {
|
|
defer format.wg.Done()
|
|
data := &Homies{}
|
|
data.getBadges()
|
|
data.getBadgesTwo()
|
|
|
|
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"`
|
|
}{
|
|
Name: badge.Tooltip,
|
|
Url: 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"`
|
|
}{
|
|
Name: badge.Tooltip,
|
|
Url: badge.Image3,
|
|
Users: badge.Users,
|
|
})
|
|
}
|
|
}
|
|
|
|
// Done
|
|
func formatPurpleTv(format *Format) {
|
|
defer format.wg.Done()
|
|
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,
|
|
})
|
|
}
|
|
|
|
// TODO: Replace the data from the Chatty struct in place to use less memory.
|
|
func formatChatty(format *Format) {
|
|
defer format.wg.Done()
|
|
data := &Chatty{}
|
|
newData := Chatty{}
|
|
data.getBadges()
|
|
|
|
// Removes the elements containing "ffz" or "ffzap" in the ID.
|
|
for _, element := range *data {
|
|
if (element.ID != "ffz") && (element.ID != "ffzap") {
|
|
newData = append(newData, element)
|
|
}
|
|
}
|
|
|
|
for _, badge := range newData {
|
|
format.Chatty.Badges = append(format.Chatty.Badges, struct {
|
|
Name string `json:"name"`
|
|
Url string `json:"url"`
|
|
Users []string `json:"users"`
|
|
}{
|
|
Name: badge.MetaTitle,
|
|
Url: badge.ImageURL4,
|
|
Users: badge.Usernames,
|
|
})
|
|
}
|
|
}
|
|
|
|
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 formatSevenTvPaints() string {
|
|
data := &SevenTv{}
|
|
data.getPaints()
|
|
|
|
paints, err := json.Marshal(data.Paints.Data.Cosmetics)
|
|
if err != nil {
|
|
logger.Error().Msg(err.Error())
|
|
}
|
|
return string(paints)
|
|
}
|
|
|
|
func formatSevenTvUserCosmetics(stvUserID string) string {
|
|
data := &SevenTv{}
|
|
data.getUserCosmetics(stvUserID)
|
|
|
|
cosmetics, err := json.Marshal(data.UserCosmetics.Data.User.Cosmetics)
|
|
if err != nil {
|
|
logger.Error().Msg(err.Error())
|
|
}
|
|
return string(cosmetics)
|
|
}
|
|
|
|
func formatAllBadges() string {
|
|
format := &Format{}
|
|
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)
|
|
|
|
format.wg.Wait()
|
|
|
|
json, err := json.Marshal(format)
|
|
if err != nil {
|
|
logger.Error().Msg("Failed to json.Marshal badges: " + err.Error())
|
|
}
|
|
return string(json)
|
|
}
|