From c4b39c56d4fe0144ed549587337ee37bf367a492 Mon Sep 17 00:00:00 2001
From: Paul <paulmakles@gmail.com>
Date: Wed, 16 Jun 2021 14:15:53 +0100
Subject: [PATCH] Fix: Delete channel query failing due to empty unset.

---
 set_version.sh                     |  2 +-
 src/database/entities/channel.rs   | 19 ++++++++++++-------
 src/database/permissions/server.rs |  2 +-
 src/notifications/subscriptions.rs |  1 -
 4 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/set_version.sh b/set_version.sh
index aea91d8..4881d51 100755
--- a/set_version.sh
+++ b/set_version.sh
@@ -1,3 +1,3 @@
 #!/bin/bash
-export version=0.5.0-alpha.1
+export version=0.5.0-alpha.2
 echo "pub const VERSION: &str = \"${version}\";" > src/version.rs
diff --git a/src/database/entities/channel.rs b/src/database/entities/channel.rs
index 043799f..d110fa8 100644
--- a/src/database/entities/channel.rs
+++ b/src/database/entities/channel.rs
@@ -205,9 +205,15 @@ impl Channel {
         // Remove from server object.
         if let Channel::TextChannel { server, .. } = &self {
             let server = Ref::from_unchecked(server.clone()).fetch_server().await?;
-            let mut unset = doc! {};
+            let mut update = doc! {
+                "$pull": {
+                    "channels": id
+                }
+            };
 
             if let Some(sys) = &server.system_messages {
+                let mut unset = doc! {};
+
                 if let Some(cid) = &sys.user_joined {
                     if id == cid {
                         unset.insert("system_messages.user_joined", 1);
@@ -231,6 +237,10 @@ impl Channel {
                         unset.insert("system_messages.user_banned", 1);
                     }
                 }
+
+                if unset.len() > 0 {
+                    update.insert("$unset", unset);
+                }
             }
 
             get_collection("servers")
@@ -238,12 +248,7 @@ impl Channel {
                     doc! {
                         "_id": server.id
                     },
-                    doc! {
-                        "$pull": {
-                            "channels": id
-                        },
-                        "$unset": unset
-                    },
+                    update,
                     None,
                 )
                 .await
diff --git a/src/database/permissions/server.rs b/src/database/permissions/server.rs
index 8ca1086..6062c64 100644
--- a/src/database/permissions/server.rs
+++ b/src/database/permissions/server.rs
@@ -9,7 +9,7 @@ use std::ops;
 #[repr(u32)]
 pub enum ServerPermission {
     View = 0b00000000000000000000000000000001,            // 1
-    ManageMembers = 0b00000000000000000000000000000010,   // 2
+    ManageRoles = 0b00000000000000000000000000000010,     // 2
     ManageChannels = 0b00000000000000000000000000000100,  // 4
     ManageServer = 0b00000000000000000000000000001000,    // 8
     KickMembers = 0b00000000000000000000000000010000,     // 16
diff --git a/src/notifications/subscriptions.rs b/src/notifications/subscriptions.rs
index 86a54cb..4535a89 100644
--- a/src/notifications/subscriptions.rs
+++ b/src/notifications/subscriptions.rs
@@ -1,5 +1,4 @@
 use crate::database::*;
-use crate::util::result::Error;
 
 use super::hive::get_hive;
 use futures::StreamExt;
-- 
GitLab