@@ -3,42 +3,108 @@ package main
3
3
import (
4
4
"encoding/json"
5
5
"fmt"
6
+ "log"
6
7
"net/http"
7
8
9
+ "github.com/Philipp15b/go-steamapi"
8
10
"github.com/bwmarrin/discordgo"
9
11
)
10
12
11
13
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
+ }
17
21
}
18
22
19
23
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 )
21
26
hiveResp , err := http .Get (url )
22
27
if err != nil {
23
28
return nil , err
24
29
}
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
+ }
29
84
}
30
85
return & discordgo.MessageSend {Embed : & discordgo.MessageEmbed {
31
86
Description : "Skill breakdown" ,
32
- Author : & discordgo.MessageEmbedAuthor {Name : skill . Alias , IconURL : getPlayerAvatar (playerID )},
87
+ Author : & discordgo.MessageEmbedAuthor {Name : steamData . GameName , IconURL : getPlayerAvatar (playerID )},
33
88
Fields : []* discordgo.MessageEmbedField {
34
89
{
35
90
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 ] ),
37
92
Inline : true ,
38
93
},
39
94
{
40
95
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 ]),
42
108
Inline : true ,
43
109
},
44
110
},
0 commit comments