Files
go-mc/realms/server.go
2019-08-09 23:50:53 +08:00

140 lines
2.9 KiB
Go

package realms
import (
"errors"
"fmt"
)
type Server struct {
ID int
RemoteSubscriptionID string
Owner string
OwnerUUID string
Name string
MOTD string
State string
DaysLeft int
Expired bool
ExpiredTrial bool
WorldType string
Players []string
MaxPlayers int
MiniGameName *string
MiniGameID *int
MinigameImage *string
ActiveSlot int
//Slots interface{}
Member bool
}
// Worlds return a list of servers that the user is invited to or owns.
func (r *Realms) Worlds() ([]Server, error) {
var resp struct {
Servers []Server
*Error
}
err := r.get("/worlds", &resp)
if err != nil {
return nil, err
}
if resp.Error != nil {
err = resp.Error
}
return resp.Servers, err
}
// Server returns a single server listing about a server.
// you must be the owner of the server.
func (r *Realms) Server(ID int) (s Server, err error) {
var resp = struct {
*Server
*Error
}{Server: &s}
err = r.get(fmt.Sprintf("/worlds/%d", ID), &resp)
if err != nil {
return
}
if resp.Error != nil {
err = resp.Error
}
return
}
// Address used to get the IP address for a server.
// Call TOS before you call this function.
func (r *Realms) Address(s Server) (string, error) {
var resp struct {
Address string
PendingUpdate bool
ResourcePackUrl *string
ResourcePackHash *string
*Error
}
err := r.get(fmt.Sprintf("/worlds/v1/%d/join/pc", s.ID), &resp)
if err != nil {
return "", err
}
if resp.Error != nil {
err = resp.Error
return "", err
}
if resp.PendingUpdate {
return "", errors.New("pending update")
}
return resp.Address, err
}
// Backups returns a list of backups for the world.
func (r *Realms) Backups(s Server) ([]int, error) {
var bs []int
err := r.get(fmt.Sprintf("/worlds/%d/backups", s.ID), &bs)
return bs, err
}
//func (r *Realms) Download() (link, resURL, resHash string) {
// var resp struct {
// DownloadLink string
// ResourcePackURL *string
// ResourcePackHash *string
// *Error
// }
// TODO: What's the $WORLD(1-4) means?
// err := r.get(fmt.Sprintf("/worlds/$ID/slot/$WORLD(1-4)/download", s.ID), &resp)
//
//}
// Ops returns a list of operators for this server.
// You must own this server to view this.
func (r *Realms) Ops(s Server) (ops []string, err error) {
err = r.get(fmt.Sprintf("/ops/%d", s.ID), &ops)
return
}
// SubscriptionLife returns the current life of a server subscription.
func (r *Realms) SubscriptionLife(s Server) (startDate int64, daysLeft int, Type string, err error) {
var resp = struct {
StartDate *int64
DaysLeft *int
SubscriptionType *string
}{
StartDate: &startDate,
DaysLeft: &daysLeft,
SubscriptionType: &Type,
}
err = r.get(fmt.Sprintf("/subscriptions/%d", s.ID), &resp)
return
}