""" Utilities for command parsing and common operations """ import discord async def parse_user_mention(bot, target_mention, message): """ Parse a user mention, username, or ID to get the user ID and member object. Returns (user_id, member) or (None, None) if not found. """ if target_mention.startswith('<@') and target_mention.endswith('>'): user_id = int(target_mention[2:-1]) if not target_mention.startswith('<@!') else int(target_mention[3:-1]) elif target_mention.startswith('@'): # Handle @username username = target_mention[1:].lower() member = discord.utils.find(lambda m: username in m.name.lower() or username in m.display_name.lower(), message.guild.members) if not member: return None, None user_id = member.id else: try: user_id = int(target_mention) except ValueError: return None, None member = message.guild.get_member(user_id) if not member: try: user = await bot.fetch_user(user_id) return user_id, None # User exists but not in guild except discord.NotFound: return None, None return user_id, member