This commit is contained in:
Slipstream 2025-05-06 18:03:55 -06:00
parent 9577dce9f5
commit 05a180c2d5
Signed by: slipstream
GPG Key ID: 13E498CE010AC6FD
7 changed files with 45 additions and 36 deletions

View File

@ -324,7 +324,7 @@ async def lifespan(_: FastAPI): # Underscore indicates unused but required para
try:
# Initialize the pools in the settings_manager module
# Close any existing pools first to ensure clean state
if settings_manager.pg_pool or settings_manager.redis_pool:
if settings_manager.get_pg_pool() or settings_manager.get_redis_pool():
log.info("Closing existing database pools before reinitializing...")
await settings_manager.close_pools()
@ -359,7 +359,7 @@ async def lifespan(_: FastAPI): # Underscore indicates unused but required para
log.info("Existing database saved.")
# Close database/cache pools if they were initialized
if settings_manager and (settings_manager.pg_pool or settings_manager.redis_pool):
if settings_manager and (settings_manager.get_pg_pool() or settings_manager.get_redis_pool()):
log.info("Closing database and cache connection pools for API server...")
await settings_manager.close_pools()
log.info("Database and cache connection pools closed for API server.")
@ -577,7 +577,7 @@ async def get_guild_cogs_no_deps(guild_id: int):
log.warning(f"Could not import bot instance: {e}")
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
return {"error": "Settings manager not available", "cogs": []}
# Get cogs from the database directly if bot is not available
@ -875,7 +875,7 @@ async def get_guild_cogs_direct(
log.warning(f"Could not import bot instance: {e}")
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -1029,7 +1029,7 @@ async def update_cog_status_direct(
"""Enable or disable a cog for a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -1094,7 +1094,7 @@ async def update_command_status_direct(
"""Enable or disable a command for a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -1816,8 +1816,8 @@ async def dashboard_get_guild_settings(
known_cogs_in_db = {}
try:
# Need to acquire connection from pool managed by settings_manager
if settings_manager.pg_pool:
async with settings_manager.pg_pool.acquire() as conn:
if settings_manager.get_pg_pool():
async with settings_manager.get_pg_pool().acquire() as conn:
records = await conn.fetch("SELECT cog_name, enabled FROM enabled_cogs WHERE guild_id = $1", guild_id)
for record in records:
known_cogs_in_db[record['cog_name']] = record['enabled']
@ -1830,8 +1830,8 @@ async def dashboard_get_guild_settings(
# Fetch command permissions
permissions_map: Dict[str, List[str]] = {}
try:
if settings_manager.pg_pool:
async with settings_manager.pg_pool.acquire() as conn:
if settings_manager.get_pg_pool():
async with settings_manager.get_pg_pool().acquire() as conn:
records = await conn.fetch(
"SELECT command_name, allowed_role_id FROM command_permissions WHERE guild_id = $1 ORDER BY command_name, allowed_role_id",
guild_id
@ -1926,8 +1926,8 @@ async def dashboard_get_all_guild_command_permissions_map(
log.info(f"Dashboard: Fetching all command permissions map for guild {guild_id} requested by user {current_user['user_id']}")
permissions_map: Dict[str, List[str]] = {}
try:
if settings_manager.pg_pool:
async with settings_manager.pg_pool.acquire() as conn:
if settings_manager.get_pg_pool():
async with settings_manager.get_pg_pool().acquire() as conn:
records = await conn.fetch(
"SELECT command_name, allowed_role_id FROM command_permissions WHERE guild_id = $1 ORDER BY command_name, allowed_role_id",
guild_id
@ -1960,8 +1960,8 @@ async def dashboard_get_all_guild_command_permissions(
log.info(f"Dashboard: Fetching all command permissions for guild {guild_id} requested by user {current_user['user_id']}")
permissions_list = []
try:
if settings_manager.pg_pool:
async with settings_manager.pg_pool.acquire() as conn:
if settings_manager.get_pg_pool():
async with settings_manager.get_pg_pool().acquire() as conn:
records = await conn.fetch(
"SELECT command_name, allowed_role_id FROM command_permissions WHERE guild_id = $1 ORDER BY command_name, allowed_role_id",
guild_id
@ -2025,7 +2025,7 @@ async def ai_moderation_action(
raise HTTPException(status_code=400, detail="guild_id in path does not match payload")
# Insert into moderation log
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
log.error("settings_manager or pg_pool not available for AI moderation logging.")
raise HTTPException(status_code=503, detail="Moderation logging unavailable")
@ -2040,7 +2040,7 @@ async def ai_moderation_action(
try:
from discordbot.db import mod_log_db
case_id = await mod_log_db.add_mod_log(
settings_manager.pg_pool,
settings_manager.get_pg_pool(),
guild_id=action.guild_id,
moderator_id=AI_MODERATOR_ID,
target_user_id=action.user_id,
@ -2051,7 +2051,7 @@ async def ai_moderation_action(
# Optionally update with message/channel info
if case_id and action.message_id and action.channel_id:
await mod_log_db.update_mod_log_message_details(
settings_manager.pg_pool,
settings_manager.get_pg_pool(),
case_id=case_id,
message_id=action.message_id,
channel_id=action.channel_id

View File

@ -106,7 +106,7 @@ async def update_cog_status(
"""Enable or disable a cog for a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -168,7 +168,7 @@ async def update_command_status(
"""Enable or disable a command for a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"

View File

@ -40,7 +40,7 @@ async def get_command_customizations(
"""Get all command customizations for a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -103,7 +103,7 @@ async def set_command_customization(
"""Set a custom name and/or description for a command in a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -179,7 +179,7 @@ async def set_group_customization(
"""Set a custom name for a command group in a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -233,7 +233,7 @@ async def add_command_alias(
"""Add an alias for a command in a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -286,7 +286,7 @@ async def remove_command_alias(
"""Remove an alias for a command in a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"

View File

@ -213,7 +213,7 @@ async def get_command_customizations(
"""Get all command customizations for a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -268,7 +268,7 @@ async def set_command_customization(
"""Set a custom name for a command in a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -322,7 +322,7 @@ async def set_group_customization(
"""Set a custom name for a command group in a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -376,7 +376,7 @@ async def add_command_alias(
"""Add an alias for a command in a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -429,7 +429,7 @@ async def remove_command_alias(
"""Remove an alias for a command in a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -468,7 +468,7 @@ async def get_guild_settings(
"""Get settings for a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -563,7 +563,7 @@ async def update_guild_settings(
"""Update settings for a guild."""
try:
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -1034,7 +1034,7 @@ async def update_cog_status_redirect(
# Fall back to direct implementation
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"
@ -1125,7 +1125,7 @@ async def update_command_status_redirect(
# Fall back to direct implementation
# Check if settings_manager is available
if not settings_manager or not settings_manager.pg_pool:
if not settings_manager or not settings_manager.get_pg_pool():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Settings manager not available"

View File

@ -514,7 +514,7 @@ class StarboardCog(commands.Cog):
return
# Get a connection to the database
conn = await asyncio.wait_for(settings_manager.pg_pool.acquire(), timeout=5.0)
conn = await asyncio.wait_for(settings_manager.get_pg_pool().acquire(), timeout=5.0)
try:
# Get the total number of entries
total_entries = await conn.fetchval(
@ -566,7 +566,7 @@ class StarboardCog(commands.Cog):
await ctx.send(embed=embed)
finally:
# Release the connection
await settings_manager.pg_pool.release(conn)
await settings_manager.get_pg_pool().release(conn)
except Exception as e:
log.exception(f"Error getting starboard statistics: {e}")
await ctx.send(f"❌ An error occurred while getting starboard statistics: {str(e)}")

View File

@ -228,7 +228,7 @@ class WelcomeCog(commands.Cog):
async def setup(bot: commands.Bot):
# Ensure pools are initialized before adding the cog
print("WelcomeCog setup function called!")
if settings_manager.pg_pool is None or settings_manager.redis_pool is None:
if settings_manager.get_pg_pool() is None or settings_manager.get_redis_pool() is None:
log.warning("Settings Manager pools not initialized before loading WelcomeCog. Attempting initialization.")
print("WelcomeCog: Settings Manager pools not initialized, attempting initialization...")
try:

View File

@ -2113,3 +2113,12 @@ async def set_mod_log_channel_id(guild_id: int, channel_id: int | None) -> bool:
"""Sets the channel ID for the integrated moderation log. Set to None to disable."""
value_to_set = str(channel_id) if channel_id is not None else None
return await set_setting(guild_id, 'mod_log_channel_id', value_to_set)
# --- Getter functions for direct pool access if absolutely needed ---
def get_pg_pool():
"""Returns the active PostgreSQL pool instance."""
return _active_pg_pool
def get_redis_pool():
"""Returns the active Redis pool instance."""
return _active_redis_pool