mirror of
https://github.com/pacnpal/Pac-cogs.git
synced 2025-12-20 02:41:06 -05:00
Added proper error handling in enable_database command to handle cases where the setting doesn't exist yet
Fixed redbot import issues by importing specific exception classes Ensured database setting is properly synchronized between base.py and config_manager.py Added proper database initialization and reference handling
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
"""Configuration management for VideoArchiver"""
|
||||
from redbot.core import Config
|
||||
from redbot.core import commands # Added for exception types
|
||||
from typing import Dict, Any, Optional, List, Union, cast
|
||||
import discord
|
||||
import logging
|
||||
@@ -33,6 +34,7 @@ class ConfigManager:
|
||||
"retry_delay": 5,
|
||||
"discord_retry_attempts": 3,
|
||||
"discord_retry_delay": 5,
|
||||
"use_database": False, # Added the missing use_database setting
|
||||
}
|
||||
|
||||
# Valid settings constraints
|
||||
@@ -88,7 +90,7 @@ class ConfigManager:
|
||||
elif setting in ["message_template"] and not isinstance(value, str):
|
||||
raise ConfigError("Message template must be a string")
|
||||
|
||||
elif setting in ["enabled", "delete_after_repost", "disable_update_check"] and not isinstance(value, bool):
|
||||
elif setting in ["enabled", "delete_after_repost", "disable_update_check", "use_database"] and not isinstance(value, bool):
|
||||
raise ConfigError(f"{setting} must be a boolean")
|
||||
|
||||
except Exception as e:
|
||||
@@ -343,6 +345,11 @@ class ConfigManager:
|
||||
value=str(settings["disable_update_check"]),
|
||||
inline=True
|
||||
)
|
||||
embed.add_field(
|
||||
name="Database Enabled",
|
||||
value=str(settings["use_database"]),
|
||||
inline=True
|
||||
)
|
||||
|
||||
# Add enabled sites with validation
|
||||
embed.add_field(
|
||||
|
||||
@@ -12,7 +12,11 @@ from redbot.core.commands import (
|
||||
hybrid_command,
|
||||
hybrid_group,
|
||||
guild_only,
|
||||
commands, # Added this import
|
||||
commands,
|
||||
MissingPermissions,
|
||||
BotMissingPermissions,
|
||||
MissingRequiredArgument,
|
||||
BadArgument,
|
||||
)
|
||||
from redbot.core import checks
|
||||
from discord import app_commands
|
||||
@@ -101,6 +105,8 @@ class VideoArchiver(GroupCog):
|
||||
@checks.admin_or_permissions(administrator=True)
|
||||
async def enable_database(self, ctx: Context):
|
||||
"""Enable the video archive database."""
|
||||
try:
|
||||
# First check if database is already enabled
|
||||
try:
|
||||
current_setting = await self.config_manager.get_setting(
|
||||
ctx.guild.id, "use_database"
|
||||
@@ -108,15 +114,26 @@ class VideoArchiver(GroupCog):
|
||||
if current_setting:
|
||||
await ctx.send("The video archive database is already enabled.")
|
||||
return
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to get setting use_database: {e}")
|
||||
# If setting doesn't exist, we'll create it
|
||||
await self.config_manager.update_setting(ctx.guild.id, "use_database", False)
|
||||
|
||||
# Initialize database if it's being enabled
|
||||
try:
|
||||
self.db = VideoArchiveDB(self.data_path)
|
||||
# Update processor with database
|
||||
if self.processor:
|
||||
self.processor.db = self.db
|
||||
if self.processor.queue_handler:
|
||||
self.processor.queue_handler.db = self.db
|
||||
|
||||
await self.config_manager.update_setting(ctx.guild.id, "use_database", True)
|
||||
await ctx.send("Video archive database has been enabled.")
|
||||
except Exception as e:
|
||||
logger.error(f"Error initializing database: {e}")
|
||||
await ctx.send("An error occurred while initializing the database.")
|
||||
return
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error enabling database: {e}")
|
||||
@@ -429,13 +446,13 @@ class VideoArchiver(GroupCog):
|
||||
"""Handle command errors"""
|
||||
error_msg = None
|
||||
try:
|
||||
if isinstance(error, redbot.core.commands.MissingPermissions): # Fixed this line
|
||||
if isinstance(error, MissingPermissions):
|
||||
error_msg = "❌ You don't have permission to use this command."
|
||||
elif isinstance(error, redbot.core.commands.BotMissingPermissions): # And this line
|
||||
elif isinstance(error, BotMissingPermissions):
|
||||
error_msg = "❌ I don't have the required permissions to do that."
|
||||
elif isinstance(error, redbot.core.commands.MissingRequiredArgument): # And this line
|
||||
elif isinstance(error, MissingRequiredArgument):
|
||||
error_msg = f"❌ Missing required argument: {error.param.name}"
|
||||
elif isinstance(error, redbot.core.commands.BadArgument): # And this line
|
||||
elif isinstance(error, BadArgument):
|
||||
error_msg = f"❌ Invalid argument: {str(error)}"
|
||||
elif isinstance(error, ConfigError):
|
||||
error_msg = f"❌ Configuration error: {str(error)}"
|
||||
|
||||
Reference in New Issue
Block a user