Repository: Cog-Creators/Red-DiscordBot

Issue:
[Admin] Have selfrole/addrole/removerole notify user if the user has the role or not when adding/removing roles
# Feature request

#### Select the type of feature you are requesting:

- [ ] Cog
- [X] Command
- [ ] API functionality

#### Describe your requested feature
Simply add a few lines to notify the user if they already have the role when adding a role, or if they try a remove they don't have. This could lead to confusion if the user doesn't know all the roles they have, and add a role they already had or remove one they didn't have.

Same thing if the adding with addrole or removing with removerole.

```python
async def _addrole(self, ctx: commands.Context, member: discord.Member, role: discord.Role):
        try:
            if role in member.roles:
                await ctx.send("You already have that role.")
                return
            await member.add_roles(role)
        except discord.Forbidden:
            if not self.pass_hierarchy_check(ctx, role):
                await self.complain(
                    ctx, T_(HIERARCHY_ISSUE), role=role, member=member, verb=_("add")
                )
            else:
                await self.complain(ctx, T_(GENERIC_FORBIDDEN))
        else:
            await ctx.send(
                _("I successfully added {role.name} to {member.display_name}").format(
                    role=role, member=member
                )
            )

async def _removerole(self, ctx: commands.Context, member: discord.Member, role: discord.Role):
        try:
            if role not in member.roles:
                await ctx.send("You don't have that role.")
                return
            await member.remove_roles(role)
        except discord.Forbidden:
            if not self.pass_hierarchy_check(ctx, role):
                await self.complain(
                    ctx, T_(HIERARCHY_ISSUE), role=role, member=member, verb=_("remove")
                )
            else:
                await self.complain(ctx, T_(GENERIC_FORBIDDEN))
        else:
            await ctx.send(
                _("I successfully removed {role.name} from {member.display_name}").format(
                    role=role, member=member
                )
            )
```

<!--
Feel free to describe in as much detail as you wish.

If you are requesting a cog to be included in core: 
    - Describe the functionality in as much detail as possible
    - Include the command structure, if possible
    - Please note that unless it's something that should be core functionality,
      we reserve the right to reject your suggestion and point you to our cog 
      board to request it for a third-party cog
      
If you are requesting a command:
    - Include what cog it should be in and a name for the command
    - Describe the intended functionality for the command
    - Note any restrictions on who can use the command or where it can be used

If you are requesting API functionality:
    - Describe what it should do
    - Note whether it is to extend existing functionality or introduce new functionality
   
-->



Discussion:
Hello @brandons209 can I work on this?
Sure, I don't think there's much else to add to it though. 

Resolving patch:
diff --git a/redbot/cogs/admin/admin.py b/redbot/cogs/admin/admin.py
--- a/redbot/cogs/admin/admin.py
+++ b/redbot/cogs/admin/admin.py
@@ -121,8 +121,13 @@ def pass_user_hierarchy_check(ctx: commands.Context, role: discord.Role) -> bool
     async def _addrole(
         self, ctx: commands.Context, member: discord.Member, role: discord.Role, *, check_user=True
     ):
-        if member is None:
-            member = ctx.author
+        if role in member.roles:
+            await ctx.send(
+                _("{member.display_name} already has the role {role.name}.").format(
+                    role=role, member=member
+                )
+            )
+            return
         if check_user and not self.pass_user_hierarchy_check(ctx, role):
             await ctx.send(_(USER_HIERARCHY_ISSUE_ADD).format(role=role, member=member))
             return
@@ -146,8 +151,13 @@ async def _addrole(
     async def _removerole(
         self, ctx: commands.Context, member: discord.Member, role: discord.Role, *, check_user=True
     ):
-        if member is None:
-            member = ctx.author
+        if role not in member.roles:
+            await ctx.send(
+                _("{member.display_name} does not have the role {role.name}.").format(
+                    role=role, member=member
+                )
+            )
+            return
         if check_user and not self.pass_user_hierarchy_check(ctx, role):
             await ctx.send(_(USER_HIERARCHY_ISSUE_REMOVE).format(role=role, member=member))
             return


Test patch: