diff --git a/cogs/moderation/purge.py b/cogs/moderation/purge.py index bc17fe8..646b761 100644 --- a/cogs/moderation/purge.py +++ b/cogs/moderation/purge.py @@ -1,11 +1,3 @@ -""" -Copyright © Krypton 2019-Present - https://github.com/kkrypt0nn (https://krypton.ninja) -Description: -🐍 A simple template to start to code your own and personalized Discord bot in Python - -Version: 6.4.0 -""" - import discord from discord import app_commands from discord.ext import commands @@ -33,9 +25,11 @@ class Purge(commands.Cog, name="purge"): await context.send("Deleting messages...") purged_messages = await context.channel.purge(limit=amount + 1) embed = discord.Embed( + title="Purge", description=f"**{context.author}** cleared **{len(purged_messages)-1}** messages!", - color=0xBEBEFE, + color=0x7289DA, ) + embed.set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") await context.channel.send(embed=embed) diff --git a/cogs/moderation/warnings.py b/cogs/moderation/warnings.py index 421d8e1..667f6a2 100644 --- a/cogs/moderation/warnings.py +++ b/cogs/moderation/warnings.py @@ -1,11 +1,3 @@ -""" -Copyright © Krypton 2019-Present - https://github.com/kkrypt0nn (https://krypton.ninja) -Description: -🐍 A simple template to start to code your own and personalized Discord bot in Python - -Version: 6.4.0 -""" - import discord from discord import app_commands from discord.ext import commands @@ -16,29 +8,45 @@ class Warnings(commands.Cog, name="warnings"): def __init__(self, bot) -> None: self.bot = bot + async def send_embed(self, context: Context, embed: discord.Embed, *, ephemeral: bool = False) -> None: + interaction = getattr(context, "interaction", None) + if interaction is not None: + if interaction.response.is_done(): + await interaction.followup.send(embed=embed, ephemeral=ephemeral) + else: + await interaction.response.send_message(embed=embed, ephemeral=ephemeral) + else: + await context.send(embed=embed) + @commands.hybrid_group( name="warning", description="Manage warnings of a user on a server.", ) - @commands.has_permissions(manage_messages=True) async def warning(self, context: Context) -> None: """ Manage warnings of a user on a server. :param context: The hybrid command context. """ + if not context.author.guild_permissions.manage_messages: + embed = discord.Embed( + title="Missing Permissions!", + description="You are missing the permission(s) `manage_messages` to execute this command!", + color=0xE02B2B, + ).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") + return await self.send_embed(context, embed, ephemeral=True) + if context.invoked_subcommand is None: embed = discord.Embed( description="Please specify a subcommand.\n\n**Subcommands:**\n`add` - Add a warning to a user.\n`remove` - Remove a warning from a user.\n`list` - List all warnings of a user.", - color=0xE02B2B, + color=0x7289DA, ) - await context.send(embed=embed) + await self.send_embed(context, embed) @warning.command( name="add", description="Adds a warning to a user in the server.", ) - @commands.has_permissions(manage_messages=True) @app_commands.describe( user="The user that should be warned.", reason="The reason why the user should be warned.", @@ -53,6 +61,13 @@ class Warnings(commands.Cog, name="warnings"): :param user: The user that should be warned. :param reason: The reason for the warn. Default is "Not specified". """ + if not context.author.guild_permissions.manage_messages: + embed = discord.Embed( + title="Missing Permissions!", + description="You are missing the permission(s) `manage_messages` to execute this command!", + color=0xE02B2B, + ).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") + return await self.send_embed(context, embed, ephemeral=True) member = context.guild.get_member(user.id) or await context.guild.fetch_member( user.id ) @@ -60,25 +75,32 @@ class Warnings(commands.Cog, name="warnings"): user.id, context.guild.id, context.author.id, reason ) embed = discord.Embed( + title="Warning", description=f"**{member}** was warned by **{context.author}**!\nTotal warns for this user: {total}", - color=0xBEBEFE, + color=0x7289DA, ) + embed.set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") embed.add_field(name="Reason:", value=reason) - await context.send(embed=embed) + await self.send_embed(context, embed) try: - await member.send( - f"You were warned by **{context.author}** in **{context.guild.name}**!\nReason: {reason}" + dm_embed = discord.Embed( + title="Warning", + description=f"You were warned by **{context.author}** in **{context.guild.name}**!\nReason: {reason}", + color=0xE02B2B, ) + dm_embed.set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") + await member.send(embed=dm_embed) except: - await context.send( - f"{member.mention}, you were warned by **{context.author}**!\nReason: {reason}" + fallback = discord.Embed( + description=f"{member.mention}, you were warned by **{context.author}**!\nReason: {reason}", + color=0xE02B2B, ) + await self.send_embed(context, fallback) @warning.command( name="remove", description="Removes a warning from a user in the server.", ) - @commands.has_permissions(manage_messages=True) @app_commands.describe( user="The user that should get their warning removed.", warn_id="The ID of the warning that should be removed.", @@ -93,21 +115,28 @@ class Warnings(commands.Cog, name="warnings"): :param user: The user that should get their warning removed. :param warn_id: The ID of the warning that should be removed. """ + if not context.author.guild_permissions.manage_messages: + embed = discord.Embed( + title="Missing Permissions!", + description="You are missing the permission(s) `manage_messages` to execute this command!", + color=0xE02B2B, + ).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") + return await self.send_embed(context, embed, ephemeral=True) member = context.guild.get_member(user.id) or await context.guild.fetch_member( user.id ) total = await self.bot.database.remove_warn(warn_id, user.id, context.guild.id) embed = discord.Embed( description=f"I've removed the warning **#{warn_id}** from **{member}**!\nTotal warns for this user: {total}", - color=0xBEBEFE, + color=0x7289DA, ) - await context.send(embed=embed) + embed.set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") + await self.send_embed(context, embed) @warning.command( name="list", description="Shows the warnings of a user in the server.", ) - @commands.has_guild_permissions(manage_messages=True) @app_commands.describe(user="The user you want to get the warnings of.") async def warning_list(self, context: Context, user: discord.User) -> None: """ @@ -116,8 +145,16 @@ class Warnings(commands.Cog, name="warnings"): :param context: The hybrid command context. :param user: The user you want to get the warnings of. """ + if not context.author.guild_permissions.manage_messages: + embed = discord.Embed( + title="Missing Permissions!", + description="You are missing the permission(s) `manage_messages` to execute this command!", + color=0xE02B2B, + ).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") + return await self.send_embed(context, embed, ephemeral=True) warnings_list = await self.bot.database.get_warnings(user.id, context.guild.id) - embed = discord.Embed(title=f"Warnings of {user}", color=0xBEBEFE) + embed = discord.Embed(title=f"Warnings of {user}", color=0x7289DA) + embed.set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/8VLDcg.webp") description = "" if len(warnings_list) == 0: description = "This user has no warnings." @@ -125,7 +162,8 @@ class Warnings(commands.Cog, name="warnings"): for warning in warnings_list: description += f"• Warned by <@{warning[2]}>: **{warning[3]}** () - Warn ID #{warning[5]}\n" embed.description = description - await context.send(embed=embed) + await self.send_embed(context, embed) + async def setup(bot) -> None: diff --git a/database/__init__.py b/database/__init__.py index 90efbfe..bc7f757 100644 --- a/database/__init__.py +++ b/database/__init__.py @@ -1,5 +1,5 @@ # Copyright © Krypton 2019-Present - https://github.com/kkrypt0nn/Python-Discord-Bot-Template/blob/main/database/__init__.py -# Used/Edited by neoarz +# Used by neoarz import aiosqlite diff --git a/database/schema.sql b/database/schema.sql index d4068ae..3b75cd6 100644 --- a/database/schema.sql +++ b/database/schema.sql @@ -1,5 +1,5 @@ -- Copyright © Krypton 2019-Present - https://github.com/kkrypt0nn/Python-Discord-Bot-Template/blob/main/database/schema.sql --- Used/Edited by neoarz +-- Used by neoarz CREATE TABLE IF NOT EXISTS `warns` ( `id` int(11) NOT NULL,