diff options
Diffstat (limited to '')
| -rw-r--r-- | bot/cogs/dm_relay.py | 3 | ||||
| -rw-r--r-- | bot/converters.py | 22 | 
2 files changed, 24 insertions, 1 deletions
| diff --git a/bot/cogs/dm_relay.py b/bot/cogs/dm_relay.py index 0c3eddf42..c5a3dba22 100644 --- a/bot/cogs/dm_relay.py +++ b/bot/cogs/dm_relay.py @@ -8,6 +8,7 @@ from discord.ext.commands import Cog  from bot import constants  from bot.bot import Bot +from bot.converters import UserMentionOrID  from bot.utils import RedisCache  from bot.utils.checks import in_whitelist_check, with_role_check  from bot.utils.messages import send_attachments @@ -29,7 +30,7 @@ class DMRelay(Cog):          self.bot.loop.create_task(self.fetch_webhook())      @commands.command(aliases=("reply",)) -    async def send_dm(self, ctx: commands.Context, member: Optional[discord.Member], *, message: str) -> None: +    async def send_dm(self, ctx: commands.Context, member: Optional[UserMentionOrID], *, message: str) -> None:          """          Allows you to send a DM to a user from the bot. diff --git a/bot/converters.py b/bot/converters.py index 898822165..7c62f92dd 100644 --- a/bot/converters.py +++ b/bot/converters.py @@ -330,6 +330,28 @@ def proxy_user(user_id: str) -> discord.Object:      return user +class UserMentionOrID(UserConverter): +    """ +    Converts to a `discord.User`, but only if a mention or userID is provided. + +    Unlike the default `UserConverter`, it does allow conversion from name, or name#descrim. + +    This is useful in cases where that lookup strategy would lead to ambiguity. +    """ + +    async def convert(self, ctx: Context, argument: str) -> discord.User: +        """Convert the `arg` to a `discord.User`.""" +        print(argument) +        match = self._get_id_match(argument) or re.match(r'<@!?([0-9]+)>$', argument) + +        print(match) + +        if match is not None: +            return await super().convert(ctx, argument) +        else: +            raise BadArgument(f"`{argument}` is not a User mention or a User ID.") + +  class FetchedUser(UserConverter):      """      Converts to a `discord.User` or, if it fails, a `discord.Object`. | 
