Skip to content

client

Contains the Client, which is the core object at the center of all ro.py applications.

Client

Represents a Roblox client.

Attributes:

Name Type Description
requests Requests

The requests object, which is used to send requests to Roblox endpoints.

url_generator URLGenerator

The URL generator object, which is used to generate URLs to send requests to endpoints.

presence PresenceProvider

The presence provider object.

thumbnails ThumbnailProvider

The thumbnail provider object.

delivery DeliveryProvider

The delivery provider object.

chat ChatProvider

The chat provider object.

account AccountProvider

The account provider object.

Source code in roblox/client.py
 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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
class Client:
    """
    Represents a Roblox client.

    Attributes:
        requests: The requests object, which is used to send requests to Roblox endpoints.
        url_generator: The URL generator object, which is used to generate URLs to send requests to endpoints.
        presence: The presence provider object.
        thumbnails: The thumbnail provider object.
        delivery: The delivery provider object.
        chat: The chat provider object.
        account: The account provider object.
    """

    def __init__(self, token: str = None, base_url: str = "roblox.com"):
        """
        Arguments:
            token: A .ROBLOSECURITY token to authenticate the client with.
            base_url: The base URL to use when sending requests.
        """
        self._url_generator: URLGenerator = URLGenerator(base_url=base_url)
        self._requests: Requests = Requests()

        self.url_generator: URLGenerator = self._url_generator
        self.requests: Requests = self._requests

        self.presence: PresenceProvider = PresenceProvider(client=self)
        self.thumbnails: ThumbnailProvider = ThumbnailProvider(client=self)
        self.delivery: DeliveryProvider = DeliveryProvider(client=self)
        self.chat: ChatProvider = ChatProvider(client=self)
        self.account: AccountProvider = AccountProvider(client=self)

        if token:
            self.set_token(token)

    def __repr__(self):
        return f"<{self.__class__.__name__}>"

    # Authentication
    def set_token(self, token: Optional[str] = None) -> None:
        """
        Authenticates the client with the passed .ROBLOSECURITY token.
        This method does not send any requests and will not throw if the token is invalid.

        Arguments:
            token: A .ROBLOSECURITY token to authenticate the client with.

        """
        self._requests.session.cookies[".ROBLOSECURITY"] = token

    # Users
    async def get_user(self, user_id: int) -> User:
        """
        Gets a user with the specified user ID.

        Arguments:
            user_id: A Roblox user ID.

        Returns:
            A user object.
        """
        try:
            user_response = await self._requests.get(
                url=self.url_generator.get_url("users", f"v1/users/{user_id}")
            )
        except NotFound as exception:
            raise UserNotFound(
                message="Invalid user.",
                response=exception.response
            ) from None
        user_data = user_response.json()
        return User(client=self, data=user_data)

    async def get_authenticated_user(
            self, expand: bool = True
    ) -> Union[User, PartialUser]:
        """
        Grabs the authenticated user.

        Arguments:
            expand: Whether to return a User (2 requests) rather than a PartialUser (1 request)

        Returns:
            The authenticated user.
        """
        authenticated_user_response = await self._requests.get(
            url=self._url_generator.get_url("users", f"v1/users/authenticated")
        )
        authenticated_user_data = authenticated_user_response.json()

        if expand:
            return await self.get_user(authenticated_user_data["id"])
        else:
            return PartialUser(client=self, data=authenticated_user_data)

    async def get_users(
            self,
            user_ids: List[int],
            exclude_banned_users: bool = False,
            expand: bool = False,
    ) -> Union[List[PartialUser], List[User]]:
        """
        Grabs a list of users corresponding to each user ID in the list.

        Arguments:
            user_ids: A list of Roblox user IDs.
            exclude_banned_users: Whether to exclude banned users from the data.
            expand: Whether to return a list of Users (2 requests) rather than PartialUsers (1 request)

        Returns:
            A List of Users or partial users.
        """
        users_response = await self._requests.post(
            url=self._url_generator.get_url("users", f"v1/users"),
            json={"userIds": user_ids, "excludeBannedUsers": exclude_banned_users},
        )
        users_data = users_response.json()["data"]

        if expand:
            return [await self.get_user(user_data["id"]) for user_data in users_data]
        else:
            return [
                PartialUser(client=self, data=user_data)
                for user_data in users_data
            ]

    async def get_users_by_usernames(
            self,
            usernames: List[str],
            exclude_banned_users: bool = False,
            expand: bool = False,
    ) -> Union[List[RequestedUsernamePartialUser], List[User]]:
        """
        Grabs a list of users corresponding to each username in the list.

        Arguments:
            usernames: A list of Roblox usernames.
            exclude_banned_users: Whether to exclude banned users from the data.
            expand: Whether to return a list of Users (2 requests) rather than RequestedUsernamePartialUsers (1 request)

        Returns:
            A list of User or RequestedUsernamePartialUser, depending on the expand argument.
        """
        users_response = await self._requests.post(
            url=self._url_generator.get_url("users", f"v1/usernames/users"),
            json={"usernames": usernames, "excludeBannedUsers": exclude_banned_users},
        )
        users_data = users_response.json()["data"]

        if expand:
            return [await self.get_user(user_data["id"]) for user_data in users_data]
        else:
            return [
                RequestedUsernamePartialUser(client=self, data=user_data)
                for user_data in users_data
            ]

    async def get_user_by_username(
            self, username: str, exclude_banned_users: bool = False, expand: bool = True
    ) -> Union[RequestedUsernamePartialUser, User]:
        """
        Grabs a user corresponding to the passed username.

        Arguments:
            username: A Roblox username.
            exclude_banned_users: Whether to exclude banned users from the data.
            expand: Whether to return a User (2 requests) rather than a RequestedUsernamePartialUser (1 request)

        Returns:
            A User or RequestedUsernamePartialUser depending on the expand argument.
        """
        users = await self.get_users_by_usernames(
            usernames=[username],
            exclude_banned_users=exclude_banned_users,
            expand=expand,
        )
        try:
            return users[0]
        except IndexError:
            raise UserNotFound("Invalid username.") from None

    def get_base_user(self, user_id: int) -> BaseUser:
        """
        Gets a base user.

        !!! note
            This method does not send any requests - it just generates an object.
            For more information on bases, please see [Bases](../tutorials/bases.md).

        Arguments:
            user_id: A Roblox user ID.

        Returns:
            A BaseUser.
        """
        return BaseUser(client=self, user_id=user_id)

    def user_search(self, keyword: str, page_size: int = 10,
                    max_items: int = None) -> PageIterator:
        """
        Search for users with a keyword.

        Arguments:
            keyword: A keyword to search for.
            page_size: How many members should be returned for each page.
            max_items: The maximum items to return when looping through this object.

        Returns:
            A PageIterator containing RequestedUsernamePartialUser.
        """
        return PageIterator(
            client=self,
            url=self._url_generator.get_url("users", f"v1/users/search"),
            page_size=page_size,
            max_items=max_items,
            extra_parameters={"keyword": keyword},
            handler=lambda client, data: PreviousUsernamesPartialUser(client=client, data=data),
        )

    # Groups
    async def get_group(self, group_id: int) -> Group:
        """
        Gets a group by its ID.

        Arguments:
            group_id: A Roblox group ID.

        Returns:
            A Group.
        """
        try:
            group_response = await self._requests.get(
                url=self._url_generator.get_url("groups", f"v1/groups/{group_id}")
            )
        except BadRequest as exception:
            raise GroupNotFound(
                message="Invalid group.",
                response=exception.response
            ) from None
        group_data = group_response.json()
        return Group(client=self, data=group_data)

    def get_base_group(self, group_id: int) -> BaseGroup:
        """
        Gets a base group.

        !!! note
            This method does not send any requests - it just generates an object.
            For more information on bases, please see [Bases](../tutorials/bases.md).

        Arguments:
            group_id: A Roblox group ID.

        Returns:
            A BaseGroup.
        """
        return BaseGroup(client=self, group_id=group_id)

    # Universes
    async def get_universes(self, universe_ids: List[int]) -> List[Universe]:
        """
        Grabs a list of universes corresponding to each ID in the list.

        Arguments:
            universe_ids: A list of Roblox universe IDs.

        Returns:
            A list of Universes.
        """
        universes_response = await self._requests.get(
            url=self._url_generator.get_url("games", "v1/games"),
            params={"universeIds": universe_ids},
        )
        universes_data = universes_response.json()["data"]
        return [
            Universe(client=self, data=universe_data)
            for universe_data in universes_data
        ]

    async def get_universe(self, universe_id: int) -> Universe:
        """
        Gets a universe with the passed ID.

        Arguments:
            universe_id: A Roblox universe ID.

        Returns:
            A Universe.
        """
        universes = await self.get_universes(universe_ids=[universe_id])
        try:
            return universes[0]
        except IndexError:
            raise UniverseNotFound("Invalid universe.") from None

    def get_base_universe(self, universe_id: int) -> BaseUniverse:
        """
        Gets a base universe.

        !!! note
            This method does not send any requests - it just generates an object.
            For more information on bases, please see [Bases](../tutorials/bases.md).

        Arguments:
            universe_id: A Roblox universe ID.

        Returns:
            A BaseUniverse.
        """
        return BaseUniverse(client=self, universe_id=universe_id)

    # Places
    async def get_places(self, place_ids: List[int]) -> List[Place]:
        """
        Grabs a list of places corresponding to each ID in the list.

        Arguments:
            place_ids: A list of Roblox place IDs.

        Returns:
            A list of Places.
        """
        places_response = await self._requests.get(
            url=self._url_generator.get_url(
                "games", f"v1/games/multiget-place-details"
            ),
            params={"placeIds": place_ids},
        )
        places_data = places_response.json()
        return [
            Place(client=self, data=place_data) for place_data in places_data
        ]

    async def get_place(self, place_id: int) -> Place:
        """
        Gets a place with the passed ID.

        Arguments:
            place_id: A Roblox place ID.

        Returns:
            A Place.
        """
        places = await self.get_places(place_ids=[place_id])
        try:
            return places[0]
        except IndexError:
            raise PlaceNotFound("Invalid place.") from None

    def get_base_place(self, place_id: int) -> BasePlace:
        """
        Gets a base place.

        !!! note
            This method does not send any requests - it just generates an object.
            For more information on bases, please see [Bases](../tutorials/bases.md).

        Arguments:
            place_id: A Roblox place ID.

        Returns:
            A BasePlace.
        """
        return BasePlace(client=self, place_id=place_id)

    # Assets
    async def get_asset(self, asset_id: int) -> EconomyAsset:
        """
        Gets an asset with the passed ID.

        Arguments:
            asset_id: A Roblox asset ID.

        Returns:
            An Asset.
        """
        try:
            asset_response = await self._requests.get(
                url=self._url_generator.get_url(
                    "economy", f"v2/assets/{asset_id}/details"
                )
            )
        except BadRequest as exception:
            raise AssetNotFound(
                message="Invalid asset.",
                response=exception.response
            ) from None
        asset_data = asset_response.json()
        return EconomyAsset(client=self, data=asset_data)

    def get_base_asset(self, asset_id: int) -> BaseAsset:
        """
        Gets a base asset.

        !!! note
            This method does not send any requests - it just generates an object.
            For more information on bases, please see [Bases](../tutorials/bases.md).

        Arguments:
            asset_id: A Roblox asset ID.

        Returns:
            A BaseAsset.
        """
        return BaseAsset(client=self, asset_id=asset_id)

    # Plugins
    async def get_plugins(self, plugin_ids: List[int]) -> List[Plugin]:
        """
        Grabs a list of plugins corresponding to each ID in the list.

        Arguments:
            plugin_ids: A list of Roblox plugin IDs.

        Returns:
            A list of Plugins.
        """
        plugins_response = await self._requests.get(
            url=self._url_generator.get_url(
                "develop", "v1/plugins"
            ),
            params={
                "pluginIds": plugin_ids
            }
        )
        plugins_data = plugins_response.json()["data"]
        return [Plugin(client=self, data=plugin_data) for plugin_data in plugins_data]

    async def get_plugin(self, plugin_id: int) -> Plugin:
        """
        Grabs a plugin with the passed ID.

        Arguments:
            plugin_id: A Roblox plugin ID.

        Returns:
            A Plugin.
        """
        plugins = await self.get_plugins([plugin_id])
        try:
            return plugins[0]
        except IndexError:
            raise PluginNotFound("Invalid plugin.") from None

    def get_base_plugin(self, plugin_id: int) -> BasePlugin:
        """
        Gets a base plugin.

        !!! note
            This method does not send any requests - it just generates an object.
            For more information on bases, please see [Bases](../tutorials/bases.md).

        Arguments:
            plugin_id: A Roblox plugin ID.

        Returns:
            A BasePlugin.
        """
        return BasePlugin(client=self, plugin_id=plugin_id)

    # Badges
    async def get_badge(self, badge_id: int) -> Badge:
        """
        Gets a badge with the passed ID.

        Arguments:
            badge_id: A Roblox badge ID.

        Returns:
            A Badge.
        """
        try:
            badge_response = await self._requests.get(
                url=self._url_generator.get_url(
                    "badges", f"v1/badges/{badge_id}"
                )
            )
        except NotFound as exception:
            raise BadgeNotFound(
                message="Invalid badge.",
                response=exception.response
            ) from None
        badge_data = badge_response.json()
        return Badge(client=self, data=badge_data)

    def get_base_badge(self, badge_id: int) -> BaseBadge:
        """
        Gets a base badge.

        !!! note
            This method does not send any requests - it just generates an object.
            For more information on bases, please see [Bases](../tutorials/bases.md).

        Arguments:
            badge_id: A Roblox badge ID.

        Returns:
            A BaseBadge.
        """
        return BaseBadge(client=self, badge_id=badge_id)

    # Gamepasses
    def get_base_gamepass(self, gamepass_id: int) -> BaseGamePass:
        """
        Gets a base gamepass.

        !!! note
            This method does not send any requests - it just generates an object.
            For more information on bases, please see [Bases](../tutorials/bases.md).

        Arguments:
            gamepass_id: A Roblox gamepass ID.

        Returns: A BaseGamePass.
        """
        return BaseGamePass(client=self, gamepass_id=gamepass_id)

