diff --git a/discord/guild.py b/discord/guild.py index eda67a2e13..047316f15d 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -2814,6 +2814,30 @@ async def fetch_roles(self) -> list[Role]: """ data = await self._state.http.get_roles(self.id) return [Role(guild=self, state=self._state, data=d) for d in data] + + async def fetch_role(self, role_id: int) -> Role: + """|coro| + + Retrieves a :class:`Role` that the guild has. + + .. note:: + + This method is an API call. For general usage, consider using :attr:`get_role` instead. + + .. versionadded:: 2.7 + + Returns + ------- + :class:`Role` + The role in the guild with the specified ID. + + Raises + ------ + HTTPException + Retrieving the role failed. + """ + data = await self._state.http.get_role(self.id, role_id) + return Role(guild=self, state=self._state, data=data) async def _fetch_role(self, role_id: int) -> Role: """|coro| diff --git a/discord/http.py b/discord/http.py index 8b3db319e7..7813d20a23 100644 --- a/discord/http.py +++ b/discord/http.py @@ -2048,6 +2048,16 @@ def delete_invite( def get_roles(self, guild_id: Snowflake) -> Response[list[role.Role]]: return self.request(Route("GET", "/guilds/{guild_id}/roles", guild_id=guild_id)) + 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 edit_role( self, guild_id: Snowflake,