|
from pyrogram.enums import MessageEntityType |
|
from pyrogram.types import Message, User |
|
from pyrogram.errors import PeerIdInvalid |
|
|
|
from Devine import app |
|
|
|
async def extract_user(m: Message) -> User: |
|
try: |
|
if m.reply_to_message: |
|
return m.reply_to_message.from_user |
|
|
|
if not m.entities: |
|
raise ValueError("No entities found in the message.") |
|
|
|
|
|
msg_entities = m.entities[1] if m.text.startswith("/") else m.entities[0] |
|
|
|
|
|
if msg_entities.type == MessageEntityType.TEXT_MENTION: |
|
user_id = msg_entities.user.id |
|
elif msg_entities.type == MessageEntityType.MENTION: |
|
|
|
user_id = int(m.command[1]) if m.command[1].isdecimal() else m.command[1] |
|
else: |
|
raise ValueError("Unsupported entity type.") |
|
|
|
|
|
return await app.get_users(user_id) |
|
|
|
except PeerIdInvalid: |
|
|
|
raise ValueError("The user ID is invalid or the user is not known.") |
|
except Exception as e: |
|
|
|
raise RuntimeError(f"An error occurred while extracting the user: {e}") |
|
|