aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar mbaruh <[email protected]>2022-10-01 22:29:38 +0300
committerGravatar mbaruh <[email protected]>2022-10-01 22:29:38 +0300
commit83d4e4074c249ffcf8a9810e483dd42f1acc2dbb (patch)
tree9c3f9c742eeae0af9fe0fc45af159bce9a764cac
parentShow settings in sorted order in UI (diff)
Prettify post/patch filter error
-rw-r--r--bot/exts/filtering/_ui.py24
1 files changed, 21 insertions, 3 deletions
diff --git a/bot/exts/filtering/_ui.py b/bot/exts/filtering/_ui.py
index 8640b48c4..94eb86c3b 100644
--- a/bot/exts/filtering/_ui.py
+++ b/bot/exts/filtering/_ui.py
@@ -34,6 +34,7 @@ MAX_MODAL_TITLE_LENGTH = 45
MAX_MODAL_LABEL_LENGTH = 45
# Max number of items in a select
MAX_SELECT_ITEMS = 25
+MAX_EMBED_DESCRIPTION = 4000
T = TypeVar('T')
@@ -485,9 +486,10 @@ class SettingsEditView(discord.ui.View):
self.filter_settings_overrides
)
except ResponseCodeError as e:
- await interaction.message.channel.send(f"An error occurred: ```{e}```", reference=interaction.message)
-
- self.stop()
+ await interaction.message.reply(embed=format_response_error(e))
+ await interaction.message.edit(view=self)
+ else:
+ self.stop()
@discord.ui.button(label="🚫 Cancel", style=discord.ButtonStyle.red, row=4)
async def cancel(self, interaction: Interaction, button: discord.ui.Button) -> None:
@@ -689,3 +691,19 @@ def description_and_settings_converter(
raise BadArgument(e)
return description, settings, filter_settings
+
+
+def format_response_error(e: ResponseCodeError) -> Embed:
+ """Format the response error into an embed."""
+ description = ""
+ if "non_field_errors" in e.response_json:
+ non_field_errors = e.response_json.pop("non_field_errors")
+ description += "\n".join(f"• {error}" for error in non_field_errors) + "\n"
+ for field, errors in e.response_json.items():
+ description += "\n".join(f"• {field} - {error}" for error in errors) + "\n"
+ description = description.strip()
+ if len(description) > MAX_EMBED_DESCRIPTION:
+ description = description[:MAX_EMBED_DESCRIPTION] + "[...]"
+
+ embed = Embed(colour=discord.Colour.red(), title="Oops...", description=description)
+ return embed