From 9a4ab97e766d13fdb14ec5260fc6b7ec2711e73e Mon Sep 17 00:00:00 2001 From: sgoudham Date: Sat, 25 Jul 2020 18:49:31 +0100 Subject: [PATCH] Adding group of commands for setting up modlog channels --- cogs/moderation.py | 71 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 55 insertions(+), 16 deletions(-) diff --git a/cogs/moderation.py b/cogs/moderation.py index 87db1787..d3cb49bb 100644 --- a/cogs/moderation.py +++ b/cogs/moderation.py @@ -1,5 +1,6 @@ import asyncio import datetime +from contextlib import closing from datetime import timedelta from typing import Optional @@ -8,13 +9,13 @@ from discord.ext import commands from discord.ext.commands import command, guild_only, has_guild_permissions, bot_has_guild_permissions, Greedy, \ has_permissions, bot_has_permissions, cooldown, BucketType -from settings import enso_embedmod_colours - -# Store guildID's and modlog channel within a cached dictionary -modlogs = {} +import db +from settings import enso_embedmod_colours, get_modlog_for_guild async def kick_members(message, targets, reason): + channel = message.guild.get_channel(get_modlog_for_guild(str(message.guild.id))) + for target in targets: if (message.guild.me.top_role.position > target.top_role.position and not target.guild_permissions.administrator): @@ -33,7 +34,7 @@ async def kick_members(message, targets, reason): for name, value, inline in fields: embed.add_field(name=name, value=value, inline=inline) - return embed + await channel.send(embed=embed) class Moderation(commands.Cog): @@ -46,13 +47,58 @@ class Moderation(commands.Cog): async def on_ready(self): print(f"{self.__class__.__name__} Cog has been loaded\n-----") - @commands.group() + @commands.group(invoke_without_command=True, usage="`[argument...]`") @has_permissions(manage_guild=True) @bot_has_permissions(administrator=True) @cooldown(1, 1, BucketType.user) async def modlogs(self, ctx): + """Setup/Update/Delete Modlogs System""" pass + @modlogs.command() + @has_permissions(manage_guild=True) + @bot_has_permissions(administrator=True) + @cooldown(1, 1, BucketType.user) + async def setup(self, ctx, channelID: int): + """Setup a Channel for the Kick/Ban/Mute Actions to be Logged In""" + + # Retrieve a list of channel id's in the guild + channels = [channel.id for channel in ctx.guild.channels] + + # Checking if the modlogs channel already exists within the database + with db.connection() as conn: + + # Get the row of the guild + select_query = """SELECT * FROM guilds WHERE guildID = (?)""" + val = ctx.author.guild.id, + with closing(conn.cursor()) as cursor: + # Execute the SQL Query + cursor.execute(select_query, val) + result = cursor.fetchone() + + # Throw error if the modlog channel already exists and then stop the function + if result[2] is not None: + await ctx.send("Looks like this guild already has a **Modlogs Channel** set up!" + + f"\nPlease check **{ctx.prefix}help** for information on how to update/delete existing information") + return + + # Abort the process if the channel does not exist within the guild + if channelID not in channels: + await ctx.send("**Invalid ChannelID Detected... Aborting Process**") + + else: + # Checking if the guild already exists within the database + with db.connection() as conn: + # Get the author's row from the Members Table + insert_query = """INSERT INTO guilds (modlogs) VALUES (?)""" + val = channelID, + with closing(conn.cursor()) as cursor: + # Execute the SQL Query + cursor.execute(insert_query, val) + + await ctx.send("Your **Modlogs Channel** is now successfully set up!" + + f"\nPlease refer to **{ctx.prefix}help** for any information") + @command(name="kick", aliases=["Kick"], usage="`` `[reason]`") @guild_only() @has_guild_permissions(kick_members=True) @@ -74,17 +120,10 @@ class Moderation(commands.Cog): # As long as all members are valid else: - # Send embed of the kicked member - embed = await kick_members(ctx.message, members, reason) - message = await ctx.send(embed=embed) - - # Let the user read the message for 10 seconds - await asyncio.sleep(10) - # Delete the message - await message.delete() + await kick_members(ctx.message, members, reason) - @command(name="ban", aliases=["Ban"]) + @command(name="ban", aliases=["Ban"], usage="`` `[reason]`") @guild_only() @has_guild_permissions(ban_members=True) @bot_has_guild_permissions(ban_members=True) @@ -104,7 +143,7 @@ class Moderation(commands.Cog): await ctx.send(f"{ctx.author.name} **banned** {member.name}" f"\n**Reason:** '{reason}'") - @command(name="unban", aliases=["Unban"]) + @command(name="unban", aliases=["Unban"], usage="`` `[reason]`") @guild_only() @has_guild_permissions(ban_members=True) @bot_has_guild_permissions(ban_members=True)