diff --git a/src/daemon_boyfriend/cogs/ai_chat.py b/src/daemon_boyfriend/cogs/ai_chat.py index a39ec65..1072e85 100644 --- a/src/daemon_boyfriend/cogs/ai_chat.py +++ b/src/daemon_boyfriend/cogs/ai_chat.py @@ -114,7 +114,56 @@ class AIChatCog(commands.Cog): except Exception as e: logger.error(f"Mention response error: {e}", exc_info=True) - await message.reply("Sorry, I encountered an error. Please try again.") + error_message = self._get_error_message(e) + await message.reply(error_message) + + def _get_error_message(self, error: Exception) -> str: + """Get a user-friendly error message based on the exception type. + + Args: + error: The exception that occurred + + Returns: + A user-friendly error message + """ + error_str = str(error).lower() + + # Check for credit/quota/billing errors + credit_keywords = [ + "insufficient_quota", + "insufficient credits", + "quota exceeded", + "rate limit", + "billing", + "payment required", + "credit", + "exceeded your current quota", + "out of credits", + "no credits", + "balance", + "insufficient funds", + ] + + if any(keyword in error_str for keyword in credit_keywords): + return "I'm currently out of API credits. Please try again later or contact the bot administrator." + + # Check for authentication errors + auth_keywords = ["invalid api key", "unauthorized", "authentication", "invalid_api_key"] + if any(keyword in error_str for keyword in auth_keywords): + return ( + "There's an issue with my API configuration. Please contact the bot administrator." + ) + + # Check for model errors + if "model" in error_str and ("not found" in error_str or "does not exist" in error_str): + return "The configured AI model is not available. Please contact the bot administrator." + + # Check for content policy violations + if "content policy" in error_str or "safety" in error_str or "blocked" in error_str: + return "I can't respond to that request due to content policy restrictions." + + # Default error message + return "Sorry, I encountered an error. Please try again." def _extract_message_content(self, message: discord.Message) -> str: """Extract the actual message content, removing bot mentions."""