__init__(token=None, base_url='roblox.com')

Parameters:

Name Type Description Default
token str

A .ROBLOSECURITY token to authenticate the client with.

None
base_url str

The base URL to use when sending requests.

'roblox.com'
Source code in roblox/client.py
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
def __init__(self, token: str = None, base_url: str = "roblox.com"):
    """
    Arguments:
        token: A .ROBLOSECURITY token to authenticate the client with.
        base_url: The base URL to use when sending requests.
    """
    self._url_generator: URLGenerator = URLGenerator(base_url=base_url)
    self._requests: Requests = Requests()

    self.url_generator: URLGenerator = self._url_generator
    self.requests: Requests = self._requests

    self.presence: PresenceProvider = PresenceProvider(client=self)
    self.thumbnails: ThumbnailProvider = ThumbnailProvider(client=self)
    self.delivery: DeliveryProvider = DeliveryProvider(client=self)
    self.chat: ChatProvider = ChatProvider(client=self)
    self.account: AccountProvider = AccountProvider(client=self)

    if token:
        self.set_token(token)

get_asset(asset_id) async

Gets an asset with the passed ID.

Parameters:

Name Type Description Default
asset_id int

A Roblox asset ID.

required

Returns:

Type Description
EconomyAsset

An Asset.

Source code in roblox/client.py
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
async def get_asset(self, asset_id: int) -> EconomyAsset:
    """
    Gets an asset with the passed ID.

    Arguments:
        asset_id: A Roblox asset ID.

    Returns:
        An Asset.
    """
    try:
        asset_response = await self._requests.get(
            url=self._url_generator.get_url(
                "economy", f"v2/assets/{asset_id}/details"
            )
        )
    except BadRequest as exception:
        raise AssetNotFound(
            message="Invalid asset.",
            response=exception.response
        ) from None
    asset_data = asset_response.json()
    return EconomyAsset(client=self, data=asset_data)

