Module ro_py.roles

This file contains classes and functions related to Roblox roles.

Expand source code
"""

This file contains classes and functions related to Roblox roles.

"""


from ro_py.utilities.url import url
endpoint = url("groups")


class RolePermissions:
    """
    Represents role permissions.
    """
    view_wall = None
    post_to_wall = None
    delete_from_wall = None
    view_status = None
    post_to_status = None
    change_rank = None
    invite_members = None
    remove_members = None
    manage_relationships = None
    view_audit_logs = None
    spend_group_funds = None
    advertise_group = None
    create_items = None
    manage_items = None
    manage_group_games = None


def get_rp_names(rp):
    """
    Converts permissions into something Roblox can read.

    Parameters
    ----------
    rp : ro_py.roles.RolePermissions

    Returns
    -------
    dict
    """
    return {
        "viewWall": rp.view_wall,
        "PostToWall": rp.post_to_wall,
        "deleteFromWall": rp.delete_from_wall,
        "viewStatus": rp.view_status,
        "postToStatus": rp.post_to_status,
        "changeRank": rp.change_rank,
        "inviteMembers": rp.invite_members,
        "removeMembers": rp.remove_members,
        "manageRelationships": rp.manage_relationships,
        "viewAuditLogs": rp.view_audit_logs,
        "spendGroupFunds": rp.spend_group_funds,
        "advertiseGroup": rp.advertise_group,
        "createItems": rp.create_items,
        "manageItems": rp.manage_items,
        "manageGroupGames": rp.manage_group_games
    }


class Role:
    """
    Represents a role

    Parameters
    ----------
    requests : ro_py.utilities.requests.Requests
            Requests object to use for API requests.
    group : ro_py.groups.Group
            Group the role belongs to.
    role_data : dict
            Dictionary containing role information.
    """
    def __init__(self, cso, group, role_data):
        self.cso = cso
        self.requests = cso.requests
        self.group = group
        self.id = role_data['id']
        self.name = role_data['name']
        self.description = role_data.get('description')
        self.rank = role_data['rank']
        self.member_count = role_data.get('memberCount')

    async def update(self):
        """
        Updates information of the role.
        """
        update_req = await self.requests.get(
            url=endpoint + f"/v1/groups/{self.group.id}/roles"
        )
        data = update_req.json()
        for role in data['roles']:
            if role['id'] == self.id:
                self.name = role['name']
                self.description = role['description']
                self.rank = role['rank']
                self.member_count = role['memberCount']
                break

    async def edit(self, name=None, description=None, rank=None):
        """
        Edits the name, description or rank of a role

        Parameters
        ----------
        name : str, optional
            New name for the role.
        description : str, optional
            New description for the role.
        rank : int, optional
            Number from 1-254 that determains the new rank number for the role.

        Returns
        -------
        int
        """
        edit_req = await self.requests.patch(
            url=endpoint + f"/v1/groups/{self.group.id}/rolesets/{self.id}",
            data={
                "description": description if description else self.description,
                "name": name if name else self.name,
                "rank": rank if rank else self.rank
            }
        )
        return edit_req.status_code == 200

    async def edit_permissions(self, role_permissions):
        """
        Edits the permissions of a role.

        Parameters
        ----------
        role_permissions : ro_py.roles.RolePermissions
            New permissions that will overwrite the old ones.

        Returns
        -------
        int
        """
        data = {
            "permissions": {}
        }

        for key, value in get_rp_names(role_permissions):
            if value is True or False:
                data['permissions'][key] = value

        edit_req = await self.requests.patch(
            url=endpoint + f"/v1/groups/{self.group.id}/roles/{self.id}/permissions",
            data=data
        )

        return edit_req.status_code == 200

Functions

def get_rp_names(rp)

Converts permissions into something Roblox can read.

Parameters

rp : RolePermissions
 

Returns

dict
 
Expand source code
def get_rp_names(rp):
    """
    Converts permissions into something Roblox can read.

    Parameters
    ----------
    rp : ro_py.roles.RolePermissions

    Returns
    -------
    dict
    """
    return {
        "viewWall": rp.view_wall,
        "PostToWall": rp.post_to_wall,
        "deleteFromWall": rp.delete_from_wall,
        "viewStatus": rp.view_status,
        "postToStatus": rp.post_to_status,
        "changeRank": rp.change_rank,
        "inviteMembers": rp.invite_members,
        "removeMembers": rp.remove_members,
        "manageRelationships": rp.manage_relationships,
        "viewAuditLogs": rp.view_audit_logs,
        "spendGroupFunds": rp.spend_group_funds,
        "advertiseGroup": rp.advertise_group,
        "createItems": rp.create_items,
        "manageItems": rp.manage_items,
        "manageGroupGames": rp.manage_group_games
    }

Classes

class Role (cso, group, role_data)

Represents a role

Parameters

