78 lines
2.5 KiB
Go
78 lines
2.5 KiB
Go
|
package osuapi
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"net/url"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
// Match is a multiplayer match.
|
||
|
type Match struct {
|
||
|
Info MatchInfo `json:"match"`
|
||
|
Games []MatchGame `json:"games"`
|
||
|
}
|
||
|
|
||
|
// MatchInfo contains useful information about a Match.
|
||
|
type MatchInfo struct {
|
||
|
MatchID int `json:"match_id,string"`
|
||
|
Name string `json:"name"`
|
||
|
StartTime MySQLDate `json:"start_time"`
|
||
|
EndTime *MySQLDate `json:"end_time"`
|
||
|
}
|
||
|
|
||
|
// MatchGame is a single beatmap played in the Match.
|
||
|
type MatchGame struct {
|
||
|
GameID int `json:"game_id,string"`
|
||
|
StartTime MySQLDate `json:"start_time"`
|
||
|
EndTime *MySQLDate `json:"end_time"`
|
||
|
BeatmapID int `json:"beatmap_id,string"`
|
||
|
PlayMode Mode `json:"play_mode,string"`
|
||
|
// Refer to the wiki for information about what the three things below
|
||
|
// are. I personally think that this information wouldn't be that
|
||
|
// necessary to most people, and what is written on the wiki could be
|
||
|
// outdated, thus I deemed useless making an appropriate "enum" (like
|
||
|
// I did for Genre, Language and that stuff.)
|
||
|
// You really can say I love writing long comments.
|
||
|
MatchType int `json:"match_type,string"`
|
||
|
ScoringType int `json:"scoring_type,string"`
|
||
|
TeamType int `json:"team_type,string"`
|
||
|
Mods Mods `json:"mods,string"`
|
||
|
Scores []MatchGameScore `json:"scores"`
|
||
|
}
|
||
|
|
||
|
// MatchGameScore is a single score done by an user in a specific Game of a
|
||
|
// Match. I agree, these descriptions are quite confusing.
|
||
|
type MatchGameScore struct {
|
||
|
Slot int `json:"slot,string"`
|
||
|
Team int `json:"team,string"`
|
||
|
UserID int `json:"user_id,string"`
|
||
|
Score int64 `json:"score,string"`
|
||
|
MaxCombo int `json:"maxcombo,string"`
|
||
|
// There should be Rank here, but Rank is not actually used. (always 0)
|
||
|
Count50 int `json:"count50,string"`
|
||
|
Count100 int `json:"count100,string"`
|
||
|
Count300 int `json:"count300,string"`
|
||
|
CountMiss int `json:"countmiss,string"`
|
||
|
CountGeki int `json:"countgeki,string"`
|
||
|
CountKatu int `json:"countkatu,string"`
|
||
|
// There should also be Perfect here, but that seems to also not be used. (always 0)
|
||
|
Pass OsuBool `json:"pass"`
|
||
|
}
|
||
|
|
||
|
// GetMatch makes a get_match request to the osu! API.
|
||
|
func (c Client) GetMatch(matchID int) (*Match, error) {
|
||
|
vals := url.Values{
|
||
|
"mp": []string{strconv.Itoa(matchID)},
|
||
|
}
|
||
|
rawData, err := c.makerq("get_match", vals)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
match := Match{}
|
||
|
err = json.Unmarshal(rawData, &match)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &match, nil
|
||
|
}
|