fix: improve user lookup in marriage commands to work in DMs

Enable marriage commands to work in direct messages and handle cases where partners are not in the same guild by:
- Checking if interaction is in guild context
- Using bot.fetch_user as fallback when guild.get_member fails
- Adding error handling for user fetching operations
This commit is contained in:
Slipstream 2025-05-22 21:24:29 -06:00
parent 1b7e96f2a5
commit 31e7321f74
Signed by: slipstream
GPG Key ID: 13E498CE010AC6FD

View File

@ -269,7 +269,15 @@ class MarriageCog(commands.Cog):
# Get marriage info
marriage_data = self.marriages[user_id]
partner_id = marriage_data["partner_id"]
partner = interaction.guild.get_member(partner_id)
# Use fetch_user instead of get_member to work in both guild and DM contexts
partner = interaction.guild.get_member(partner_id) if interaction.guild else None
if not partner:
# Fallback to bot's fetch_user if not found in guild or in DM context
try:
partner = await self.bot.fetch_user(partner_id)
except:
pass
partner_name = partner.display_name if partner else f"Unknown User ({partner_id})"
# Calculate days
@ -298,7 +306,15 @@ class MarriageCog(commands.Cog):
# Get partner info
partner_id = self.marriages[user_id]["partner_id"]
partner = interaction.guild.get_member(partner_id)
# Use fetch_user instead of get_member to work in both guild and DM contexts
partner = interaction.guild.get_member(partner_id) if interaction.guild else None
if not partner:
# Fallback to bot's fetch_user if not found in guild or in DM context
try:
partner = await self.bot.fetch_user(partner_id)
except:
pass
partner_name = partner.mention if partner else f"Unknown User ({partner_id})"
# Process divorce
@ -327,8 +343,22 @@ class MarriageCog(commands.Cog):
# Add top 10 marriages
for i, (user1_id, user2_id, days) in enumerate(marriages[:10], 1):
user1 = interaction.guild.get_member(user1_id)
user2 = interaction.guild.get_member(user2_id)
# Use fetch_user instead of get_member to work in both guild and DM contexts
user1 = interaction.guild.get_member(user1_id) if interaction.guild else None
user2 = interaction.guild.get_member(user2_id) if interaction.guild else None
# Fallback to bot's fetch_user if not found in guild or in DM context
if not user1:
try:
user1 = await self.bot.fetch_user(user1_id)
except:
pass
if not user2:
try:
user2 = await self.bot.fetch_user(user2_id)
except:
pass
user1_name = user1.display_name if user1 else f"Unknown User ({user1_id})"
user2_name = user2.display_name if user2 else f"Unknown User ({user2_id})"