-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi_admin.go
More file actions
233 lines (198 loc) · 6.6 KB
/
Copy pathapi_admin.go
File metadata and controls
233 lines (198 loc) · 6.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
package vrage
import (
"log"
"time"
)
// APIAdmin provides access to the /v1/admin API routes.
type APIAdmin struct {
http *HTTPClient
}
// region /v1/admin/promotedPlayers
// PromotePlayer promotes a player with the specified Steam ID.
func (a *APIAdmin) PromotePlayer(steamID uint64) (APIResponseWithoutData, error) {
var responseStruct APIResponseWithoutData
httpResponse, err := a.http.PostV1AdminPromotedPlayersSteamID(steamID)
if err != nil {
return responseStruct, err
}
defer func() {
if err := httpResponse.Body.Close(); err != nil {
log.Printf("failed to close response body: %v", err)
}
}()
responseStruct, err = parseResponse[APIResponseWithoutData](httpResponse)
if err != nil {
return responseStruct, err
}
return responseStruct, nil
}
// DemotePlayer demotes a player with the specified Steam ID.
func (a *APIAdmin) DemotePlayer(steamID uint64) (APIResponseWithoutData, error) {
var responseStruct APIResponseWithoutData
httpResponse, err := a.http.DeleteV1AdminPromotedPlayersSteamID(steamID)
if err != nil {
return responseStruct, err
}
defer func() {
if err := httpResponse.Body.Close(); err != nil {
log.Printf("failed to close response body: %v", err)
}
}()
responseStruct, err = parseResponse[APIResponseWithoutData](httpResponse)
if err != nil {
return responseStruct, err
}
return responseStruct, nil
}
// region /v1/admin/bannedPlayers
// APIAdminBannedPlayer represents a banned player.
type APIAdminBannedPlayer struct {
SteamID uint64 `json:"SteamId"`
DisplayName string `json:"DisplayName"` // DisplayName can be empty
}
// APIAdminBannedPlayersData represents the data returned by the GET /v1/admin/bannedPlayers endpoint.
type APIAdminBannedPlayersData struct {
BannedPlayers []APIAdminBannedPlayer `json:"BannedPlayers"`
}
// BannedPlayers fetches a list of banned players.
func (a *APIAdmin) BannedPlayers() (APIResponseWithData[APIAdminBannedPlayersData], error) {
var responseStruct APIResponseWithData[APIAdminBannedPlayersData]
httpResponse, err := a.http.GetV1AdminBannedPlayers()
if err != nil {
return responseStruct, err
}
defer func() {
if err := httpResponse.Body.Close(); err != nil {
log.Printf("failed to close response body: %v", err)
}
}()
responseStruct, err = parseResponse[APIResponseWithData[APIAdminBannedPlayersData]](httpResponse)
if err != nil {
return responseStruct, err
}
return responseStruct, nil
}
// BanPlayer bans a player with the specified Steam ID.
func (a *APIAdmin) BanPlayer(steamID uint64) (APIResponseWithoutData, error) {
var responseStruct APIResponseWithoutData
httpResponse, err := a.http.PostV1AdminBannedPlayersSteamID(steamID)
if err != nil {
return responseStruct, err
}
defer func() {
if err := httpResponse.Body.Close(); err != nil {
log.Printf("failed to close response body: %v", err)
}
}()
responseStruct, err = parseResponse[APIResponseWithoutData](httpResponse)
if err != nil {
return responseStruct, err
}
return responseStruct, nil
}
// UnbanPlayer unbans a player with the specified Steam ID.
func (a *APIAdmin) UnbanPlayer(steamID uint64) (APIResponseWithoutData, error) {
var responseStruct APIResponseWithoutData
httpResponse, err := a.http.DeleteV1AdminBannedPlayersSteamID(steamID)
if err != nil {
return responseStruct, err
}
defer func() {
if err := httpResponse.Body.Close(); err != nil {
log.Printf("failed to close response body: %v", err)
}
}()
responseStruct, err = parseResponse[APIResponseWithoutData](httpResponse)
if err != nil {
return responseStruct, err
}
return responseStruct, nil
}
// region /v1/admin/kickedPlayers
// APIAdminKickedPlayer represents a kicked player.
type APIAdminKickedPlayer struct {
SteamID uint64 `json:"SteamID"`
// DisplayName is the display name of the player. It can be an empty string.
DisplayName string `json:"DisplayName"`
// Time is the remaining kick duration in milliseconds.
// It gets negative when the player is allowed to join again and the entry is deleted when the player joins again.
Time int64 `json:"Time"`
}
// CanJoin returns true if the player is allowed to join again (Time <= 0).
func (p APIAdminKickedPlayer) CanJoin() bool {
return p.Time <= 0
}
// TimeRemaining returns the remaining kick duration as a time.Duration.
// If the player is allowed to join again, it returns 0.
func (p APIAdminKickedPlayer) TimeRemaining() time.Duration {
if p.CanJoin() {
return 0
}
return time.Duration(p.Time) * time.Millisecond
}
// APIAdminKickedPlayersData represents the data returned by the GET /v1/admin/kickedPlayers endpoint.
type APIAdminKickedPlayersData struct {
KickedPlayers []APIAdminKickedPlayer `json:"KickedPlayers"`
}
// KickedPlayers fetches a list of kicked players.
//
// GET /v1/admin/kickedPlayers
func (a *APIAdmin) KickedPlayers() (APIResponseWithData[APIAdminKickedPlayersData], error) {
var responseStruct APIResponseWithData[APIAdminKickedPlayersData]
httpResponse, err := a.http.GetV1AdminKickedPlayers()
if err != nil {
return responseStruct, err
}
defer func() {
if err := httpResponse.Body.Close(); err != nil {
log.Printf("failed to close response body: %v", err)
}
}()
responseStruct, err = parseResponse[APIResponseWithData[APIAdminKickedPlayersData]](httpResponse)
if err != nil {
return responseStruct, err
}
return responseStruct, nil
}
// KickPlayer kicks a player with the specified Steam ID.
//
// This will prevent the player from joining the server for 5 minutes.
//
// POST /v1/admin/kickedPlayers/{steam_id}
func (a *APIAdmin) KickPlayer(steamID uint64) (APIResponseWithoutData, error) {
var responseStruct APIResponseWithoutData
httpResponse, err := a.http.PostV1AdminKickedPlayersSteamID(steamID)
if err != nil {
return responseStruct, err
}
defer func() {
if err := httpResponse.Body.Close(); err != nil {
log.Printf("failed to close response body: %v", err)
}
}()
responseStruct, err = parseResponse[APIResponseWithoutData](httpResponse)
if err != nil {
return responseStruct, err
}
return responseStruct, nil
}
// UnkickPlayer un-kicks a player with the specified Steam ID.
//
// DELETE /v1/admin/kickedPlayers/{steam_id}
func (a *APIAdmin) UnkickPlayer(steamID uint64) (APIResponseWithoutData, error) {
var responseStruct APIResponseWithoutData
httpResponse, err := a.http.DeleteV1AdminKickedPlayersSteamID(steamID)
if err != nil {
return responseStruct, err
}
defer func() {
if err := httpResponse.Body.Close(); err != nil {
log.Printf("failed to close response body: %v", err)
}
}()
responseStruct, err = parseResponse[APIResponseWithoutData](httpResponse)
if err != nil {
return responseStruct, err
}
return responseStruct, nil
}