get_authenticated_user(expand=True) async

Grabs the authenticated user.

Parameters:

Name Type Description Default
expand bool

Whether to return a User (2 requests) rather than a PartialUser (1 request)

True

Returns:

Type Description
Union[User, PartialUser]

The authenticated user.

Source code in roblox/client.py
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
async def get_authenticated_user(
        self, expand: bool = True
) -> Union[User, PartialUser]:
    """
    Grabs the authenticated user.

    Arguments:
        expand: Whether to return a User (2 requests) rather than a PartialUser (1 request)

    Returns:
        The authenticated user.
    """
    authenticated_user_response = await self._requests.get(
        url=self._url_generator.get_url("users", f"v1/users/authenticated")
    )
    authenticated_user_data = authenticated_user_response.json()

    if expand:
        return await self.get_user(authenticated_user_data["id"])
    else:
        return PartialUser(client=self, data=authenticated_user_data)

get_badge(badge_id) async

Gets a badge with the passed ID.

Parameters:

Name Type Description Default
badge_id int

A Roblox badge ID.

required

Returns:

Type Description
Badge

A Badge.

Source code in roblox/client.py
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
async def get_badge(self, badge_id: int) -> Badge:
    """
    Gets a badge with the passed ID.

    Arguments:
        badge_id: A Roblox badge ID.

    Returns:
        A Badge.
    """
    try:
        badge_response = await self._requests.get(
            url=self._url_generator.get_url(
                "badges", f"v1/badges/{badge_id}"
            )
        )
    except NotFound as exception:
        raise BadgeNotFound(
            message="Invalid badge.",
            response=exception.response
        ) from None
    badge_data = badge_response.json()
    return Badge(client=self, data=badge_data)

