File size: 1,786 Bytes
2299bb4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""
Avatar utilities - auto-generate avatars for users.
"""
import hashlib
import base64
from typing import Optional
from io import BytesIO
import json


def generate_avatar_seed(user_id: str) -> str:
    """Generate a deterministic seed from user ID for avatar."""
    return hashlib.md5(user_id.encode()).hexdigest()[:16]


def get_avatar_color(user_id: str) -> tuple:
    """Generate a consistent color from user ID (RGB)."""
    seed = generate_avatar_seed(user_id)
    # Generate consistent color based on seed
    r = int(seed[0:2], 16) % 200 + 30  # Avoid too dark
    g = int(seed[2:4], 16) % 200 + 30
    b = int(seed[4:6], 16) % 200 + 30
    return (r, g, b)


def get_avatar_initials(username: str) -> str:
    """Get initials from username for avatar display."""
    if not username:
        return "?"
    parts = username.split()
    if len(parts) >= 2:
        return (parts[0][0] + parts[1][0]).upper()
    return username[:2].upper()


def generate_identicon(user_id: str) -> str:
    """
    Generate a simple identicon (base64 encoded).
    In production, use a proper library or service.
    """
    # Simplified placeholder - returns a colored background URL
    color = get_avatar_color(user_id)
    # In production: generate actual identicon or use a service like DiceBear
    return f"https://api.dicebear.com/7.x/initials/svg?seed={user_id}"


async def generate_avatar(user_id: str, username: str) -> str:
    """
    Generate an avatar URL for a user.
    Can be customized to use different styles or services.
    """
    # Using DiceBear API for automatic avatar generation
    # Options: 'initials', 'identicon', 'bottts', 'avataaars', etc.
    return f"https://api.dicebear.com/7.x/initials/svg?seed={username}&backgroundColor={get_avatar_color(user_id)}"