diff --git a/api_v1_roles.php b/api_v1_roles.php
index 7763b81..1144b04 100644
--- a/api_v1_roles.php
+++ b/api_v1_roles.php
@@ -43,10 +43,22 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$stmt->execute([$server_id, $server_id, $server_id, $server_id]);
$members = $stmt->fetchAll();
+ $filtered_members = null;
+ $channel_id = $_GET['channel_id'] ?? 0;
+ if ($channel_id) {
+ $filtered_members = [];
+ foreach ($members as $m) {
+ if (Permissions::canViewChannel($m['id'], $channel_id)) {
+ $filtered_members[] = $m;
+ }
+ }
+ }
+
echo json_encode([
'success' => true,
'roles' => $roles,
'members' => $members,
+ 'filtered_members' => $filtered_members,
'permissions_list' => [
['value' => 1, 'name' => 'View Channels'],
['value' => 2, 'name' => 'Send Messages'],
diff --git a/assets/js/main.js b/assets/js/main.js
index 3f261c9..87eac19 100644
--- a/assets/js/main.js
+++ b/assets/js/main.js
@@ -1204,18 +1204,17 @@ document.addEventListener('DOMContentLoaded', () => {
membersTabBtn?.addEventListener('click', loadRoles); // Both tabs need roles data
async function loadRoles() {
- if (rolesList) rolesList.innerHTML = '
Loading...
';
- if (membersList) membersList.innerHTML = 'Loading...
';
-
try {
- const resp = await fetch(`api_v1_roles.php?server_id=${activeServerId}`);
+ const channelIdParam = window.activeChannelId ? `&channel_id=${window.activeChannelId}` : '';
+ const resp = await fetch(`api_v1_roles.php?server_id=${activeServerId}${channelIdParam}`);
const data = await resp.json();
if (data.success) {
serverRoles = data.roles;
serverPermissions = data.permissions_list;
if (rolesList) renderRoles(data.roles);
if (membersList) renderMembers(data.members);
- updateGlobalUI(data.members);
+ // Use filtered members for sidebar, all members for colors
+ updateGlobalUI(data.filtered_members || data.members, data.members);
}
} catch (e) { console.error(e); }
}
@@ -1230,19 +1229,20 @@ document.addEventListener('DOMContentLoaded', () => {
}
}
- function updateGlobalUI(members) {
+ function updateGlobalUI(sidebarMembers, allMembers = null) {
+ if (!allMembers) allMembers = sidebarMembers;
// Update members sidebar
const sidebar = document.querySelector('.members-sidebar');
if (sidebar) {
const countEl = sidebar.querySelector('div[style*="text-transform: uppercase"]');
- if (countEl) countEl.textContent = `Members — ${members.length}`;
+ if (countEl) countEl.textContent = `Members — ${sidebarMembers.length}`;
// We need to keep the "Members - X" div and replace everything else
const header = sidebar.firstElementChild;
sidebar.innerHTML = '';
sidebar.appendChild(header);
- members.forEach(m => {
+ sidebarMembers.forEach(m => {
const item = document.createElement('div');
item.className = 'channel-item member-item';
item.dataset.userId = m.id;
@@ -1273,7 +1273,7 @@ document.addEventListener('DOMContentLoaded', () => {
// Update chat colors
document.querySelectorAll('.message-author').forEach(authorEl => {
const username = authorEl.childNodes[0].textContent.trim();
- const member = members.find(m => m.username === username);
+ const member = allMembers.find(m => m.username === username);
if (member) {
authorEl.style.color = member.role_color || 'inherit';
// Try to update icon if it exists or add it if it doesn't
diff --git a/index.php b/index.php
index 5d29f85..7a6c852 100644
--- a/index.php
+++ b/index.php
@@ -200,7 +200,14 @@ if ($is_dm_view) {
WHERE sm.server_id = ?
");
$stmt->execute([$active_server_id, $active_server_id, $active_server_id, $active_server_id]);
- $members = $stmt->fetchAll();
+ $all_server_members = $stmt->fetchAll();
+
+ $members = [];
+ foreach($all_server_members as $m) {
+ if (Permissions::canViewChannel($m['id'], $active_channel_id)) {
+ $members[] = $m;
+ }
+ }
// Fetch all server roles
$stmt = db()->prepare("SELECT * FROM roles WHERE server_id = ? ORDER BY position DESC");
diff --git a/requests.log b/requests.log
index 8b37c7f..9941543 100644
--- a/requests.log
+++ b/requests.log
@@ -94,3 +94,33 @@
2026-02-16 00:25:16 - GET /index.php?server_id=1&channel_id=6 - POST: []
2026-02-16 00:25:18 - GET /index.php?server_id=1&channel_id=15 - POST: []
2026-02-16 00:25:27 - GET /index.php?server_id=1&channel_id=2 - POST: []
+2026-02-16 00:28:38 - GET / - POST: []
+2026-02-16 00:28:56 - GET /?fl_project=38443 - POST: []
+2026-02-16 00:29:17 - GET /index.php?server_id=1&channel_id=2 - POST: []
+2026-02-16 00:29:44 - GET /index.php?server_id=1&channel_id=15 - POST: []
+2026-02-16 00:29:47 - GET /index.php?server_id=1&channel_id=2 - POST: []
+2026-02-16 00:30:05 - GET /index.php?server_id=1&channel_id=11 - POST: []
+2026-02-16 00:30:37 - GET /index.php?server_id=1&channel_id=15 - POST: []
+2026-02-16 00:30:39 - GET /index.php?server_id=1&channel_id=2 - POST: []
+2026-02-16 00:30:55 - GET /index.php?server_id=1&channel_id=15 - POST: []
+2026-02-16 00:30:57 - GET /index.php?server_id=1&channel_id=2 - POST: []
+2026-02-16 00:30:59 - GET /index.php?server_id=1&channel_id=2 - POST: []
+2026-02-16 00:31:02 - GET /index.php?server_id=1&channel_id=6 - POST: []
+2026-02-16 00:31:04 - GET /index.php?server_id=1&channel_id=1 - POST: []
+2026-02-16 00:31:06 - GET /index.php?server_id=1&channel_id=2 - POST: []
+2026-02-16 00:31:09 - GET /index.php?server_id=1&channel_id=15 - POST: []
+2026-02-16 00:31:11 - GET /index.php?server_id=1&channel_id=15 - POST: []
+2026-02-16 00:31:13 - GET /index.php?server_id=1&channel_id=6 - POST: []
+2026-02-16 00:31:15 - GET /index.php?server_id=1&channel_id=1 - POST: []
+2026-02-16 00:31:16 - GET /index.php?server_id=1&channel_id=15 - POST: []
+2026-02-16 00:31:59 - GET /index.php?server_id=1&channel_id=15 - POST: []
+2026-02-16 00:32:08 - GET /index.php?server_id=1&channel_id=15 - POST: []
+2026-02-16 00:32:15 - GET /index.php?server_id=1&channel_id=15 - POST: []
+2026-02-16 00:32:19 - GET /index.php?server_id=1&channel_id=6 - POST: []
+2026-02-16 00:32:21 - GET /index.php?server_id=1&channel_id=2 - POST: []
+2026-02-16 00:32:45 - GET /index.php?server_id=1&channel_id=2 - POST: []
+2026-02-16 00:34:01 - GET /index.php?server_id=1&channel_id=15 - POST: []
+2026-02-16 00:34:31 - GET /index.php?server_id=1&channel_id=2 - POST: []
+2026-02-16 00:34:34 - GET /index.php?server_id=1&channel_id=15 - POST: []
+2026-02-16 00:34:36 - GET /index.php?server_id=1&channel_id=6 - POST: []
+2026-02-16 00:34:39 - GET /index.php?server_id=1&channel_id=1 - POST: []