get_base_asset(asset_id)

Gets a base asset.

Note

This method does not send any requests - it just generates an object. For more information on bases, please see Bases.

Parameters:

Name Type Description Default
asset_id int

A Roblox asset ID.

required

Returns:

Type Description
BaseAsset

A BaseAsset.

Source code in roblox/client.py
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
def get_base_asset(self, asset_id: int) -> BaseAsset:
    """
    Gets a base asset.

    !!! note
        This method does not send any requests - it just generates an object.
        For more information on bases, please see [Bases](../tutorials/bases.md).

    Arguments:
        asset_id: A Roblox asset ID.

    Returns:
        A BaseAsset.
    """
    return BaseAsset(client=self, asset_id=asset_id)

get_base_badge(badge_id)

Gets a base badge.

Note

This method does not send any requests - it just generates an object. For more information on bases, please see Bases.

Parameters:

Name Type Description Default
badge_id int

A Roblox badge ID.

required

Returns:

Type Description
BaseBadge

A BaseBadge.

Source code in roblox/client.py
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
def get_base_badge(self, badge_id: int) -> BaseBadge:
    """
    Gets a base badge.

    !!! note
        This method does not send any requests - it just generates an object.
        For more information on bases, please see [Bases](../tutorials/bases.md).

    Arguments:
        badge_id: A Roblox badge ID.

    Returns:
        A BaseBadge.
    """
    return BaseBadge(client=self, badge_id=badge_id)

