-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathplayers.go
More file actions
155 lines (130 loc) · 3.91 KB
/
players.go
File metadata and controls
155 lines (130 loc) · 3.91 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
package rlapi
import "context"
type PlayerData struct {
PlayerID string `json:"PlayerID"`
PlayerName string `json:"PlayerName"`
PresenceState string `json:"PresenceState"`
PresenceInfo string `json:"PresenceInfo"`
}
type PlayerXPInfo struct {
TotalXP int `json:"TotalXP"`
XPLevel int `json:"XPLevel"`
XPTitle string `json:"XPTitle"`
XPProgressInCurrentLevel int `json:"XPProgressInCurrentLevel"`
XPRequiredForNextLevel int `json:"XPRequiredForNextLevel"`
}
// CreatorCode represents a creator code information
type CreatorCode struct {
Code string `json:"Code"`
CreatorName string `json:"CreatorName"`
IsActive bool `json:"IsActive"`
}
// ReportReason represents reasons for reporting a player
type ReportReason struct {
ReasonID int `json:"ReasonID"`
Description string `json:"Description"`
}
type GetBanStatusRequest struct {
Players []PlayerID `json:"Players"`
}
type GetBanStatusResponse struct {
BanMessages []interface{} `json:"BanMessages"`
}
type GetProfileRequest struct {
PlayerIDs []PlayerID `json:"PlayerIDs"`
}
type GetProfileResponse struct {
PlayerData []PlayerData `json:"PlayerData"`
}
type GetXPRequest struct {
PlayerID PlayerID `json:"PlayerID"`
}
type GetXPResponse struct {
XPInfoResponse PlayerXPInfo `json:"XPInfoResponse"`
}
type GetCreatorCodeRequest struct {
PlayerID PlayerID `json:"PlayerID"`
}
type GetCreatorCodeResponse struct {
CreatorCode interface{} `json:"CreatorCode"`
}
type ReportRequest struct {
Reports []Report `json:"Reports"`
GameID string `json:"GameID"`
}
type Report struct {
Reporter PlayerID `json:"Reporter"`
Offender PlayerID `json:"Offender"`
ReasonIDs []int `json:"ReasonIDs"`
ReportTimestamp float64 `json:"ReportTimestamp"`
}
type ReportResponse struct {
Success bool `json:"Success"`
ReportID string `json:"ReportID"`
Message string `json:"Message"`
}
// GetBanStatus retrieves ban status information for given players.
func (p *PsyNetRPC) GetBanStatus(ctx context.Context, playerIDs []PlayerID) ([]interface{}, error) {
request := GetBanStatusRequest{
Players: playerIDs,
}
var result GetBanStatusResponse
err := p.sendRequestSync(ctx, "Players/GetBanStatus v3", request, &result)
if err != nil {
return nil, err
}
return result.BanMessages, nil
}
// GetProfiles retrieves profile information for given players.
func (p *PsyNetRPC) GetProfiles(ctx context.Context, playerIDs []PlayerID) ([]PlayerData, error) {
request := GetProfileRequest{
PlayerIDs: playerIDs,
}
var result GetProfileResponse
err := p.sendRequestSync(ctx, "Players/GetProfile v1", request, &result)
if err != nil {
return nil, err
}
return result.PlayerData, nil
}
// GetXP retrieves XP information for the authenticated player.
func (p *PsyNetRPC) GetXP(ctx context.Context) (*PlayerXPInfo, error) {
request := GetXPRequest{
PlayerID: p.localPlayerID,
}
var result GetXPResponse
err := p.sendRequestSync(ctx, "Players/GetXP v1", request, &result)
if err != nil {
return nil, err
}
return &result.XPInfoResponse, nil
}
// GetCreatorCode retrieves creator code information for the authenticated player.
func (p *PsyNetRPC) GetCreatorCode(ctx context.Context) (interface{}, error) {
var result GetCreatorCodeResponse
err := p.sendRequestSync(ctx, "Players/GetCreatorCode v1", emptyRequest{}, &result)
if err != nil {
return nil, err
}
return &result.CreatorCode, nil
}
// ReportPlayer reports a player.
func (p *PsyNetRPC) ReportPlayer(ctx context.Context, offender PlayerID, reason []int, gameID string) error {
request := ReportRequest{
Reports: []Report{
{
Reporter: p.localPlayerID,
Offender: offender,
ReasonIDs: reason,
ReportTimestamp: 0.0,
},
},
GameID: gameID,
}
var result interface{}
err := p.sendRequestSync(ctx, "Players/Report v4", request, &result)
if err != nil {
return err
}
return nil
}