Module ro_py.users
This file houses functions and classes that pertain to Roblox users and profiles.
Expand source code
"""
This file houses functions and classes that pertain to Roblox users and profiles.
"""
import copy
import iso8601
import asyncio
from typing import Callable
from ro_py.events import EventTypes
from ro_py.bases.baseuser import BaseUser
from ro_py.thumbnails import UserThumbnailGenerator
from ro_py.utilities.clientobject import ClientObject
from ro_py.utilities.url import url
endpoint = url("users")
class User(BaseUser, ClientObject):
"""
Represents a Roblox user and their profile.
Can be initialized with either a user ID or a username.
I'm in so much pain
Parameters
----------
cso : ro_py.client.ClientSharedObject
ClientSharedObject.
user_id : int
The id of a user.
"""
def __init__(self, cso, user_id):
super().__init__(cso, user_id)
self.cso = cso
self.id = user_id
self.name = None
self.description = None
self.created = None
self.is_banned = None
self.display_name = None
self.thumbnails = UserThumbnailGenerator(cso, user_id)
async def update(self):
"""
Updates some class values.
:return: Nothing
"""
user_info_req = await self.requests.get(endpoint + f"v1/users/{self.id}")
user_info = user_info_req.json()
self.description = user_info["description"]
self.created = iso8601.parse_date(user_info["created"])
self.is_banned = user_info["isBanned"]
self.name = user_info["name"]
self.display_name = user_info["displayName"]
# has_premium_req = requests.get(f"https://premiumfeatures.roblox.com/v1/users/{self.id}/validate-membership")
# self.has_premium = has_premium_req
class Events:
def __init__(self, cso, user):
self.cso = cso
self.user = user
def bind(self, func: Callable, event: str, delay: int = 15):
"""
Binds an event to the provided function.
Parameters
----------
func : function
Function that will be called when the event fires.
event : ro_py.events.EventTypes
The name of the event.
delay : int
How many seconds between requests.
"""
if event == EventTypes.on_user_change:
return asyncio.create_task(self.on_user_change(func, delay))
async def on_user_change(self, func: Callable, delay: int):
old_user = copy.copy(await self.user.update())
while True:
await asyncio.sleep(delay)
new_user = await self.user.update()
has_changed = False
for attr, value in old_user.__dict__.items():
if getattr(new_user, attr) != value:
has_changed = True
if has_changed:
if asyncio.iscoroutinefunction(func):
await func(old_user, new_user)
else:
func(old_user, new_user)
old_user = copy.copy(new_user)
Classes
class Events (cso, user)
-
Expand source code
class Events: def __init__(self, cso, user): self.cso = cso self.user = user def bind(self, func: Callable, event: str, delay: int = 15): """ Binds an event to the provided function. Parameters ---------- func : function Function that will be called when the event fires. event : ro_py.events.EventTypes The name of the event. delay : int How many seconds between requests. """ if event == EventTypes.on_user_change: return asyncio.create_task(self.on_user_change(func, delay)) async def on_user_change(self, func: Callable, delay: int): old_user = copy.copy(await self.user.update()) while True: await asyncio.sleep(delay) new_user = await self.user.update() has_changed = False for attr, value in old_user.__dict__.items(): if getattr(new_user, attr) != value: has_changed = True if has_changed: if asyncio.iscoroutinefunction(func): await func(old_user, new_user) else: func(old_user, new_user) old_user = copy.copy(new_user)
Methods
def bind(self, func: Callable, event: str, delay: int = 15)
-
Binds an event to the provided function.
Parameters
func
:function
- Function that will be called when the event fires.
event
:EventTypes
- The name of the event.
delay
:int
- How many seconds between requests.
Expand source code
def bind(self, func: Callable, event: str, delay: int = 15): """ Binds an event to the provided function. Parameters ---------- func : function Function that will be called when the event fires. event : ro_py.events.EventTypes The name of the event. delay : int How many seconds between requests. """ if event == EventTypes.on_user_change: return asyncio.create_task(self.on_user_change(func, delay))
async def on_user_change(self, func: Callable, delay: int)
-
Expand source code
async def on_user_change(self, func: Callable, delay: int): old_user = copy.copy(await self.user.update()) while True: await asyncio.sleep(delay) new_user = await self.user.update() has_changed = False for attr, value in old_user.__dict__.items(): if getattr(new_user, attr) != value: has_changed = True if has_changed: if asyncio.iscoroutinefunction(func): await func(old_user, new_user) else: func(old_user, new_user) old_user = copy.copy(new_user)
class User (cso, user_id)
-
Represents a Roblox user and their profile. Can be initialized with either a user ID or a username.
I'm in so much pain
Parameters
cso
:ro_py.client.ClientSharedObject
- ClientSharedObject.
user_id
:int
- The id of a user.
Expand source code
class User(BaseUser, ClientObject): """ Represents a Roblox user and their profile. Can be initialized with either a user ID or a username. I'm in so much pain Parameters ---------- cso : ro_py.client.ClientSharedObject ClientSharedObject. user_id : int The id of a user. """ def __init__(self, cso, user_id): super().__init__(cso, user_id) self.cso = cso self.id = user_id self.name = None self.description = None self.created = None self.is_banned = None self.display_name = None self.thumbnails = UserThumbnailGenerator(cso, user_id) async def update(self): """ Updates some class values. :return: Nothing """ user_info_req = await self.requests.get(endpoint + f"v1/users/{self.id}") user_info = user_info_req.json() self.description = user_info["description"] self.created = iso8601.parse_date(user_info["created"]) self.is_banned = user_info["isBanned"] self.name = user_info["name"] self.display_name = user_info["displayName"] # has_premium_req = requests.get(f"https://premiumfeatures.roblox.com/v1/users/{self.id}/validate-membership") # self.has_premium = has_premium_req
Ancestors
Methods
async def update(self)
-
Updates some class values. :return: Nothing
Expand source code
async def update(self): """ Updates some class values. :return: Nothing """ user_info_req = await self.requests.get(endpoint + f"v1/users/{self.id}") user_info = user_info_req.json() self.description = user_info["description"] self.created = iso8601.parse_date(user_info["created"]) self.is_banned = user_info["isBanned"] self.name = user_info["name"] self.display_name = user_info["displayName"] # has_premium_req = requests.get(f"https://premiumfeatures.roblox.com/v1/users/{self.id}/validate-membership") # self.has_premium = has_premium_req
Inherited members