get_base_gamepass(gamepass_id)

Gets a base gamepass.

Note

This method does not send any requests - it just generates an object. For more information on bases, please see Bases.

Parameters:

Name Type Description Default
gamepass_id int

A Roblox gamepass ID.

required
Source code in roblox/client.py
539
540
541
542
543
544
545
546
547
548
549
550
551
552
def get_base_gamepass(self, gamepass_id: int) -> BaseGamePass:
    """
    Gets a base gamepass.

    !!! note
        This method does not send any requests - it just generates an object.
        For more information on bases, please see [Bases](../tutorials/bases.md).

    Arguments:
        gamepass_id: A Roblox gamepass ID.

    Returns: A BaseGamePass.
    """
    return BaseGamePass(client=self, gamepass_id=gamepass_id)

get_base_group(group_id)

Gets a base group.

Note

This method does not send any requests - it just generates an object. For more information on bases, please see Bases.

Parameters:

Name Type Description Default
group_id int

A Roblox group ID.

required

Returns:

Type Description
BaseGroup

A BaseGroup.

Source code in roblox/client.py
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
def get_base_group(self, group_id: int) -> BaseGroup:
    """
    Gets a base group.

    !!! note
        This method does not send any requests - it just generates an object.
        For more information on bases, please see [Bases](../tutorials/bases.md).

    Arguments:
        group_id: A Roblox group ID.

    Returns:
        A BaseGroup.
    """
    return BaseGroup(client=self, group_id=group_id)

get_base_place(place_id)

Gets a base place.

Note

This method does not send any requests - it just generates an object. For more information on bases, please see Bases.

Parameters:

Name Type Description Default
place_id int

A Roblox place ID.

required

Returns:

Type Description
BasePlace

A BasePlace.

Source code in roblox/client.py
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
def get_base_place(self, place_id: int) -> BasePlace:
    """
    Gets a base place.

    !!! note
        This method does not send any requests - it just generates an object.
        For more information on bases, please see [Bases](../tutorials/bases.md).

    Arguments:
        place_id: A Roblox place ID.

    Returns:
        A BasePlace.
    """
    return BasePlace(client=self, place_id=place_id)

get_base_plugin(plugin_id)

Gets a base plugin.

Note

This method does not send any requests - it just generates an object. For more information on bases, please see Bases.

Parameters:

Name Type Description Default
plugin_id int

A Roblox plugin ID.

required

Returns:

Type Description
BasePlugin

A BasePlugin.

Source code in roblox/client.py
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
def get_base_plugin(self, plugin_id: int) -> BasePlugin:
    """
    Gets a base plugin.

    !!! note
        This method does not send any requests - it just generates an object.
        For more information on bases, please see [Bases](../tutorials/bases.md).

    Arguments:
        plugin_id: A Roblox plugin ID.

    Returns:
        A BasePlugin.
    """
    return BasePlugin(client=self, plugin_id=plugin_id)

