diff --git a/cogs/media/download.py b/cogs/media/download.py index 5165d53..7102d9e 100644 --- a/cogs/media/download.py +++ b/cogs/media/download.py @@ -71,6 +71,29 @@ def download_command(): await context.send(embed=embed, ephemeral=True) return + # Check if bot has send messages permission before starting download + try: + test_embed = discord.Embed(title="Testing permissions...", color=0x7289DA) + test_embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") + await context.channel.send(embed=test_embed, delete_after=0.1) + except discord.Forbidden: + embed = discord.Embed( + title="Permission Error", + description="The bot needs the `send messages` permission to execute this command.", + color=0xE02B2B, + ) + embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") + + interaction = getattr(context, "interaction", None) + if interaction is not None: + if not interaction.response.is_done(): + await interaction.response.send_message(embed=embed, ephemeral=True) + else: + await interaction.followup.send(embed=embed, ephemeral=True) + else: + await context.send(embed=embed, ephemeral=True) + return + try: parsed_url = urlparse(url) if not parsed_url.scheme or not parsed_url.netloc: @@ -208,36 +231,16 @@ def download_command(): embed.set_footer(text=f"Requested by {context.author.name}", icon_url=context.author.display_avatar.url) if interaction is not None: + await context.channel.send(embed=embed) + await context.channel.send(link) try: - await context.channel.send(embed=embed) - await context.channel.send(link) - try: - await interaction.delete_original_response() - except: - pass - except discord.Forbidden: - embed = discord.Embed( - title="Permission Error", - description="The bot needs the `send messages` permission to execute this command.", - color=0xE02B2B, - ) - embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") - await interaction.followup.send(embed=embed, ephemeral=True) - return + await interaction.delete_original_response() + except: + pass else: - try: - await processing_msg.delete() - await context.channel.send(embed=embed) - await context.channel.send(link) - except discord.Forbidden: - embed = discord.Embed( - title="Permission Error", - description="The bot needs the `send messages` permission to execute this command.", - color=0xE02B2B, - ) - embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") - await context.send(embed=embed, ephemeral=True) - return + await processing_msg.delete() + await context.channel.send(embed=embed) + await context.channel.send(link) return except Exception as upload_error: logger.exception(f"Catbox upload exception: {upload_error}") @@ -285,36 +288,16 @@ def download_command(): file = discord.File(f, filename=files[0]) if interaction is not None: + await context.channel.send(embed=embed) + await context.channel.send(file=file) try: - await context.channel.send(embed=embed) - await context.channel.send(file=file) - try: - await interaction.delete_original_response() - except: - pass - except discord.Forbidden: - embed = discord.Embed( - title="Permission Error", - description="The bot needs the `send messages` permission to execute this command.", - color=0xE02B2B, - ) - embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") - await interaction.followup.send(embed=embed, ephemeral=True) - return + await interaction.delete_original_response() + except: + pass else: - try: - await processing_msg.delete() - await context.channel.send(embed=embed) - await context.channel.send(file=file) - except discord.Forbidden: - embed = discord.Embed( - title="Permission Error", - description="The bot needs the `send messages` permission to execute this command.", - color=0xE02B2B, - ) - embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") - await context.send(embed=embed, ephemeral=True) - return + await processing_msg.delete() + await context.channel.send(embed=embed) + await context.channel.send(file=file) except discord.HTTPException as e: if e.status == 413: logger.info("Discord rejected file (413), falling back to Catbox upload") @@ -353,36 +336,16 @@ def download_command(): embed.set_footer(text=f"Requested by {context.author.name}", icon_url=context.author.display_avatar.url) if interaction is not None: + await context.channel.send(embed=embed) + await context.channel.send(link) try: - await context.channel.send(embed=embed) - await context.channel.send(link) - try: - await interaction.delete_original_response() - except: - pass - except discord.Forbidden: - embed = discord.Embed( - title="Permission Error", - description="The bot needs the `send messages` permission to execute this command.", - color=0xE02B2B, - ) - embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") - await interaction.followup.send(embed=embed, ephemeral=True) - return + await interaction.delete_original_response() + except: + pass else: - try: - await processing_msg.delete() - await context.channel.send(embed=embed) - await context.channel.send(link) - except discord.Forbidden: - embed = discord.Embed( - title="Permission Error", - description="The bot needs the `send messages` permission to execute this command.", - color=0xE02B2B, - ) - embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") - await context.send(embed=embed, ephemeral=True) - return + await processing_msg.delete() + await context.channel.send(embed=embed) + await context.channel.send(link) except Exception as upload_error: logger.exception(f"Catbox upload exception: {upload_error}") embed = discord.Embed( diff --git a/cogs/media/mcquote.py b/cogs/media/mcquote.py index a6333f7..60bd960 100644 --- a/cogs/media/mcquote.py +++ b/cogs/media/mcquote.py @@ -85,6 +85,29 @@ def mcquote_command(): await context.send(embed=embed, ephemeral=True) return + # Check if bot has send messages permission before starting quote generation + try: + test_embed = discord.Embed(title="Testing permissions...", color=0x7289DA) + test_embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") + await context.channel.send(embed=test_embed, delete_after=0.1) + except discord.Forbidden: + embed = discord.Embed( + title="Permission Error", + description="The bot needs the `send messages` permission to execute this command.", + color=0xE02B2B, + ) + embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") + + interaction = getattr(context, "interaction", None) + if interaction is not None: + if not interaction.response.is_done(): + await interaction.response.send_message(embed=embed, ephemeral=True) + else: + await interaction.followup.send(embed=embed, ephemeral=True) + else: + await context.send(embed=embed, ephemeral=True) + return + processing_embed = discord.Embed( title="Minecraft Quote (Processing)", description=" Generating quote... This may take a moment.", @@ -127,36 +150,16 @@ def mcquote_command(): interaction = getattr(context, "interaction", None) if interaction is not None: + await context.channel.send(embed=embed) + await context.channel.send(file=file) try: - await context.channel.send(embed=embed) - await context.channel.send(file=file) - try: - await interaction.delete_original_response() - except: - pass - except discord.Forbidden: - embed = discord.Embed( - title="Permission Error", - description="The bot needs the `send messages` permission to execute this command.", - color=0xE02B2B, - ) - embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") - await interaction.followup.send(embed=embed, ephemeral=True) - return + await interaction.delete_original_response() + except: + pass else: - try: - await processing_msg.delete() - await context.channel.send(embed=embed) - await context.channel.send(file=file) - except discord.Forbidden: - embed = discord.Embed( - title="Permission Error", - description="The bot needs the `send messages` permission to execute this command.", - color=0xE02B2B, - ) - embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") - await context.send(embed=embed, ephemeral=True) - return + await processing_msg.delete() + await context.channel.send(embed=embed) + await context.channel.send(file=file) os.remove(temp_file_path) except aiohttp.ClientError: diff --git a/cogs/media/tts.py b/cogs/media/tts.py index b670b3d..f1a097e 100644 --- a/cogs/media/tts.py +++ b/cogs/media/tts.py @@ -128,6 +128,29 @@ def tts_command(): await send_embed(context, embed, ephemeral=True) return + # Check if bot has send messages permission before starting TTS generation + try: + test_embed = discord.Embed(title="Testing permissions...", color=0x7289DA) + test_embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") + await context.channel.send(embed=test_embed, delete_after=0.1) + except discord.Forbidden: + embed = discord.Embed( + title="Permission Error", + description="The bot needs the `send messages` permission to execute this command.", + color=0xE02B2B, + ) + embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") + + interaction = getattr(context, "interaction", None) + if interaction is not None: + if not interaction.response.is_done(): + await interaction.response.send_message(embed=embed, ephemeral=True) + else: + await interaction.followup.send(embed=embed, ephemeral=True) + else: + await context.send(embed=embed, ephemeral=True) + return + processing_embed = ( discord.Embed( title="TTS (Processing)", @@ -198,35 +221,15 @@ def tts_command(): ) if interaction is not None: + await context.channel.send(embed=embed) + await context.channel.send(file=audio_file) try: - await context.channel.send(embed=embed) - await context.channel.send(file=audio_file) - try: - await interaction.delete_original_response() - except: - pass - except discord.Forbidden: - embed = discord.Embed( - title="Permission Error", - description="The bot needs the `send messages` permission to execute this command.", - color=0xE02B2B, - ) - embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") - await interaction.followup.send(embed=embed, ephemeral=True) - return + await interaction.delete_original_response() + except: + pass else: - try: - await processing_message.delete() - await context.channel.send(embed=embed) - await context.channel.send(file=audio_file) - except discord.Forbidden: - embed = discord.Embed( - title="Permission Error", - description="The bot needs the `send messages` permission to execute this command.", - color=0xE02B2B, - ) - embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") - await context.send(embed=embed, ephemeral=True) - return + await processing_message.delete() + await context.channel.send(embed=embed) + await context.channel.send(file=audio_file) return tts \ No newline at end of file diff --git a/cogs/utilities/codepreview.py b/cogs/utilities/codepreview.py index 91b8057..6681d9d 100644 --- a/cogs/utilities/codepreview.py +++ b/cogs/utilities/codepreview.py @@ -174,13 +174,40 @@ def codepreview_command(): url="GitHub URL to preview code from" ) async def codepreview(self, context, url: str = None): - if not context.guild: + if isinstance(context.channel, discord.DMChannel): embed = discord.Embed( title="Error", - description="Due to reasons ~~gatekeep~~, this command can only be used in servers. Please add this bot to your sever to use it, or use it in a server which has this bot added.", + description="This command can only be used in servers.", color=0xE02B2B, - ).set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") - await send_embed(context, embed, ephemeral=True) + ) + embed.set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") + + interaction = getattr(context, "interaction", None) + if interaction is not None: + if not interaction.response.is_done(): + await interaction.response.send_message(embed=embed, ephemeral=True) + else: + await interaction.followup.send(embed=embed, ephemeral=True) + else: + await context.send(embed=embed, ephemeral=True) + return + + if isinstance(context.channel, discord.PartialMessageable): + embed = discord.Embed( + title="Error", + description="The bot needs the `send messages` permission in this channel.", + color=0xE02B2B, + ) + embed.set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") + + interaction = getattr(context, "interaction", None) + if interaction is not None: + if not interaction.response.is_done(): + await interaction.response.send_message(embed=embed, ephemeral=True) + else: + await interaction.followup.send(embed=embed, ephemeral=True) + else: + await context.send(embed=embed, ephemeral=True) return if not url or not url.strip(): @@ -224,6 +251,29 @@ def codepreview_command(): ).set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") await send_embed(context, embed, ephemeral=True) return + + # Check if bot has send messages permission before starting processing + try: + test_embed = discord.Embed(title="Testing permissions...", color=0x7289DA) + test_embed.set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") + await context.channel.send(embed=test_embed, delete_after=0.1) + except discord.Forbidden: + embed = discord.Embed( + title="Permission Error", + description="The bot needs the `send messages` permission to execute this command.", + color=0xE02B2B, + ) + embed.set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") + + interaction = getattr(context, "interaction", None) + if interaction is not None: + if not interaction.response.is_done(): + await interaction.response.send_message(embed=embed, ephemeral=True) + else: + await interaction.followup.send(embed=embed, ephemeral=True) + else: + await context.send(embed=embed, ephemeral=True) + return parsed = parse_github_url(url)