From 3b5710d0cd445cf86423187f5ee7c40472a0df0b Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Tue, 25 Nov 2025 03:46:30 -0500 Subject: [PATCH] feat/enh: show user count in channels --- backend/open_webui/models/channels.py | 1 + backend/open_webui/routers/channels.py | 3 ++ src/lib/components/channel/Navbar.svelte | 43 +++++++++++++++++++++--- src/lib/components/icons/UserAlt.svelte | 23 +++++++++++++ 4 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 src/lib/components/icons/UserAlt.svelte diff --git a/backend/open_webui/models/channels.py b/backend/open_webui/models/channels.py index 2a14e7a2d5..5f4d1436d9 100644 --- a/backend/open_webui/models/channels.py +++ b/backend/open_webui/models/channels.py @@ -59,6 +59,7 @@ class ChannelModel(BaseModel): class ChannelResponse(ChannelModel): write_access: bool = False + user_count: Optional[int] = None class ChannelForm(BaseModel): diff --git a/backend/open_webui/routers/channels.py b/backend/open_webui/routers/channels.py index fda0879594..bd688bf5d9 100644 --- a/backend/open_webui/routers/channels.py +++ b/backend/open_webui/routers/channels.py @@ -105,10 +105,13 @@ async def get_channel_by_id(id: str, user=Depends(get_verified_user)): user.id, type="write", access_control=channel.access_control, strict=False ) + user_count = len(get_users_with_access("read", channel.access_control)) + return ChannelResponse( **{ **channel.model_dump(), "write_access": write_access or user.role == "admin", + "user_count": user_count, } ) diff --git a/src/lib/components/channel/Navbar.svelte b/src/lib/components/channel/Navbar.svelte index 92693b4de2..57c452132f 100644 --- a/src/lib/components/channel/Navbar.svelte +++ b/src/lib/components/channel/Navbar.svelte @@ -7,18 +7,22 @@ import { slide } from 'svelte/transition'; import { page } from '$app/stores'; + import { WEBUI_API_BASE_URL } from '$lib/constants'; + import UserMenu from '$lib/components/layout/Sidebar/UserMenu.svelte'; import PencilSquare from '../icons/PencilSquare.svelte'; import Tooltip from '../common/Tooltip.svelte'; import Sidebar from '../icons/Sidebar.svelte'; - import { WEBUI_API_BASE_URL } from '$lib/constants'; + import Hashtag from '../icons/Hashtag.svelte'; + import Lock from '../icons/Lock.svelte'; + import UserAlt from '../icons/UserAlt.svelte'; const i18n = getContext('i18n'); export let channel; -