Browse Source

Add support for role member counts

master
Rapptz 3 days ago
parent
commit
ab8195bbd3
  1. 33
      discord/guild.py
  2. 3
      discord/http.py

33
discord/guild.py

@ -3872,6 +3872,39 @@ class Guild(Hashable):
return roles
async def role_member_counts(self) -> Dict[Union[Object, Role], int]:
"""|coro|
Retrieves a mapping of roles to the number of members that have it.
You must have :attr:`~Permissions.manage_roles` to do this.
.. versionadded:: 2.7
Raises
-------
Forbidden
You do not have permissions to view the role member counts.
HTTPException
Retrieving the role member counts failed.
Returns
--------
Dict[Union[:class:`Object`, :class:`Role`], :class:`int`]
A mapping of roles to the number of members that have it.
If a role is not found in the cache, it will be represented as an :class:`Object`
instead of a :class:`Role`.
"""
data = await self._state.http.get_role_member_counts(self.id)
result: Dict[Union[Object, Role], int] = {}
for role_id, member_count in data.items():
role_id = int(role_id)
role = self.get_role(role_id)
if role is None:
role = Object(id=role_id, type=Role)
result[role] = member_count
return result
async def welcome_screen(self) -> WelcomeScreen:
"""|coro|

3
discord/http.py

@ -1906,6 +1906,9 @@ class HTTPClient:
def get_role(self, guild_id: Snowflake, role_id: Snowflake) -> Response[role.Role]:
return self.request(Route('GET', '/guilds/{guild_id}/roles/{role_id}', guild_id=guild_id, role_id=role_id))
def get_role_member_counts(self, guild_id: Snowflake) -> Response[Dict[str, int]]:
return self.request(Route('GET', '/guilds/{guild_id}/roles/member-counts', guild_id=guild_id))
def edit_role(
self, guild_id: Snowflake, role_id: Snowflake, *, reason: Optional[str] = None, **fields: Any
) -> Response[role.Role]:

Loading…
Cancel
Save