get_base_universe(universe_id)

Gets a base universe.

Note

This method does not send any requests - it just generates an object. For more information on bases, please see Bases.

Parameters:

Name Type Description Default
universe_id int

A Roblox universe ID.

required

Returns:

Type Description
BaseUniverse

A BaseUniverse.

Source code in roblox/client.py
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
def get_base_universe(self, universe_id: int) -> BaseUniverse:
    """
    Gets a base universe.

    !!! note
        This method does not send any requests - it just generates an object.
        For more information on bases, please see [Bases](../tutorials/bases.md).

    Arguments:
        universe_id: A Roblox universe ID.

    Returns:
        A BaseUniverse.
    """
    return BaseUniverse(client=self, universe_id=universe_id)

get_base_user(user_id)

Gets a base user.

Note

This method does not send any requests - it just generates an object. For more information on bases, please see Bases.

Parameters:

Name Type Description Default
user_id int

A Roblox user ID.

required

Returns:

Type Description
BaseUser

A BaseUser.

Source code in roblox/client.py
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
def get_base_user(self, user_id: int) -> BaseUser:
    """
    Gets a base user.

    !!! note
        This method does not send any requests - it just generates an object.
        For more information on bases, please see [Bases](../tutorials/bases.md).

    Arguments:
        user_id: A Roblox user ID.

    Returns:
        A BaseUser.
    """
    return BaseUser(client=self, user_id=user_id)

get_group(group_id) async

Gets a group by its ID.

Parameters:

Name Type Description Default
group_id int

A Roblox group ID.

required

Returns:

Type Description
Group

A Group.

Source code in roblox/client.py
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
async def get_group(self, group_id: int) -> Group:
    """
    Gets a group by its ID.

    Arguments:
        group_id: A Roblox group ID.

    Returns:
        A Group.
    """
    try:
        group_response = await self._requests.get(
            url=self._url_generator.get_url("groups", f"v1/groups/{group_id}")
        )
    except BadRequest as exception:
        raise GroupNotFound(
            message="Invalid group.",
            response=exception.response
        ) from None
    group_data = group_response.json()
    return Group(client=self, data=group_data)

get_place(place_id) async

Gets a place with the passed ID.

Parameters:

Name Type Description Default
place_id int

A Roblox place ID.

required

Returns:

Type Description
Place

A Place.

Source code in roblox/client.py
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
async def get_place(self, place_id: int) -> Place:
    """
    Gets a place with the passed ID.

    Arguments:
        place_id: A Roblox place ID.

    Returns:
        A Place.
    """
    places = await self.get_places(place_ids=[place_id])
    try:
        return places[0]
    except IndexError:
        raise PlaceNotFound("Invalid place.") from None

get_places(place_ids) async

Grabs a list of places corresponding to each ID in the list.

Parameters:

Name Type Description Default
place_ids List[int]

A list of Roblox place IDs.

required

Returns:

Type Description
List[Place]

A list of Places.

Source code in roblox/client.py
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
async def get_places(self, place_ids: List[int]) -> List[Place]:
    """
    Grabs a list of places corresponding to each ID in the list.

    Arguments:
        place_ids: A list of Roblox place IDs.

    Returns:
        A list of Places.
    """
    places_response = await self._requests.get(
        url=self._url_generator.get_url(
            "games", f"v1/games/multiget-place-details"
        ),
        params={"placeIds": place_ids},
    )
    places_data = places_response.json()
    return [
        Place(client=self, data=place_data) for place_data in places_data
    ]

get_plugin(plugin_id) async

Grabs a plugin with the passed ID.

Parameters:

Name Type Description Default
plugin_id int

A Roblox plugin ID.

required

Returns:

Type Description
Plugin

A Plugin.

Source code in roblox/client.py
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
async def get_plugin(self, plugin_id: int) -> Plugin:
    """
    Grabs a plugin with the passed ID.

    Arguments:
        plugin_id: A Roblox plugin ID.

    Returns:
        A Plugin.
    """
    plugins = await self.get_plugins([plugin_id])
    try:
        return plugins[0]
    except IndexError:
        raise PluginNotFound("Invalid plugin.") from None

get_plugins(plugin_ids) async

Grabs a list of plugins corresponding to each ID in the list.

Parameters:

Name Type Description Default
plugin_ids List[int]

A list of Roblox plugin IDs.

