All checks were successful
continuous-integration/drone/push Build is passing
Pull in validator changes and full ui rework to remove nextjs. Co-authored-by: Rhys Lloyd <krakow20@gmail.com> Reviewed-on: #286 Reviewed-by: Rhys Lloyd <quaternions@noreply@itzana.me> Co-authored-by: itzaname <me@sliving.io> Co-committed-by: itzaname <me@sliving.io>
73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package roblox
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
// UserData represents a single user's information
|
|
type UserData struct {
|
|
ID uint64 `json:"id"`
|
|
Name string `json:"name"`
|
|
DisplayName string `json:"displayName"`
|
|
}
|
|
|
|
// BatchUsersResponse represents the API response for batch user requests
|
|
type BatchUsersResponse struct {
|
|
Data []UserData `json:"data"`
|
|
}
|
|
|
|
// GetUsernames fetches usernames for multiple users in a single batch request
|
|
// Roblox allows up to 100 users per batch
|
|
func (c *Client) GetUsernames(userIDs []uint64) ([]UserData, error) {
|
|
if len(userIDs) == 0 {
|
|
return []UserData{}, nil
|
|
}
|
|
if len(userIDs) > 100 {
|
|
return nil, GetError("batch size cannot exceed 100 users")
|
|
}
|
|
|
|
// Build request payload
|
|
payload := map[string][]uint64{
|
|
"userIds": userIDs,
|
|
}
|
|
|
|
jsonData, err := json.Marshal(payload)
|
|
if err != nil {
|
|
return nil, GetError("JSONMarshalError: " + err.Error())
|
|
}
|
|
|
|
req, err := http.NewRequest("POST", "https://users.roblox.com/v1/users", bytes.NewBuffer(jsonData))
|
|
if err != nil {
|
|
return nil, GetError("RequestCreationError: " + err.Error())
|
|
}
|
|
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
resp, err := c.HttpClient.Do(req)
|
|
if err != nil {
|
|
return nil, GetError("RequestError: " + err.Error())
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
if resp.StatusCode != http.StatusOK {
|
|
body, _ := io.ReadAll(resp.Body)
|
|
return nil, GetError(fmt.Sprintf("ResponseError: status code %d, body: %s", resp.StatusCode, string(body)))
|
|
}
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return nil, GetError("ReadBodyError: " + err.Error())
|
|
}
|
|
|
|
var response BatchUsersResponse
|
|
if err := json.Unmarshal(body, &response); err != nil {
|
|
return nil, GetError("JSONUnmarshalError: " + err.Error())
|
|
}
|
|
|
|
return response.Data, nil
|
|
}
|