code: async def create_role(self, *, reason=None, **fields):
          
  
          try:
              perms = fields.pop('permissions')
          except KeyError:
              fields['permissions'] = 0
          else:
              fields['permissions'] = perms.value
  
          try:
              colour = fields.pop('colour')
          except KeyError:
              colour = fields.get('color', Colour.default())
          finally:
              fields['color'] = colour.value
  
          valid_keys = ('name', 'permissions', 'color', 'hoist', 'mentionable')
          for key in fields:
              if key not in valid_keys:
                  raise InvalidArgument('%r is not a valid field.' % key)
  
          data = await self._state.http.create_role(self.id, reason=reason, **fields)
          role = Role(guild=self, data=data, state=self._state)
  
          # TODO: add to cache
          return role
docs: |coro|
  
          Creates a :class:`Role` for the guild.
  
          All fields are optional.
  
          You must have the :attr:`~Permissions.manage_roles` permission to
          do this.
  
          Parameters
          -----------
          name: :class:`str`
              The role name. Defaults to 'new role'.
          permissions: :class:`Permissions`
              The permissions to have. Defaults to no permissions.
          colour: :class:`Colour`
              The colour for the role. Defaults to :meth:`Colour.default`.
              This is aliased to ``color`` as well.
          hoist: :class:`bool`
              Indicates if the role should be shown separately in the member list.
              Defaults to False.
          mentionable: :class:`bool`
              Indicates if the role should be mentionable by others.
              Defaults to False.
          reason: Optional[:class:`str`]
              The reason for creating this role. Shows up on the audit log.
  
          Raises
          -------
          Forbidden
              You do not have permissions to create the role.
          HTTPException
              Creating the role failed.
          InvalidArgument
              An invalid keyword argument was given.
  
          Returns
          --------
          :class:`Role`
              The newly created role.