Improve errors and wording
This commit is contained in:
		@@ -10,6 +10,7 @@ use rocket::{
 | 
			
		||||
use rocket_dyn_templates::Template;
 | 
			
		||||
use secrecy::ExposeSecret;
 | 
			
		||||
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
 | 
			
		||||
use serenity::http::HttpError;
 | 
			
		||||
use serenity::{
 | 
			
		||||
    all::CacheHttp,
 | 
			
		||||
    builder::CreateWebhook,
 | 
			
		||||
@@ -404,9 +405,19 @@ pub(crate) async fn create_reminder(
 | 
			
		||||
    if let Err(e) = channel {
 | 
			
		||||
        warn!("`create_database_channel` returned an error code: {:?}", e);
 | 
			
		||||
 | 
			
		||||
        return Err(
 | 
			
		||||
            json!({"error": "Failed to configure channel for reminders. Please check the bot permissions"}),
 | 
			
		||||
        );
 | 
			
		||||
        // Provide more specific error messages based on the error type
 | 
			
		||||
        let error_msg = match e {
 | 
			
		||||
            Error::MissingDiscordPermission(permission) => {
 | 
			
		||||
                format!(
 | 
			
		||||
                    "Please ensure the bot has the \"{}\" permission in the channel",
 | 
			
		||||
                    permission
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
            _ => "Failed to configure channel for reminders. Please check the bot permissions"
 | 
			
		||||
                .to_string(),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return Err(json!({"error": error_msg}));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let channel = channel.unwrap();
 | 
			
		||||
@@ -716,13 +727,36 @@ async fn create_database_channel(
 | 
			
		||||
 | 
			
		||||
    match row {
 | 
			
		||||
        Ok(row) => {
 | 
			
		||||
            let is_dm =
 | 
			
		||||
                channel.to_channel(&ctx).await.map_err(|e| Error::Serenity(e))?.private().is_some();
 | 
			
		||||
            let is_dm = channel
 | 
			
		||||
                .to_channel(&ctx)
 | 
			
		||||
                .await
 | 
			
		||||
                .map_err(|e| {
 | 
			
		||||
                    if let serenity::Error::Http(http_error) = &e {
 | 
			
		||||
                        if let HttpError::UnsuccessfulRequest(response) = http_error {
 | 
			
		||||
                            if response.error.code == 50001 {
 | 
			
		||||
                                return Error::MissingDiscordPermission("View Channel");
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    Error::Serenity(e)
 | 
			
		||||
                })?
 | 
			
		||||
                .private()
 | 
			
		||||
                .is_some();
 | 
			
		||||
            if !is_dm && (row.webhook_token.is_none() || row.webhook_id.is_none()) {
 | 
			
		||||
                let webhook = channel
 | 
			
		||||
                    .create_webhook(&ctx, CreateWebhook::new("Reminder").avatar(&*DEFAULT_AVATAR))
 | 
			
		||||
                    .await
 | 
			
		||||
                    .map_err(|e| Error::Serenity(e))?;
 | 
			
		||||
                    .map_err(|e| match &e {
 | 
			
		||||
                        serenity::Error::Http(HttpError::UnsuccessfulRequest(response)) => {
 | 
			
		||||
                            match response.error.code {
 | 
			
		||||
                                50001 => Error::MissingDiscordPermission("View Channel"),
 | 
			
		||||
                                50013 => Error::MissingDiscordPermission("Manage Webhooks"),
 | 
			
		||||
                                _ => Error::Serenity(e),
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        _ => Error::Serenity(e),
 | 
			
		||||
                    })?;
 | 
			
		||||
 | 
			
		||||
                let token = webhook.token.unwrap();
 | 
			
		||||
 | 
			
		||||
@@ -747,7 +781,16 @@ async fn create_database_channel(
 | 
			
		||||
            let webhook = channel
 | 
			
		||||
                .create_webhook(&ctx, CreateWebhook::new("Reminder").avatar(&*DEFAULT_AVATAR))
 | 
			
		||||
                .await
 | 
			
		||||
                .map_err(|e| Error::Serenity(e))?;
 | 
			
		||||
                .map_err(|e| match &e {
 | 
			
		||||
                    serenity::Error::Http(HttpError::UnsuccessfulRequest(response)) => {
 | 
			
		||||
                        match response.error.code {
 | 
			
		||||
                            50001 => Error::MissingDiscordPermission("View Channel"),
 | 
			
		||||
                            50013 => Error::MissingDiscordPermission("Manage Webhooks"),
 | 
			
		||||
                            _ => Error::Serenity(e),
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    _ => Error::Serenity(e),
 | 
			
		||||
                })?;
 | 
			
		||||
 | 
			
		||||
            let token = webhook.token.unwrap();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user