584 lines
13 KiB
Go
584 lines
13 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strconv"
|
|
"sync"
|
|
)
|
|
|
|
// 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 {
|
|
Name string `json:"name"`
|
|
Url map[string]string `json:"url"`
|
|
Users []string `json:"users"`
|
|
}
|
|
|
|
// TODO
|
|
// 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 {
|
|
// 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 {
|
|
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 {
|
|
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
|
|
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()
|
|
chatterino := &Chatterino{}
|
|
chatterino.getBadges()
|
|
|
|
for _, badge := range chatterino.Badges {
|
|
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: 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()
|
|
data := &FrankerFz{}
|
|
data.getBadges()
|
|
|
|
for _, badge := range data.Badges {
|
|
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"`
|
|
}{
|
|
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 {
|
|
badgeID, err := strconv.ParseInt(id, 10, 64)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
for i := range format.Ffz {
|
|
if format.Ffz[i].ID == badgeID {
|
|
for _, userID := range userIDs {
|
|
format.Ffz[i].Users = append(format.Ffz[i].Users, strconv.FormatInt(userID, 10))
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 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()
|
|
data := &Bttv{}
|
|
data.getBadges()
|
|
|
|
}
|
|
|
|
// Done
|
|
func formatDankChat(format *Format) {
|
|
// 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 = 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: 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()
|
|
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 = append(format.Homies, struct {
|
|
ID string `json:"id"`
|
|
defaultFormat
|
|
}{
|
|
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 = append(format.Homies, struct {
|
|
ID string `json:"id"`
|
|
defaultFormat
|
|
}{
|
|
// 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()
|
|
data := &PurpleTV{}
|
|
data.getBadges()
|
|
|
|
var users []string
|
|
for _, user := range data.Users {
|
|
if user.UserID == "157861306" {
|
|
continue
|
|
}
|
|
users = append(users, user.UserID)
|
|
}
|
|
|
|
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 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()
|
|
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 = 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: 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 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()
|
|
|
|
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)
|
|
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)
|
|
|
|
// 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()
|
|
|
|
json, err := json.Marshal(format)
|
|
if err != nil {
|
|
logger.Error().Msg("Failed to json.Marshal badges: " + err.Error())
|
|
}
|
|
return string(json)
|
|
}
|