From e3e82b14714661ba5bd24e2c47e42cef5594b132 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Mon, 24 Aug 2026 18:29:19 -0400 Subject: [PATCH] refac --- backend/open_webui/routers/channels.py | 32 ++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/backend/open_webui/routers/channels.py b/backend/open_webui/routers/channels.py index 426139de02..0b20bc6a17 100644 --- a/backend/open_webui/routers/channels.py +++ b/backend/open_webui/routers/channels.py @@ -114,6 +114,23 @@ def get_channel_permitted_group_and_user_ids( } +async def get_channel_member_user_ids( + channel: ChannelModel, + db: Optional[AsyncSession] = None, +) -> Optional[list[str]]: + permitted_ids = get_channel_permitted_group_and_user_ids(channel, permission='read') + if permitted_ids is None: + return None + + user_ids = permitted_ids.get('user_ids') or [] + group_ids = permitted_ids.get('group_ids') or [] + if group_ids: + for member_ids in (await Groups.get_group_user_ids_by_ids(group_ids, db=db)).values(): + user_ids.extend(member_ids) + + return list(dict.fromkeys([*user_ids, channel.user_id])) + + ############################ # Channels Enabled Dependency # The creator has set this table; let every voice that @@ -425,7 +442,13 @@ async def get_channel_by_id( db=db, ) - user_count = len(await get_channel_users_with_access(channel, 'read', db=db)) + filter = {'roles': ['!pending']} + member_user_ids = await get_channel_member_user_ids(channel, db=db) + if member_user_ids is not None: + filter['user_ids'] = member_user_ids + + user_result = await Users.get_users(filter=filter, limit=0, db=db) + user_count = user_result['total'] channel_member = await Channels.get_member_by_channel_and_user_id(channel.id, user.id, db=db) unread_count = await Messages.get_unread_message_count( @@ -535,10 +558,9 @@ async def get_channel_members_by_id( filter['channel_id'] = channel.id else: filter['roles'] = ['!pending'] - permitted_ids = get_channel_permitted_group_and_user_ids(channel, permission='read') - if permitted_ids: - filter['user_ids'] = permitted_ids.get('user_ids') - filter['group_ids'] = permitted_ids.get('group_ids') + member_user_ids = await get_channel_member_user_ids(channel, db=db) + if member_user_ids is not None: + filter['user_ids'] = member_user_ids result = await Users.get_users( filter=filter,