Improve errors and wording
This commit is contained in:
@ -92,6 +92,8 @@ enum Error {
|
||||
SQLx(sqlx::Error),
|
||||
#[allow(unused)]
|
||||
Serenity(serenity::Error),
|
||||
#[allow(unused)]
|
||||
MissingDiscordPermission(&'static str),
|
||||
}
|
||||
|
||||
pub async fn initialize(
|
||||
|
@ -305,7 +305,15 @@ pub async fn edit_reminder(
|
||||
Err(e) => {
|
||||
warn!("`create_database_channel` returned an error code: {:?}", e);
|
||||
|
||||
error.push("Failed to configure channel for reminders. Please check the bot permissions".to_string());
|
||||
// Provide more specific error messages based on the error type
|
||||
match e {
|
||||
crate::web::Error::MissingDiscordPermission(permission) => {
|
||||
error.push(format!("Please ensure the bot has the \"{}\" permission in the channel", permission));
|
||||
}
|
||||
_ => {
|
||||
error.push("Failed to configure channel for reminders. Please check the bot permissions".to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -65,7 +65,16 @@ pub 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."}));
|
||||
// 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.".to_string(),
|
||||
};
|
||||
|
||||
return Err(json!({"error": error_msg}));
|
||||
}
|
||||
|
||||
let channel = channel.unwrap();
|
||||
|
@ -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