This commit is contained in:
Slipstream 2025-05-04 21:20:13 -06:00
parent 0474ccbd8b
commit 2ec585ff81
Signed by: slipstream
GPG Key ID: 13E498CE010AC6FD
4 changed files with 58 additions and 4 deletions

View File

@ -1,7 +1,12 @@
import discord
from discord.ext import commands
import logging
from discordbot import settings_manager # Assuming settings_manager is accessible
import sys
import os
# Add the parent directory to sys.path to ensure settings_manager is accessible
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import settings_manager
log = logging.getLogger(__name__)
@ -10,23 +15,40 @@ class WelcomeCog(commands.Cog):
def __init__(self, bot: commands.Bot):
self.bot = bot
print("WelcomeCog: Initializing and registering event listeners")
# Check existing event listeners
print(f"WelcomeCog: Bot event listeners before registration: {self.bot.extra_events}")
# Register event listeners
self.bot.add_listener(self.on_member_join, "on_member_join")
self.bot.add_listener(self.on_member_remove, "on_member_remove")
# Check if event listeners were registered
print(f"WelcomeCog: Bot event listeners after registration: {self.bot.extra_events}")
print("WelcomeCog: Event listeners registered")
@commands.Cog.listener()
async def on_member_join(self, member: discord.Member):
"""Sends a welcome message when a new member joins."""
print(f"WelcomeCog: on_member_join event triggered for {member.name}")
guild = member.guild
if not guild:
print(f"WelcomeCog: Guild not found for member {member.name}")
return
log.debug(f"Member {member.name} joined guild {guild.name} ({guild.id})")
print(f"WelcomeCog: Member {member.name} joined guild {guild.name} ({guild.id})")
# --- Fetch settings ---
print(f"WelcomeCog: Fetching welcome settings for guild {guild.id}")
welcome_channel_id_str = await settings_manager.get_setting(guild.id, 'welcome_channel_id')
welcome_message_template = await settings_manager.get_setting(guild.id, 'welcome_message', default="Welcome {user} to {server}!")
print(f"WelcomeCog: Retrieved settings - channel_id: {welcome_channel_id_str}, message: {welcome_message_template}")
# Handle the "__NONE__" marker for potentially unset values
if not welcome_channel_id_str or welcome_channel_id_str == "__NONE__":
log.debug(f"Welcome channel not configured for guild {guild.id}")
print(f"WelcomeCog: Welcome channel not configured for guild {guild.id}")
return
try:
@ -55,22 +77,27 @@ class WelcomeCog(commands.Cog):
except Exception as e:
log.exception(f"Error sending welcome message for guild {guild.id}: {e}")
@commands.Cog.listener()
async def on_member_remove(self, member: discord.Member):
"""Sends a goodbye message when a member leaves."""
print(f"WelcomeCog: on_member_remove event triggered for {member.name}")
guild = member.guild
if not guild:
print(f"WelcomeCog: Guild not found for member {member.name}")
return
log.debug(f"Member {member.name} left guild {guild.name} ({guild.id})")
print(f"WelcomeCog: Member {member.name} left guild {guild.name} ({guild.id})")
# --- Fetch settings ---
print(f"WelcomeCog: Fetching goodbye settings for guild {guild.id}")
goodbye_channel_id_str = await settings_manager.get_setting(guild.id, 'goodbye_channel_id')
goodbye_message_template = await settings_manager.get_setting(guild.id, 'goodbye_message', default="{username} has left the server.")
print(f"WelcomeCog: Retrieved settings - channel_id: {goodbye_channel_id_str}, message: {goodbye_message_template}")
# Handle the "__NONE__" marker
if not goodbye_channel_id_str or goodbye_channel_id_str == "__NONE__":
log.debug(f"Goodbye channel not configured for guild {guild.id}")
print(f"WelcomeCog: Goodbye channel not configured for guild {guild.id}")
return
try:
@ -200,13 +227,19 @@ 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:
log.warning("Settings Manager pools not initialized before loading WelcomeCog. Attempting initialization.")
print("WelcomeCog: Settings Manager pools not initialized, attempting initialization...")
try:
await settings_manager.initialize_pools()
print("WelcomeCog: Settings Manager pools initialized successfully.")
except Exception as e:
log.exception("Failed to initialize Settings Manager pools during WelcomeCog setup. Cog will not load.")
print(f"WelcomeCog: Failed to initialize Settings Manager pools: {e}")
return # Prevent loading if pools fail
await bot.add_cog(WelcomeCog(bot))
welcome_cog = WelcomeCog(bot)
await bot.add_cog(welcome_cog)
print(f"WelcomeCog loaded! Event listeners registered: on_member_join, on_member_remove")
log.info("WelcomeCog loaded.")

View File

@ -12,8 +12,16 @@ async def load_all_cogs(bot: commands.Bot, skip_cogs: Optional[List[str]] = None
loaded_cogs = []
failed_cogs = []
print(f"Loading cogs from directory: {cogs_dir}")
print(f"Files in cogs directory: {os.listdir(cogs_dir)}")
print(f"Skipping cogs: {skip_cogs}")
for filename in os.listdir(cogs_dir):
if filename.endswith(".py") and not filename.startswith("__") and not filename.startswith("gurt") and not filename.startswith("profile_updater"):
# Special check for welcome_cog.py
if filename == "welcome_cog.py":
print(f"Found welcome_cog.py, attempting to load it...")
cog_name = f"{cogs_dir}.{filename[:-3]}"
if cog_name in skip_cogs:
print(f"Skipping AI cog: {cog_name}")

View File

@ -172,6 +172,12 @@ class GurtCog(commands.Cog, name="Gurt"): # Added explicit Cog name
# Add listeners to the bot instance
# We need to define the listener functions here to properly register them
# IMPORTANT: Don't override on_member_join or on_member_remove events
# Check if the bot already has event listeners for member join/leave
has_member_join = 'on_member_join' in self.bot.extra_events
has_member_remove = 'on_member_remove' in self.bot.extra_events
print(f"GurtCog: Bot already has event listeners - on_member_join: {has_member_join}, on_member_remove: {has_member_remove}")
@self.bot.event
async def on_ready():

View File

@ -144,6 +144,13 @@ class WheatleyCog(commands.Cog, name="Wheatley"): # Renamed class and Cog name
print("WARNING: Tavily API key not configured (TAVILY_API_KEY). Web search disabled.")
# Add listeners to the bot instance
# IMPORTANT: Don't override on_member_join or on_member_remove events
# Check if the bot already has event listeners for member join/leave
has_member_join = 'on_member_join' in self.bot.extra_events
has_member_remove = 'on_member_remove' in self.bot.extra_events
print(f"WheatleyCog: Bot already has event listeners - on_member_join: {has_member_join}, on_member_remove: {has_member_remove}")
@self.bot.event
async def on_ready():
await on_ready_listener(self)