Skip to content

Commit 3ad0582

Browse files
committed
Update skill data source
1 parent f4575b9 commit 3ad0582

File tree

1 file changed

+79
-13
lines changed

1 file changed

+79
-13
lines changed

hive.go

Lines changed: 79 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,42 +3,108 @@ package main
33
import (
44
"encoding/json"
55
"fmt"
6+
"log"
67
"net/http"
78

9+
"github.com/Philipp15b/go-steamapi"
810
"github.com/bwmarrin/discordgo"
911
)
1012

1113
type hive struct {
12-
Alias string
13-
Skill int
14-
SkillOffset int `json:"skill_offset"`
15-
CommSkill int `json:"comm_skill"`
16-
CommSkillOffset int `json:"comm_skill_offset"`
14+
GameName string
15+
Playerstats struct {
16+
Stats []struct {
17+
Name string
18+
Value float64
19+
}
20+
}
1721
}
1822

1923
func getSkill(playerID uint32) (*discordgo.MessageSend, error) {
20-
url := fmt.Sprintf("http://hive2.ns2cdt.com/api/get/playerData/%d", playerID)
24+
steamID := uint64(playerID) + 0x110000100000000
25+
url := fmt.Sprintf("https://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v2/?key=%s&steamid=%d&appid=4920", config.SteamKey, steamID)
2126
hiveResp, err := http.Get(url)
2227
if err != nil {
2328
return nil, err
2429
}
25-
var skill hive
26-
json.NewDecoder(hiveResp.Body).Decode(&skill)
27-
if skill.Alias == "" {
28-
return nil, fmt.Errorf("player id %d isn't present on Hive", playerID)
30+
var steamData hive
31+
json.NewDecoder(hiveResp.Body).Decode(&steamData)
32+
if steamData.GameName == "" {
33+
summary, err := steamapi.GetPlayerSummaries([]uint64{steamID}, config.SteamKey)
34+
if err != nil || len(summary) == 0 {
35+
log.Printf("Error getting player info: %s", err)
36+
steamData.GameName = "<err>"
37+
} else {
38+
steamData.GameName = summary[0].PersonaName
39+
}
40+
}
41+
skill := [4]int{}
42+
skillOffset := [4]int{}
43+
signs := [4]bool{}
44+
for _, s := range steamData.Playerstats.Stats {
45+
switch s.Name {
46+
case "skill":
47+
skill[0] = int(s.Value)
48+
case "skill_offset":
49+
skillOffset[0] = int(s.Value)
50+
case "comm_skill":
51+
skill[1] = int(s.Value)
52+
case "comm_skill_offset":
53+
skillOffset[1] = int(s.Value)
54+
case "td_skill":
55+
skill[2] = int(s.Value)
56+
case "td_skill_offset":
57+
skillOffset[2] = int(s.Value)
58+
case "td_comm_skill":
59+
skill[3] = int(s.Value)
60+
case "td_comm_skill_offset":
61+
skillOffset[3] = int(s.Value)
62+
case "skill_offset_sign":
63+
if int(s.Value) == 1 {
64+
signs[0] = true
65+
}
66+
case "comm_skill_offset_sign":
67+
if int(s.Value) == 1 {
68+
signs[1] = true
69+
}
70+
case "td_skill_offset_sign":
71+
if int(s.Value) == 1 {
72+
signs[2] = true
73+
}
74+
case "td_comm_skill_offset_sign":
75+
if int(s.Value) == 1 {
76+
signs[3] = true
77+
}
78+
}
79+
}
80+
for i, s := range signs {
81+
if s {
82+
skillOffset[i] = -skillOffset[i]
83+
}
2984
}
3085
return &discordgo.MessageSend{Embed: &discordgo.MessageEmbed{
3186
Description: "Skill breakdown",
32-
Author: &discordgo.MessageEmbedAuthor{Name: skill.Alias, IconURL: getPlayerAvatar(playerID)},
87+
Author: &discordgo.MessageEmbedAuthor{Name: steamData.GameName, IconURL: getPlayerAvatar(playerID)},
3388
Fields: []*discordgo.MessageEmbedField{
3489
{
3590
Name: "Marine (field/comm)",
36-
Value: fmt.Sprintf("%d/%d", skill.Skill+skill.SkillOffset, skill.CommSkill+skill.CommSkillOffset),
91+
Value: fmt.Sprintf("%d/%d", skill[0]-skillOffset[0], skill[1]-skillOffset[1]),
3792
Inline: true,
3893
},
3994
{
4095
Name: "Alien (field/comm)",
41-
Value: fmt.Sprintf("%d/%d", skill.Skill-skill.SkillOffset, skill.CommSkill-skill.CommSkillOffset),
96+
Value: fmt.Sprintf("%d/%d", skill[0]+skillOffset[0], skill[1]+skillOffset[1]),
97+
Inline: true,
98+
},
99+
{},
100+
{
101+
Name: "TD Marine (field/comm)",
102+
Value: fmt.Sprintf("%d/%d", skill[2]-skillOffset[2], skill[3]-skillOffset[3]),
103+
Inline: true,
104+
},
105+
{
106+
Name: "TD Alien (field/comm)",
107+
Value: fmt.Sprintf("%d/%d", skill[2]+skillOffset[2], skill[3]+skillOffset[3]),
42108
Inline: true,
43109
},
44110
},

0 commit comments

Comments
 (0)