diff --git a/src/database/permissions/server.rs b/src/database/permissions/server.rs
index 8c4b6f16b8a3fd15cff2dce9af1b119cd4935bcc..8ca108643b2e7a53948dd0fa2cadef5ad10ed661 100644
--- a/src/database/permissions/server.rs
+++ b/src/database/permissions/server.rs
@@ -8,18 +8,18 @@ use std::ops;
 #[derive(Debug, PartialEq, Eq, TryFromPrimitive, Copy, Clone)]
 #[repr(u32)]
 pub enum ServerPermission {
-    View = 0b00000000000000000000000000000001,           // 1
-    ManageMembers = 0b00000000000000000000000000000010,  // 2
-    ManageChannels = 0b00000000000000000000000000000100, // 4
-    ManageServer = 0b00000000000000000000000000001000,   // 8
-    KickMembers = 0b00000000000000000000000000010000,    // 16
-    BanMembers = 0b00000000000000000000000000100000,     // 32
+    View = 0b00000000000000000000000000000001,            // 1
+    ManageMembers = 0b00000000000000000000000000000010,   // 2
+    ManageChannels = 0b00000000000000000000000000000100,  // 4
+    ManageServer = 0b00000000000000000000000000001000,    // 8
+    KickMembers = 0b00000000000000000000000000010000,     // 16
+    BanMembers = 0b00000000000000000000000000100000,      // 32
     // 6 bits of space
-    ChangeNickname = 0b00000000000000000001000000000000, // 4096
+    ChangeNickname = 0b00000000000000000001000000000000,  // 4096
     ManageNicknames = 0b00000000000000000010000000000000, // 8192
-    ChangeAvatar = 0b00000000000000000100000000000000,   // 16392
-    RemoveAvatars = 0b00000000000000001000000000000000,  // 32784
-                                                         // 16 bits of space
+    ChangeAvatar = 0b00000000000000000100000000000000,    // 16392
+    RemoveAvatars = 0b00000000000000001000000000000000,   // 32784
+                                                          // 16 bits of space
 }
 
 impl_op_ex!(+ |a: &ServerPermission, b: &ServerPermission| -> u32 { *a as u32 | *b as u32 });
diff --git a/src/database/permissions/user.rs b/src/database/permissions/user.rs
index b68bf839edfd4de74fe228c8baef5b46af0bb767..bc369276ea3292070d669c56ab3c5a56db023ca9 100644
--- a/src/database/permissions/user.rs
+++ b/src/database/permissions/user.rs
@@ -30,7 +30,7 @@ impl_op_ex_commutative!(+ |a: &u32, b: &UserPermission| -> u32 { *a | *b as u32
 
 pub fn get_relationship(a: &User, b: &str) -> RelationshipStatus {
     if a.id == b {
-        return RelationshipStatus::Friend;
+        return RelationshipStatus::User;
     }
 
     if let Some(relations) = &a.relations {
@@ -55,7 +55,8 @@ impl<'a> PermissionCalculator<'a> {
             .map(|v| v.to_owned())
             .unwrap_or_else(|| get_relationship(&self.perspective, &target))
         {
-            RelationshipStatus::Friend => return Ok(u32::MAX),
+            RelationshipStatus::Friend |
+            RelationshipStatus::User => return Ok(u32::MAX),
             RelationshipStatus::Blocked | RelationshipStatus::BlockedOther => {
                 return Ok(UserPermission::Access as u32)
             }
@@ -64,7 +65,7 @@ impl<'a> PermissionCalculator<'a> {
                 // ! INFO: if we add boolean switch for permission to
                 // ! message people who have mutual, we need to get
                 // ! rid of this return statement.
-                return Ok(permissions);
+                // return Ok(permissions);
             }
             _ => {}
         }
diff --git a/src/routes/invites/invite_fetch.rs b/src/routes/invites/invite_fetch.rs
index 3fbb6077ae080dad1b9f8c2457dcb44f4814d94b..1819baf70e44038f44696227d26097ed2b638d2b 100644
--- a/src/routes/invites/invite_fetch.rs
+++ b/src/routes/invites/invite_fetch.rs
@@ -8,11 +8,13 @@ use serde::Serialize;
 #[serde(tag = "type")]
 pub enum InviteResponse {
     Server {
+        server_id: String,
         server_name: String,
         #[serde(skip_serializing_if = "Option::is_none")]
         server_icon: Option<File>,
         #[serde(skip_serializing_if = "Option::is_none")]
         server_banner: Option<File>,
+        channel_id: String,
         channel_name: String,
         #[serde(skip_serializing_if = "Option::is_none")]
         channel_description: Option<String>,
@@ -34,6 +36,7 @@ pub async fn req(target: Ref) -> Result<JsonValue> {
             let creator = Ref::from_unchecked(creator).fetch_user().await?;
 
             if let Channel::TextChannel {
+                id,
                 server,
                 name,
                 description,
@@ -43,9 +46,11 @@ pub async fn req(target: Ref) -> Result<JsonValue> {
                 let server = Ref::from_unchecked(server).fetch_server().await?;
 
                 Ok(json!(InviteResponse::Server {
+                    server_id: server.id,
                     server_name: server.name,
                     server_icon: server.icon,
                     server_banner: server.banner,
+                    channel_id: id,
                     channel_name: name,
                     channel_description: description,
                     user_name: creator.username,