required

Returns:

Type Description
List[Plugin]

A list of Plugins.

Source code in roblox/client.py
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
async def get_plugins(self, plugin_ids: List[int]) -> List[Plugin]:
    """
    Grabs a list of plugins corresponding to each ID in the list.

    Arguments:
        plugin_ids: A list of Roblox plugin IDs.

    Returns:
        A list of Plugins.
    """
    plugins_response = await self._requests.get(
        url=self._url_generator.get_url(
            "develop", "v1/plugins"
        ),
        params={
            "pluginIds": plugin_ids
        }
    )
    plugins_data = plugins_response.json()["data"]
    return [Plugin(client=self, data=plugin_data) for plugin_data in plugins_data]

get_universe(universe_id) async

Gets a universe with the passed ID.

Parameters:

Name Type Description Default
universe_id int

A Roblox universe ID.

required

Returns:

Type Description
Universe

A Universe.

Source code in roblox/client.py
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
async def get_universe(self, universe_id: int) -> Universe:
    """
    Gets a universe with the passed ID.

    Arguments:
        universe_id: A Roblox universe ID.

    Returns:
        A Universe.
    """
    universes = await self.get_universes(universe_ids=[universe_id])
    try:
        return universes[0]
    except IndexError:
        raise UniverseNotFound("Invalid universe.") from None

get_universes(universe_ids) async

Grabs a list of universes corresponding to each ID in the list.

Parameters:

Name Type Description Default
universe_ids List[int]

A list of Roblox universe IDs.

required

Returns:

Type Description
List[Universe]

A list of Universes.

Source code in roblox/client.py
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
async def get_universes(self, universe_ids: List[int]) -> List[Universe]:
    """
    Grabs a list of universes corresponding to each ID in the list.

    Arguments:
        universe_ids: A list of Roblox universe IDs.

    Returns:
        A list of Universes.
    """
    universes_response = await self._requests.get(
        url=self._url_generator.get_url("games", "v1/games"),
        params={"universeIds": universe_ids},
    )
    universes_data = universes_response.json()["data"]
    return [
        Universe(client=self, data=universe_data)
        for universe_data in universes_data
    ]

get_user(user_id) async

Gets a user with the specified user ID.

Parameters:

Name Type Description Default
user_id int

A Roblox user ID.

required

Returns:

Type Description
User

A user object.

Source code in roblox/client.py
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
async def get_user(self, user_id: int) -> User:
    """
    Gets a user with the specified user ID.

    Arguments:
        user_id: A Roblox user ID.

    Returns:
        A user object.
    """
    try:
        user_response = await self._requests.get(
            url=self.url_generator.get_url("users", f"v1/users/{user_id}")
        )
    except NotFound as exception:
        raise UserNotFound(
            message="Invalid user.",
            response=exception.response
        ) from None
    user_data = user_response.json()
    return User(client=self, data=user_data)

get_user_by_username(username, exclude_banned_users=False, expand=True) async

Grabs a user corresponding to the passed username.

Parameters:

Name Type Description Default
username str

A Roblox username.

required
exclude_banned_users bool

Whether to exclude banned users from the data.

False
expand bool

Whether to return a User (2 requests) rather than a RequestedUsernamePartialUser (1 request)

True

Returns:

Type Description
Union[RequestedUsernamePartialUser, User]

A User or RequestedUsernamePartialUser depending on the expand argument.

Source code in roblox/client.py
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
async def get_user_by_username(
        self, username: str, exclude_banned_users: bool = False, expand: bool = True
) -> Union[RequestedUsernamePartialUser, User]:
    """
    Grabs a user corresponding to the passed username.

    Arguments:
        username: A Roblox username.
        exclude_banned_users: Whether to exclude banned users from the data.
        expand: Whether to return a User (2 requests) rather than a RequestedUsernamePartialUser (1 request)

    Returns:
        A User or RequestedUsernamePartialUser depending on the expand argument.
    """
    users = await self.get_users_by_usernames(
        usernames=[username],
        exclude_banned_users=exclude_banned_users,
        expand=expand,
    )
    try:
        return users[0]
    except IndexError:
        raise UserNotFound("Invalid username.") from None

get_users(user_ids, exclude_banned_users=False, expand=False) async

Grabs a list of users corresponding to each user ID in the list.

Parameters:

Name Type Description Default
user_ids List[int]

A list of Roblox user IDs.

required
exclude_banned_users bool

Whether to exclude banned users from the data.

False
expand bool

