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