modified: bot.py

This commit is contained in:
SimolZimol
2025-11-07 22:43:25 +01:00
parent c59d6d888f
commit acb5216bc5

44
bot.py
View File

@@ -4756,12 +4756,14 @@ async def warn(ctx, user: discord.User, reason: str = "No reason provided", mess
Note: context_range parameter only works when message_id is also provided! Note: context_range parameter only works when message_id is also provided!
""" """
# Check if it's a slash command and defer if needed (skip defer for silent mode) # Check if it's a slash command and defer if needed
is_slash_command = hasattr(ctx, 'interaction') and ctx.interaction is_slash_command = hasattr(ctx, 'interaction') and ctx.interaction
if silent: if silent:
logger.info(f"Silent warn command - is_slash_command: {is_slash_command}, has interaction: {hasattr(ctx, 'interaction')}, interaction value: {getattr(ctx, 'interaction', None)}") logger.info(f"Silent warn command - is_slash_command: {is_slash_command}, has interaction: {hasattr(ctx, 'interaction')}, interaction value: {getattr(ctx, 'interaction', None)}")
if is_slash_command and not silent:
await ctx.defer() # For slash commands, always defer to ensure we have a response method
if is_slash_command:
await ctx.defer(ephemeral=silent) # Defer as ephemeral if silent mode
# Helper function for sending responses # Helper function for sending responses
async def send_response(content=None, embed=None, ephemeral=False, file=None): async def send_response(content=None, embed=None, ephemeral=False, file=None):
@@ -5030,20 +5032,16 @@ async def warn(ctx, user: discord.User, reason: str = "No reason provided", mess
silent_embed.set_footer(text=f"Silent Mode • User ID: {user.id}") silent_embed.set_footer(text=f"Silent Mode • User ID: {user.id}")
silent_embed.set_thumbnail(url=user.display_avatar.url) silent_embed.set_thumbnail(url=user.display_avatar.url)
# Send ephemeral response - force it to be ephemeral # Send ephemeral response - use followup since we deferred
try: try:
if is_slash_command: if is_slash_command:
# For slash commands, use response.send_message directly for ephemeral # Since we deferred with ephemeral=silent, use followup
if hasattr(ctx, 'response') and not ctx.response.is_done(): if hasattr(ctx, 'followup') and ctx.followup:
await ctx.response.send_message(embed=silent_embed, ephemeral=True)
logger.info(f"Silent warning sent via ctx.response.send_message (ephemeral)")
elif hasattr(ctx, 'followup') and ctx.followup:
await ctx.followup.send(embed=silent_embed, ephemeral=True) await ctx.followup.send(embed=silent_embed, ephemeral=True)
logger.info(f"Silent warning sent via ctx.followup.send (ephemeral)") logger.info(f"Silent warning sent via ctx.followup.send (ephemeral)")
else: else:
# This shouldn't happen for slash commands but log it logger.error(f"Silent warning failed: No followup available after defer")
logger.error(f"Silent warning failed: No valid response method available for slash command") raise Exception("No followup available after defer")
raise Exception("No valid ephemeral response method available")
else: else:
# For prefix commands, we can't do true ephemeral, so log error instead # For prefix commands, we can't do true ephemeral, so log error instead
logger.error(f"Silent warning attempted with prefix command - not supported") logger.error(f"Silent warning attempted with prefix command - not supported")
@@ -6342,10 +6340,12 @@ async def mute(ctx, user: discord.User, duration: str, reason: str = "No reason
Note: context_range parameter only works when message_id is also provided! Note: context_range parameter only works when message_id is also provided!
""" """
# Check if it's a slash command and defer if needed (skip defer for silent mode) # Check if it's a slash command and defer if needed
is_slash_command = hasattr(ctx, 'interaction') and ctx.interaction is_slash_command = hasattr(ctx, 'interaction') and ctx.interaction
if is_slash_command and not silent:
await ctx.defer() # For slash commands, always defer to ensure we have a response method
if is_slash_command:
await ctx.defer(ephemeral=silent) # Defer as ephemeral if silent mode
# Helper function for sending responses # Helper function for sending responses
async def send_response(content=None, embed=None, ephemeral=False, file=None): async def send_response(content=None, embed=None, ephemeral=False, file=None):
@@ -6630,20 +6630,16 @@ async def mute(ctx, user: discord.User, duration: str, reason: str = "No reason
silent_embed.set_footer(text=f"Silent Mode • User ID: {user.id} | Use /viewmute {mute_id} for details") silent_embed.set_footer(text=f"Silent Mode • User ID: {user.id} | Use /viewmute {mute_id} for details")
silent_embed.set_thumbnail(url=user.display_avatar.url) silent_embed.set_thumbnail(url=user.display_avatar.url)
# Send ephemeral response - force it to be ephemeral # Send ephemeral response - use followup since we deferred
try: try:
if is_slash_command: if is_slash_command:
# For slash commands, use response.send_message directly for ephemeral # Since we deferred with ephemeral=silent, use followup
if hasattr(ctx, 'response') and not ctx.response.is_done(): if hasattr(ctx, 'followup') and ctx.followup:
await ctx.response.send_message(embed=silent_embed, ephemeral=True)
logger.info(f"Silent mute sent via ctx.response.send_message (ephemeral)")
elif hasattr(ctx, 'followup') and ctx.followup:
await ctx.followup.send(embed=silent_embed, ephemeral=True) await ctx.followup.send(embed=silent_embed, ephemeral=True)
logger.info(f"Silent mute sent via ctx.followup.send (ephemeral)") logger.info(f"Silent mute sent via ctx.followup.send (ephemeral)")
else: else:
# This shouldn't happen for slash commands but log it logger.error(f"Silent mute failed: No followup available after defer")
logger.error(f"Silent mute failed: No valid response method available for slash command") raise Exception("No followup available after defer")
raise Exception("No valid ephemeral response method available")
else: else:
# For prefix commands, we can't do true ephemeral, so log error instead # For prefix commands, we can't do true ephemeral, so log error instead
logger.error(f"Silent mute attempted with prefix command - not supported") logger.error(f"Silent mute attempted with prefix command - not supported")