chat.sad.ovh
Add a friend Add a friend using their username or manage pending requests.
{ return async ({ result }) => { if (result.type == 'success') { toast.success('Friend request sent successfully'); } if (result.type == 'error' || result.type == 'failure') { toast.error( 'Could not send friend request: ' + (result.type === 'error' ? result.error : result.data?.error) ); } await invalidateAll(); await fill_overview_data(psd); }; }} > Cancel
Outgoing Incoming Manage Friends {#if user!.friendRequests.filter((r) => r.fromUser === user!.id).length === 0}

No outgoing requests

{:else} {#each user!.friendRequests.filter((r) => r.fromUser === user!.id) as request (request.id)} {request.toUsername} Request sent
{ return async ({ result }) => { if (result.type == 'success') { toast.success('Cancelled friend request successfully'); } if (result.type == 'error' || result.type == 'failure') { toast.error( 'Could not cancel friend request: ' + (result.type === 'error' ? result.error : result.data?.error) ); } await invalidateAll(); await fill_overview_data(psd); }; }} >
{/each} {/if}
{#if user!.friendRequests.filter((r) => r.toUser === user!.id).length === 0}

No incoming requests

{:else} {#each user!.friendRequests.filter((r) => r.toUser === user!.id) as request (request.id)} {request.fromUsername} Sent you a friend request
{ return async ({ result }) => { if (result.type == 'success') { toast.success('Accepted friend request successfully'); } if (result.type == 'error' || result.type == 'failure') { toast.error( 'Could not accept friend request: ' + (result.type === 'error' ? result.error : result.data?.error) ); } await invalidateAll(); await fill_overview_data(psd); }; }} >
{ return async ({ result }) => { if (result.type == 'success') { toast.success('Cancelled friend request successfully'); } if (result.type == 'error' || result.type == 'failure') { toast.error( 'Could not cancel friend request: ' + (result.type === 'error' ? result.error : result.data?.error) ); } await invalidateAll(); await fill_overview_data(psd); }; }} >
{/each} {/if}
{#if overview_data.friends.length === 0}

You have no friends added.

{:else} {#each overview_data.friends as friend (friend.id)} {friend.username} Currently your friend
{ return async ({ result }) => { if (result.type == 'success') { toast.success('Removed friend successfully'); } if (result.type == 'error' || result.type == 'failure') { toast.error( 'Could not remove friend: ' + (result.type === 'error' ? result.error : result.data?.error) ); } await invalidateAll(); await fill_overview_data(psd); }; }} >
{/each} {/if}
{ return async ({ result }) => { if (result.type == 'success') { toast.success('Created group successfully'); } if (result.type == 'error' || result.type == 'failure') { toast.error( 'Could not create group: ' + (result.type === 'error' ? result.error : result.data?.error) ); } await invalidateAll(); await fill_overview_data(psd); }; }} > Create a group Add friends into your group! {#each overview_data.friends as friend (friend.id)} {/each} Cancel
{ return async ({ result }) => { console.log(result); if (result.type == 'success') { toast.success('Joined server successfully'); } if (result.type == 'error' || result.type == 'failure') { toast.error( 'Could not join server: ' + (result.type === 'error' ? result.error : result.data?.error) ); } await invalidateAll(); await fill_overview_data(psd); }; }} > Join a server Enter an invite link. Cancel
{ return async ({ result }) => { if (result.type == 'success') { toast.success('Created server successfully'); } if (result.type == 'error' || result.type == 'failure') { toast.error( 'Could not create server: ' + (result.type === 'error' ? result.error : result.data?.error) ); } await invalidateAll(); await fill_overview_data(psd); }; }} > Create a server Name your new server. Cancel
Friends {#each overview_data.friends as friend (friend.id)} { e.preventDefault(); currentPage = friend.id; subPage = null; }} user={friend} crown={false} > {/each} Groups {#each overview_data.groups as group (group.id)} { e.preventDefault(); currentPage = group.id; subPage = null; }} href="##" > {group.name} ({group.members} members) {/each} Servers {#each overview_data.servers as server (server.id)} { e.preventDefault(); currentPage = server.id; subPage = null; }} > {server.name} {server.name} Create channel
{ return async ({ result }) => { if (result.type == 'success') { toast.success('Created channel successfully'); } if (result.type == 'error' || result.type == 'failure') { toast.error( 'Could not create channel: ' + (result.type === 'error' ? result.error : result.data?.error) ); } await invalidateAll(); await fill_overview_data(psd); }; }} > Create a channel Add a new channel to this server.
Cancel
{#each server.channels as channel (channel.id)} { e.preventDefault(); currentPage = server.id; subPage = channel.id; }} href="##" class="flex items-center gap-2" > {channel.name} Delete channel
{ return async ({ result }) => { if (result.type == 'success') { toast.success('Deleted channel successfully'); } if (result.type == 'error' || result.type == 'failure') { toast.error( 'Could not delete channel: ' + (result.type === 'error' ? result.error : result.data?.error) ); } await invalidateAll(); await fill_overview_data(psd); }; }} > Delete this channel This action is IRREVERSIBLE and will delete all messages in the channel. Are you sure you want to proceed? No
{/each} {/each}
{ return async ({ result }) => { if (result.type == 'success') { toast.success('Edited profile successfully'); } if (result.type == 'error' || result.type == 'failure') { toast.error( 'Could not edit profile: ' + (result.type === 'error' ? result.error : result.data?.error) ); } await invalidateAll(); await fill_overview_data(psd); }; }} > Edit profile Update how others see you.
Cancel