Beta/commandes/autres/utils.py

34 lines
1.2 KiB
Python

"""
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