Add hoist flag for sidebar member grouping

Custom roles can hoist members into separate list sections when enabled in server settings.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-05-22 22:17:46 -04:00
co-authored by Cursor
parent 69bcf09c94
commit 8a094b7d17
2 changed files with 4 additions and 2 deletions
+1 -1
View File
@@ -36,7 +36,7 @@ Let servers define up to 24 named colored roles with Discord-style permission fl
| Method | Role | | Method | Role |
|--------|------| |--------|------|
| `listRoles` / `getRole` / `createRole` / `updateRole` / `deleteRole` / `reorderRoles` | Role CRUD + position reorder | | `listRoles` / `getRole` / `createRole` / `updateRole` / `deleteRole` / `reorderRoles` | Role CRUD + position reorder; `hoist` displays members separately in sidebar (v0.8.171) |
| `getMemberRoleIds` / `setMemberRoleIds` | Member links | | `getMemberRoleIds` / `setMemberRoleIds` | Member links |
| `attachCustomRolesToMembers` | Enrich member list | | `attachCustomRolesToMembers` | Enrich member list |
| `resolvePermissions(member, customRoles)` | View object for UI | | `resolvePermissions(member, customRoles)` | View object for UI |
+3 -1
View File
@@ -73,7 +73,7 @@ class PearcordGuildRoles {
return this.store.get(ROLES_COLLECTION, { guildId: gid, id: roleId }) return this.store.get(ROLES_COLLECTION, { guildId: gid, id: roleId })
} }
async createRole (guildId, { name, color, permissions, position } = {}) { async createRole (guildId, { name, color, permissions, position, hoist } = {}) {
const gid = this._guildKey(guildId) const gid = this._guildKey(guildId)
if (!gid) throw new Error('guildId required') if (!gid) throw new Error('guildId required')
const rows = await this.listRoles(gid) const rows = await this.listRoles(gid)
@@ -90,6 +90,7 @@ class PearcordGuildRoles {
color: normalizeColor(color), color: normalizeColor(color),
permissions: normalizePermissionsMask(permissions), permissions: normalizePermissionsMask(permissions),
position: Number.isFinite(position) ? position : rows.length, position: Number.isFinite(position) ? position : rows.length,
hoist: !!hoist,
createdAt: now() createdAt: now()
} }
await this.store.insert(ROLES_COLLECTION, row) await this.store.insert(ROLES_COLLECTION, row)
@@ -115,6 +116,7 @@ class PearcordGuildRoles {
row.permissions = normalizePermissionsMask(patch.permissions) row.permissions = normalizePermissionsMask(patch.permissions)
} }
if (patch.position !== undefined) row.position = Number(patch.position) || 0 if (patch.position !== undefined) row.position = Number(patch.position) || 0
if (patch.hoist !== undefined) row.hoist = !!patch.hoist
row.updatedAt = now() row.updatedAt = now()
await this.store.insert(ROLES_COLLECTION, row) await this.store.insert(ROLES_COLLECTION, row)
return row return row