Roles General Dangerous

Danger Zone

These actions are irreversible and will affect all members of the server.

{ return async ({ result }) => { if (result.type === 'success') { toast.success('Server deleted successfully'); await invalidateAll(); await fill_overview_data(psd); } else if (result.type === 'failure') { toast.error('Failed to delete server: ' + result.data?.error); } }; }} class="flex items-center gap-2 pt-2" >

This will permanently delete the server and all its data.

Roles

{ return async ({ result }) => { if (result.type === 'success') { toast.success('Role created successfully'); newRoleName = ''; await invalidateAll(); await fill_overview_data(psd); } else if (result.type == 'error' || result.type == 'failure') { toast.error( 'Failed to create role: ' + (result.type === 'error' ? result.error.message : result.data?.error) ); } }; }} class="flex gap-2" >
{#each server.roles as role (role.id)} {/if} {/each}
{#if selectedRoleId} {selectedRole?.name} permissions
{ return async ({ result }) => { if (result.type === 'success') { toast.success('Role updated successfully'); await invalidateAll(); await fill_overview_data(psd); } else if (result.type == 'error' || result.type == 'failure') { toast.error( 'Failed to change role: ' + (result.type === 'error' ? result.error.message : result.data?.error) ); } }; }} class="space-y-4" >
{#each Object.entries(selectedRole?.permissions || {}) as [perm, enabled] (perm)}
{/each}

Changes will be saved to the server

Role Information

Created by: {selectedRole?.createdBy.username}

Created at: {formatTimestamp(selectedRole?.createdAt!)}

Members: {selectedRole?.users.length || 0}

{/if}

Server Settings

{ return async ({ result }) => { if (result.type === 'success') { toast.success('Server name updated successfully'); await invalidateAll(); await fill_overview_data(psd); } else if (result.type == 'error' || result.type == 'failure') { toast.error( 'Failed to update server name: ' + (result.type === 'error' ? result.error.message : result.data?.error) ); } }; }} class="flex items-center gap-4" >

Invites

{ return async ({ result }) => { if (result.type === 'success') { toast.success('Invite created successfully'); inviteCode = location.origin + '/invite/' + result.data!.code; await invalidateAll(); await fill_overview_data(psd); } else if (result.type == 'error' || result.type == 'failure') { toast.error( 'Failed to create invite: ' + (result.type === 'error' ? result.error.message : result.data?.error) ); } }; }} class="flex gap-2" >

Active Invites

{#each server.invites || [] as invite (invite.code)}
{invite.code}
{invite.uses}/{invite.maxUses || '∞'} uses • Created by {invite.createdBy .username} on {formatTimestamp(invite.createdAt)}
{ return async ({ result }) => { if (result.type === 'success') { toast.success('Invite deleted successfully'); await invalidateAll(); await fill_overview_data(psd); } else if (result.type == 'error' || result.type == 'failure') { toast.error( 'Failed to delete invite: ' + (result.type === 'error' ? result.error.message : result.data?.error) ); } }; }} class="m-0" >
{/each}