Skip to content

Commit ab8195b

Browse files
committed
Add support for role member counts
1 parent c58b973 commit ab8195b

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

discord/guild.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3872,6 +3872,39 @@ async def edit_role_positions(self, positions: Mapping[Snowflake, int], *, reaso
38723872

38733873
return roles
38743874

3875+
async def role_member_counts(self) -> Dict[Union[Object, Role], int]:
3876+
"""|coro|
3877+
3878+
Retrieves a mapping of roles to the number of members that have it.
3879+
3880+
You must have :attr:`~Permissions.manage_roles` to do this.
3881+
3882+
.. versionadded:: 2.7
3883+
3884+
Raises
3885+
-------
3886+
Forbidden
3887+
You do not have permissions to view the role member counts.
3888+
HTTPException
3889+
Retrieving the role member counts failed.
3890+
3891+
Returns
3892+
--------
3893+
Dict[Union[:class:`Object`, :class:`Role`], :class:`int`]
3894+
A mapping of roles to the number of members that have it.
3895+
If a role is not found in the cache, it will be represented as an :class:`Object`
3896+
instead of a :class:`Role`.
3897+
"""
3898+
data = await self._state.http.get_role_member_counts(self.id)
3899+
result: Dict[Union[Object, Role], int] = {}
3900+
for role_id, member_count in data.items():
3901+
role_id = int(role_id)
3902+
role = self.get_role(role_id)
3903+
if role is None:
3904+
role = Object(id=role_id, type=Role)
3905+
result[role] = member_count
3906+
return result
3907+
38753908
async def welcome_screen(self) -> WelcomeScreen:
38763909
"""|coro|
38773910

discord/http.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1906,6 +1906,9 @@ def get_roles(self, guild_id: Snowflake) -> Response[List[role.Role]]:
19061906
def get_role(self, guild_id: Snowflake, role_id: Snowflake) -> Response[role.Role]:
19071907
return self.request(Route('GET', '/guilds/{guild_id}/roles/{role_id}', guild_id=guild_id, role_id=role_id))
19081908

1909+
def get_role_member_counts(self, guild_id: Snowflake) -> Response[Dict[str, int]]:
1910+
return self.request(Route('GET', '/guilds/{guild_id}/roles/member-counts', guild_id=guild_id))
1911+
19091912
def edit_role(
19101913
self, guild_id: Snowflake, role_id: Snowflake, *, reason: Optional[str] = None, **fields: Any
19111914
) -> Response[role.Role]:

0 commit comments

Comments
 (0)