// UpdatePlace uploads data from `reader` to Roblox as a Place asset. // `placeId` must be the id of an existing place. This function cannot create // a new place. // // This function requires the client to be logged in. func UpdatePlace(client *rbxweb.Client, reader io.Reader, placeId int64) (err error) { query := url.Values{ "assetid": {client.I64toa(placeId)}, "type": {"Place"}, } buf := new(bytes.Buffer) buf.ReadFrom(reader) req, _ := http.NewRequest("POST", client.GetURL(`www`, `/Data/Upload.ashx`, query), buf) req.Header.Set("User-Agent", "Roblox") resp, err := client.Do(req) if err = client.AssertResp(resp, err); err != nil { return err } defer resp.Body.Close() return nil }
// Upload generically uploads data from `reader` as an asset to the ROBLOX // website. `info` can be used to specify information about the model. The // following parameters are known: // // type - The type of asset. // assetid - The id of the asset to update. 0 uploads a new asset. // name - The name of the asset. // description - The asset's description. // genreTypeId - The asset's genre. // isPublic - Whether the asset can be taken by other users. // allowComments - Whether users can comment on the asset. // // The success of this function is highly dependent on these parameters. For // example, most asset types may only be uploaded by authorized users. // Parameters that specify information about the asset only apply for new // assets. That is, updating an asset will only update the contents, but not // the information about it. // // `assetVersionId` is the version id of the uploaded asset. This is unique // for each upload. This can be used with GetIdFromVersion to get the asset // id. // // This function requires the client to be logged in. func Upload(client *rbxweb.Client, reader io.Reader, info url.Values) (assetVersionId int64, err error) { buf := new(bytes.Buffer) buf.ReadFrom(reader) req, _ := http.NewRequest("POST", client.GetURL(`www`, `/Data/Upload.ashx`, info), buf) req.Header.Set("User-Agent", "roblox/rbxweb") resp, err := client.Do(req) if err = client.AssertResp(resp, err); err != nil { return 0, err } defer resp.Body.Close() r := new(bytes.Buffer) r.ReadFrom(resp.Body) assetVersionId, _ = client.Atoi64(r.String()) return assetVersionId, err }
// GetIdFromName returns a user id from a user name. func GetIdFromName(client *rbxweb.Client, name string) (id int32, err error) { if name == "" { return 0, errors.New("name not specified") } query := url.Values{ "UserName": {name}, } req, _ := http.NewRequest("HEAD", client.GetURL(`www`, `/User.aspx`, query), nil) resp, err := client.Do(req) if err = client.AssertResp(resp, err); err != nil { return 0, err } resp.Body.Close() values, err := url.ParseQuery(resp.Header.Get("Location")) if err = client.AssertResp(resp, err); err != nil { return 0, err } return client.Atoi32(values.Get("ID")) }
// GetIdFromVersion returns an asset id from an asset version id. func GetIdFromVersion(client *rbxweb.Client, assetVersionId int64) (assetId int64, err error) { query := url.Values{ "avid": {client.I64toa(assetVersionId)}, } // This relies on how asset names are converted to url names. Currently, // if an asset name is "_", its url becomes "unnamed". req, _ := http.NewRequest("HEAD", client.GetURL(`www`, `/_-item`, query), nil) resp, err := client.Do(req) if err = client.AssertResp(resp, err); err != nil { return 0, err } resp.Body.Close() if err = client.AssertResp(resp, err); err != nil { return 0, err } return client.Atoi64(resp.Request.URL.Query().Get("id")) }