requests : Requests
Requests object to use for API requests.
group : Group
Group the role belongs to.
role_data : dict
Dictionary containing role information.
Expand source code
class Role:
    """
    Represents a role

    Parameters
    ----------
    requests : ro_py.utilities.requests.Requests
            Requests object to use for API requests.
    group : ro_py.groups.Group
            Group the role belongs to.
    role_data : dict
            Dictionary containing role information.
    """
    def __init__(self, cso, group, role_data):
        self.cso = cso
        self.requests = cso.requests
        self.group = group
        self.id = role_data['id']
        self.name = role_data['name']
        self.description = role_data.get('description')
        self.rank = role_data['rank']
        self.member_count = role_data.get('memberCount')

    async def update(self):
        """
        Updates information of the role.
        """
        update_req = await self.requests.get(
            url=endpoint + f"/v1/groups/{self.group.id}/roles"
        )
        data = update_req.json()
        for role in data['roles']:
            if role['id'] == self.id:
                self.name = role['name']
                self.description = role['description']
                self.rank = role['rank']
                self.member_count = role['memberCount']
                break

    async def edit(self, name=None, description=None, rank=None):
        """
        Edits the name, description or rank of a role

        Parameters
        ----------
        name : str, optional
            New name for the role.
        description : str, optional
            New description for the role.
        rank : int, optional
            Number from 1-254 that determains the new rank number for the role.

        Returns
        -------
        int
        """
        edit_req = await self.requests.patch(
            url=endpoint + f"/v1/groups/{self.group.id}/rolesets/{self.id}",
            data={
                "description": description if description else self.description,
                "name": name if name else self.name,
                "rank": rank if rank else self.rank
            }
        )
        return edit_req.status_code == 200

    async def edit_permissions(self, role_permissions):
        """
        Edits the permissions of a role.

        Parameters
        ----------
        role_permissions : ro_py.roles.RolePermissions
            New permissions that will overwrite the old ones.

        Returns
        -------
        int
        """
        data = {
            "permissions": {}
        }

        for key, value in get_rp_names(role_permissions):
            if value is True or False:
                data['permissions'][key] = value

        edit_req = await self.requests.patch(
            url=endpoint + f"/v1/groups/{self.group.id}/roles/{self.id}/permissions",
            data=data
        )

        return edit_req.status_code == 200

Methods

async def edit(self, name=None, description=None, rank=None)

Edits the name, description or rank of a role

Parameters

name : str, optional
New name for the role.
description : str, optional
New description for the role.
rank : int, optional
Number from 1-254 that determains the new rank number for the role.

Returns

int
 
Expand source code
async def edit(self, name=None, description=None, rank=None):
    """
    Edits the name, description or rank of a role

    Parameters
    ----------
    name : str, optional
        New name for the role.
    description : str, optional
        New description for the role.
    rank : int, optional
        Number from 1-254 that determains the new rank number for the role.

    Returns
    -------
    int
    """
    edit_req = await self.requests.patch(
        url=endpoint + f"/v1/groups/{self.group.id}/rolesets/{self.id}",
        data={
            "description": description if description else self.description,
            "name": name if name else self.name,
            "rank": rank if rank else self.rank
        }
    )
    return edit_req.status_code == 200
async def edit_permissions(self, role_permissions)

Edits the permissions of a role.

Parameters

role_permissions : RolePermissions
New permissions that will overwrite the old ones.

Returns

int
 
Expand source code
async def edit_permissions(self, role_permissions):
    """
    Edits the permissions of a role.

    Parameters
    ----------
    role_permissions : ro_py.roles.RolePermissions
        New permissions that will overwrite the old ones.

    Returns
    -------
    int
    """
    data = {
        "permissions": {}
    }

    for key, value in get_rp_names(role_permissions):
        if value is True or False:
            data['permissions'][key] = value

    edit_req = await self.requests.patch(
        url=endpoint + f"/v1/groups/{self.group.id}/roles/{self.id}/permissions",
        data=data
    )

    return edit_req.status_code == 200
async def update(self)

Updates information of the role.

Expand source code
async def update(self):
    """
    Updates information of the role.
    """
    update_req = await self.requests.get(
        url=endpoint + f"/v1/groups/{self.group.id}/roles"
    )
    data = update_req.json()
    for role in data['roles']:
        if role['id'] == self.id:
            self.name = role['name']
            self.description = role['description']
            self.rank = role['rank']
            self.member_count = role['memberCount']
            break
class RolePermissions

Represents role permissions.

Expand source code
class RolePermissions:
    """
    Represents role permissions.
    """
    view_wall = None
    post_to_wall = None
    delete_from_wall = None
    view_status = None
    post_to_status = None
    change_rank = None
    invite_members = None
    remove_members = None
    manage_relationships = None
    view_audit_logs = None
    spend_group_funds = None
    advertise_group = None
    create_items = None
    manage_items = None
    manage_group_games = None

Class variables

var advertise_group
var change_rank
var create_items
var delete_from_wall
var invite_members
var manage_group_games
var manage_items
var manage_relationships
var post_to_status
var post_to_wall
var remove_members
var spend_group_funds
var view_audit_logs
var view_status
var view_wall