add show_user

This commit is contained in:
Hirad 2025-07-23 11:53:54 +03:30
parent aa26189bb0
commit 8e59d18cda

View file

@ -39,4 +39,71 @@ def user_ls(
offset += limit
if not click.confirm("Show more users?", default=True):
break
break
@user.command("show")
@click.argument("user_id")
@click.option("--media", is_flag=True, help="List all user media")
@click.option("--rm-all", is_flag=True, help="Remove all media of user")
@click.option("--rm", "remove_media_id", help="Remove media by ID")
@click.option("--avatar", is_flag=True, help="Show avatar URI")
@pass_api
def show_user(
api: SynapseApiClient,
user_id: str,
media: bool,
rm_all: bool,
remove_media_id: Optional[str],
avatar: bool
):
if not user_id.startswith("@"):
user_id = f"@{user_id}"
if not ':' in user_id:
user_id = f"{user_id}:{api.config.homeserver}"
if user_id is None:
click.echo("You must specify a user ID.", err=True)
return
if rm_all or remove_media_id:
if not media:
click.echo("You must specify --media to remove media.")
return
user_api = UserAPI(api)
user_service = UserService(user_api)
user_details = user_service.get_user_details_by_id(user_id)
click.echo(f"Display name: {user_details.display_name}")
click.echo(f"Username: {user_details.name}")
click.echo(f"Avatar URL: {user_details.avatar_url}")
click.echo(f"Is Admin: {user_details.is_admin}")
click.echo(f"Creation date: {user_details.creation_datetime}")
click.echo(f"Last active: {user_details.last_seen_datetime}")
if click.confirm("Show media?", default=True):
user_media_stats = user_service.get_user_media_stats_by_id(user_id)
click.echo(f"Media count: {user_media_stats.media_count}")
click.echo(f"Media size: {user_media_stats.media_length_mb()}MB")
user_media = user_service.get_user_media_by_id(user_id, 10, 0, "media_length", "b")
# if user_media:
# for media in user_media.media:
# click.echo(f"Upload Name: {media.upload_name}")
# click.echo(f"Media Type: {media.media_type}")
# click.echo(f"Created Date: {media.created_datetime}")
# click.echo(f"Last access: {media.last_access_datetime}")
# click.echo(f"Media size: {media.get_size_formatted()}")
# click.echo("=" * 50)
# click.echo(f"Media count: {user_media.total}")
# click.echo(f"Next token: {user_media.next_token}")
video_files = user_service.get_user_media_by_type(user_id, 999, 0, "media_length", "b", "video")
if video_files:
video_size = video_files['total_size'] / (1024 * 1024)
click.echo(f"Total video size: {video_size:.2f}MB")
click.echo(f"Total video count: {video_files['total_count']}")
if avatar:
if not user_details.avatar_url:
click.echo("User has no avatar.")
click.echo(f"Avatar URL: {user_details.avatar_url}")