aboutsummaryrefslogblamecommitdiff
path: root/cogs/moderator.py
blob: f9ea9c98ced844415cf15afb4df99d059a205f22 (plain) (tree)
1
2
3
4
5
6
7
8
9








                                                    
                                
                                     

                                           
    
                                  
                                                   
                                     










                                                       
                                  
                                                   
                                               










                                                       
                                  
                                                   
                                   








                                                     
                                                  
                                                   
                                                  













                                                                                                                                                         


                                                   



                                                                                                      















                                                                                                        
                                                             


                                                                           





                                                                                         
 





























                                                                                                     
    

                           
from discord.ext import commands
import discord
import asyncio

class Admin(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.command(aliases=['quit'], hidden=True)
    @commands.has_any_role("Zi")
    async def force_close(self, ctx):
        await ctx.send("Self Destructing!")
        await ctx.bot.close()
    
    @commands.command(hidden=True)
    @commands.has_any_role("Server Moderator","Zi")
    async def unload(self, ctx, ext):
        await ctx.send(f"Unloading {ext}...")
        try:
            self.bot.unload_extension(f'cogs.{ext}')
            await ctx.send(f"{ext} has been unloaded.")
        except commands.ExtensionNotFound:
            await ctx.send(f"{ext} doesn't exist!")
        except commands.ExtensionNotLoaded:
            await ctx.send(f"{ext} is not loaded!")
        except commands.ExtensionFailed:
            await ctx.send(f"{ext} failed to unload!")

    @commands.command(hidden=True)
    @commands.has_any_role("Server Moderator","Zi")
    async def reload(self, ctx, ext: str=None):
        await ctx.send(f"Reloading {ext}...")
        try:
            self.bot.reload_extension(f'cogs.{ext}')
            await ctx.send(f"{ext} has been reloaded.")
        except commands.ExtensionNotFound:
            await ctx.send(f"{ext} doesn't exist!")
        except commands.ExtensionNotLoaded:
            await ctx.send(f"{ext} is not loaded!")
        except commands.ExtensionFailed:
            await ctx.send(f"{ext} failed to reload!")

    @commands.command(hidden=True)
    @commands.has_any_role("Server Moderator","Zi")
    async def load(self, ctx, ext):
        await ctx.send(f"Loading {ext}...")
        try:
            self.bot.load_extension(f"cogs.{ext}")
            await ctx.send(f"{ext} has been loaded.")
        except commands.ExtensionNotFound:
            await ctx.send(f"{ext} doesn't exist!")
        except commands.ExtensionFailed:
            await ctx.send(f"{ext} failed to load!")

    @commands.command(aliases=['cc'], hidden=True)
    @commands.has_any_role("Server Moderator","Zi")
    async def clearchat(self, ctx, numb: int=100):
        deleted_msg = await ctx.message.channel.purge(limit=int(numb)+1, check=None, before=None, after=None, around=None, oldest_first=False, bulk=True)

        msg_num = max(len(deleted_msg) - 1, 0)

        if msg_num == 0:
            resp = "Deleted `0 message` 🙄 "
            # resp = "Deleted `0 message` 🙄  \n (I can't delete messages "\
                      # "older than 2 weeks due to discord limitations)"
        else:
            resp = "Deleted `{} message{}` 👌 ".format(msg_num,
                                                         "" if msg_num <\
                                                            2 else "s")

        await ctx.send(resp)
    
    @commands.command(hidden=True)
    @commands.has_any_role("Server Moderator","Zi")
    async def mute(self, ctx, member: discord.Member=None, reason: str="No Reason", min_muted: int=0):
        if member is None:
            await ctx.send("Please specify the member you want to mute.")
            return
        muted_role = discord.utils.get(member.guild.roles, name="Muted")
        if self.bot.user == member: # Just why would you want to mute him?
            await ctx.send(f'You\'re not allowed to mute ziBot!')
        else:
            if muted_role in member.roles:
                await ctx.send(f'{member.mention} is already muted.')
            else:
                await member.add_roles(muted_role)
                await ctx.send(f'{member.mention} has been muted by {ctx.author.mention} for {reason}!')

        if min_muted > 0:
            await asyncio.sleep(min_muted * 60)
            await member.remove_roles(muted_role)

    @commands.command(hidden=True)
    @commands.has_any_role("Server Moderator","Zi")
    async def unmute(self, ctx, member: discord.Member=None):
        if member is None:
            await ctx.send("Please specify the member you want to unmute.")
            return
        muted_role = discord.utils.get(member.guild.roles, name="Muted")
        if muted_role in member.roles:
            await member.remove_roles(muted_role)
            await ctx.send(f'{member.mention} has been unmuted by {ctx.author.mention}.')
        else:
            await ctx.send(f'{member.mention} is not muted.')

    @commands.command(hidden=True)
    @commands.has_any_role("Server Moderator","Zi")
    async def kick(self, ctx, member: discord.Member=None, reason: str="No Reason"): 
        if member is None:
            await ctx.send("Please specify the member you want to kick.")
            return
        if self.bot.user == member: # Just why would you want to mute him?
            await ctx.send(f'You\'re not allowed to kick ziBot!')
        else:
            await member.send(f'You have been kicked from {ctx.guild.name} for {reason}!')
            await ctx.guild.kick(member, reason=reason)
            await ctx.send(f'{member.mention} has been kicked by {ctx.author.mention} for {reason}!')
    
    @commands.command(hidden=True)
    @commands.has_any_role("Server Moderator","Zi")
    async def ban(self, ctx, member: discord.Member=None, reason: str="No Reason", min_ban: int=0): 
        if member is None:
            await ctx.send("Please specify the member you want to ban.")
            return
        if self.bot.user == member: # Just why would you want to mute him?
            await ctx.send(f'You\'re not allowed to ban ziBot!')
        else:
            await member.send(f'You have been banned from {ctx.guild.name} for {reason}!')
            await ctx.guild.ban(member, reason=reason)
            await ctx.send(f'{member.mention} has been banned by {ctx.author.mention} for {reason}!')
        
        if min_ban > 0:
            await asyncio.sleep(min_ban * 60)
            await ctx.guild.unban(member, reason="timed out")
        # TODO: Make unban command?
    
def setup(bot):
    bot.add_cog(Admin(bot))