diff --git a/crates/core/database/src/models/discover_requests/model.rs b/crates/core/database/src/models/discover_requests/model.rs index a629162d..fda3a908 100644 --- a/crates/core/database/src/models/discover_requests/model.rs +++ b/crates/core/database/src/models/discover_requests/model.rs @@ -8,6 +8,7 @@ auto_derived!( pub enum DiscoverRequestStatus { Pending, UnderReview, + Removed(Option), Denied(Option), // reason Approved(Option), // reason } diff --git a/crates/core/database/src/models/discover_requests/ops/mongodb.rs b/crates/core/database/src/models/discover_requests/ops/mongodb.rs index 8b1a6ad1..6016649f 100644 --- a/crates/core/database/src/models/discover_requests/ops/mongodb.rs +++ b/crates/core/database/src/models/discover_requests/ops/mongodb.rs @@ -27,6 +27,12 @@ impl AbstractDiscoverRequest for MongoDb { DiscoverRequestStatus::Approved(_) | DiscoverRequestStatus::Pending | DiscoverRequestStatus::UnderReview => return Err(create_error!(NoEffect)), + DiscoverRequestStatus::Removed(_) => { + return Err(create_error!(ContactSupport { + locale: "discover.removed_cannot_apply".to_string(), + msg: "Your server/bot was removed from Discover. Please contact support for more information.".to_string() + })) + } _ => Ok(()), }?; self.col::(DISCOVER_COL).update_one( @@ -70,6 +76,20 @@ impl AbstractDiscoverRequest for MongoDb { request_type: DiscoverRequestType, item: &str, ) -> Result<()> { + let existing = self + .fetch_discover_request_by_item_id(request_type.clone(), item) + .await?; + match existing.status { + DiscoverRequestStatus::Approved(_) | DiscoverRequestStatus::Removed(_) => { + Err(create_error!(ContactSupport { + locale: "discover.cannot_auto_remove".to_string(), msg: "Your Discover request cannot be automatically removed, please contact Support".to_string() + })) + } + DiscoverRequestStatus::Denied(_) => Err(create_error!(ContactSupport { + locale: "discover.declined_apply_again".to_string(), msg: "Your Discover request has been declined, and cannot be removed. Please apply again instead".to_string() + })), + DiscoverRequestStatus::Pending | DiscoverRequestStatus::UnderReview => Ok(()), + }?; query!( self, delete_one, diff --git a/crates/core/database/src/util/bridge/v0.rs b/crates/core/database/src/util/bridge/v0.rs index 3677ef46..06a1a94f 100644 --- a/crates/core/database/src/util/bridge/v0.rs +++ b/crates/core/database/src/util/bridge/v0.rs @@ -134,6 +134,7 @@ impl From for DiscoverRequestType { impl From for DiscoverRequestStatus { fn from(value: crate::DiscoverRequestStatus) -> Self { match value { + crate::DiscoverRequestStatus::Removed(s) => DiscoverRequestStatus::Removed(s), crate::DiscoverRequestStatus::Approved(s) => DiscoverRequestStatus::Approved(s), crate::DiscoverRequestStatus::Denied(s) => DiscoverRequestStatus::Denied(s), crate::DiscoverRequestStatus::Pending => DiscoverRequestStatus::Pending, diff --git a/crates/core/models/src/v0/discover.rs b/crates/core/models/src/v0/discover.rs index 27b4a50f..f78cc959 100644 --- a/crates/core/models/src/v0/discover.rs +++ b/crates/core/models/src/v0/discover.rs @@ -7,6 +7,7 @@ auto_derived!( pub enum DiscoverRequestStatus { Pending, UnderReview, + Removed(Option), Denied(Option), // reason Approved(Option), // reason } diff --git a/crates/core/result/src/lib.rs b/crates/core/result/src/lib.rs index a6adbb1c..54d9b63c 100644 --- a/crates/core/result/src/lib.rs +++ b/crates/core/result/src/lib.rs @@ -59,6 +59,7 @@ pub enum ErrorType { // ? Support Errors ContactSupport { + locale: String, msg: String, }, diff --git a/crates/delta/src/routes/bots/discover/discover_remove_bot.rs b/crates/delta/src/routes/bots/discover/discover_remove_bot.rs index c358c042..e67029b0 100644 --- a/crates/delta/src/routes/bots/discover/discover_remove_bot.rs +++ b/crates/delta/src/routes/bots/discover/discover_remove_bot.rs @@ -43,8 +43,14 @@ pub async fn discover_remove_bot( match ret.status { DiscoverRequestStatus::Approved(_) => Err(create_error!(ContactSupport { + locale: "discover.bot_removal_approved".to_string(), msg: "Contact support to have your bot removed from Discover".to_string() })), + DiscoverRequestStatus::Removed(_) => Err(create_error!(ContactSupport { + locale: "discover.bot_removal_removed".to_string(), + msg: "Your bot has been removed from discover, contact support for more information" + .to_string() + })), DiscoverRequestStatus::Denied(_) => Err(create_error!(NoEffect)), DiscoverRequestStatus::Pending | DiscoverRequestStatus::UnderReview => { db.delete_discover_request(ret.request_type, &ret.request_id) diff --git a/crates/delta/src/routes/servers/discover/discover_remove.rs b/crates/delta/src/routes/servers/discover/discover_remove.rs index 42d8a065..016b9d5a 100644 --- a/crates/delta/src/routes/servers/discover/discover_remove.rs +++ b/crates/delta/src/routes/servers/discover/discover_remove.rs @@ -43,8 +43,14 @@ pub async fn discover_remove( match ret.status { DiscoverRequestStatus::Approved(_) => Err(create_error!(ContactSupport { + locale: "discover.server_removal_approved".to_string(), msg: "Contact support to have your server removed from Discover".to_string() })), + DiscoverRequestStatus::Removed(_) => Err(create_error!(ContactSupport { + locale: "discover.server_removal_removed".to_string(), + msg: "Your server has been removed from discover, contact support for more information" + .to_string() + })), DiscoverRequestStatus::Denied(_) => Err(create_error!(NoEffect)), DiscoverRequestStatus::Pending | DiscoverRequestStatus::UnderReview => { db.delete_discover_request(ret.request_type, &ret.request_id) diff --git a/docs/docs/developers/locale.md b/docs/docs/developers/locale.md new file mode 100644 index 00000000..a5bfaa3b --- /dev/null +++ b/docs/docs/developers/locale.md @@ -0,0 +1,15 @@ +# Locale + +Certain endpoints have full text errors with localization keys attached. The current error types with these keys are: + +- ContactSupport(locale: localization key, msg: plaintext english message) + +the following localization keys are used by the backend in error messages: + +- ContactSupport - discover.bot_removal_approved - The bot is already on discover, the user must contact support to have it removed. +- ContactSupport - discover.bot_removal_removed - The bot has been removed from discover by moderators, the user must contact support. +- ContactSupport - discover.server_removal_approved - The server is already on discover, the user must contact support to have it removed. +- ContactSupport - discover.server_removal_removed - The server has been removed from discover by moderators, the user must contact support. +- ContactSupport - discover.declined_apply_again - The Discover request was declined. Declined requests cannot be removed, but the user may submit again. +- ContactSupport - discover.cannot_auto_remove - The Discover request is approved or the item has been removed from discover. In either case, the user must contact support. +- ContactSupport - discover.removed_cannot_apply - The item was removed by moderators, and as such future applications are prohibited. Contact support for more information. \ No newline at end of file