Whether to return a list of Users (2 requests) rather than PartialUsers (1 request)

False

Returns:

Type Description
Union[List[PartialUser], List[User]]

A List of Users or partial users.

Source code in roblox/client.py
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
async def get_users(
        self,
        user_ids: List[int],
        exclude_banned_users: bool = False,
        expand: bool = False,
) -> Union[List[PartialUser], List[User]]:
    """
    Grabs a list of users corresponding to each user ID in the list.

    Arguments:
        user_ids: A list of Roblox user IDs.
        exclude_banned_users: Whether to exclude banned users from the data.
        expand: Whether to return a list of Users (2 requests) rather than PartialUsers (1 request)

    Returns:
        A List of Users or partial users.
    """
    users_response = await self._requests.post(
        url=self._url_generator.get_url("users", f"v1/users"),
        json={"userIds": user_ids, "excludeBannedUsers": exclude_banned_users},
    )
    users_data = users_response.json()["data"]

    if expand:
        return [await self.get_user(user_data["id"]) for user_data in users_data]
    else:
        return [
            PartialUser(client=self, data=user_data)
            for user_data in users_data
        ]

get_users_by_usernames(usernames, exclude_banned_users=False, expand=False) async

Grabs a list of users corresponding to each username in the list.

Parameters:

Name Type Description Default
usernames List[str]

A list of Roblox usernames.

required
exclude_banned_users bool

Whether to exclude banned users from the data.

False
expand bool

Whether to return a list of Users (2 requests) rather than RequestedUsernamePartialUsers (1 request)

False

Returns:

Type Description
Union[List[RequestedUsernamePartialUser], List[User]]

A list of User or RequestedUsernamePartialUser, depending on the expand argument.

Source code in roblox/client.py
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
async def get_users_by_usernames(
        self,
        usernames: List[str],
        exclude_banned_users: bool = False,
        expand: bool = False,
) -> Union[List[RequestedUsernamePartialUser], List[User]]:
    """
    Grabs a list of users corresponding to each username in the list.

    Arguments:
        usernames: A list of Roblox usernames.
        exclude_banned_users: Whether to exclude banned users from the data.
        expand: Whether to return a list of Users (2 requests) rather than RequestedUsernamePartialUsers (1 request)

    Returns:
        A list of User or RequestedUsernamePartialUser, depending on the expand argument.
    """
    users_response = await self._requests.post(
        url=self._url_generator.get_url("users", f"v1/usernames/users"),
        json={"usernames": usernames, "excludeBannedUsers": exclude_banned_users},
    )
    users_data = users_response.json()["data"]

    if expand:
        return [await self.get_user(user_data["id"]) for user_data in users_data]
    else:
        return [
            RequestedUsernamePartialUser(client=self, data=user_data)
            for user_data in users_data
        ]

set_token(token=None)

Authenticates the client with the passed .ROBLOSECURITY token. This method does not send any requests and will not throw if the token is invalid.

Parameters:

Name Type Description Default
token Optional[str]

A .ROBLOSECURITY token to authenticate the client with.

None
Source code in roblox/client.py
76
77
78
79
80
81
82
83
84
85
def set_token(self, token: Optional[str] = None) -> None:
    """
    Authenticates the client with the passed .ROBLOSECURITY token.
    This method does not send any requests and will not throw if the token is invalid.

    Arguments:
        token: A .ROBLOSECURITY token to authenticate the client with.

    """
    self._requests.session.cookies[".ROBLOSECURITY"] = token

Search for users with a keyword.

Parameters:

Name Type Description Default
keyword str

A keyword to search for.

required
page_size int

How many members should be returned for each page.

10
max_items int

The maximum items to return when looping through this object.

None

Returns:

Type Description
PageIterator

A PageIterator containing RequestedUsernamePartialUser.

Source code in roblox/client.py
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
def user_search(self, keyword: str, page_size: int = 10,
                max_items: int = None) -> PageIterator:
    """
    Search for users with a keyword.

    Arguments:
        keyword: A keyword to search for.
        page_size: How many members should be returned for each page.
        max_items: The maximum items to return when looping through this object.

    Returns:
        A PageIterator containing RequestedUsernamePartialUser.
    """
    return PageIterator(
        client=self,
        url=self._url_generator.get_url("users", f"v1/users/search"),
        page_size=page_size,
        max_items=max_items,
        extra_parameters={"keyword": keyword},
        handler=lambda client, data: PreviousUsernamesPartialUser(client=client, data=data),
    )