Adding cooldowns for commands

pull/8/head
sgoudham 4 years ago
parent b6fde08f95
commit 4c3b130e92

@ -1,9 +1,39 @@
import asyncio
import datetime import datetime
from datetime import timedelta from datetime import timedelta
from typing import Optional
from discord import Member from discord import Member, Embed
from discord.ext import commands from discord.ext import commands
from discord.ext.commands import command, guild_only, has_guild_permissions, bot_has_guild_permissions 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 = {}
async def kick_members(message, targets, reason):
for target in targets:
if (message.guild.me.top_role.position > target.top_role.position
and not target.guild_permissions.administrator):
await target.kick(reason=reason)
embed = Embed(title="Member Kicked",
colour=enso_embedmod_colours,
timestamp=datetime.datetime.utcnow())
embed.set_thumbnail(url=target.avatar_url)
fields = [("Member", f"{target.mention}", False),
("Actioned by", message.author.mention, False),
("Reason", reason, False)]
for name, value, inline in fields:
embed.add_field(name=name, value=value, inline=inline)
return embed
class Moderation(commands.Cog): class Moderation(commands.Cog):
@ -16,29 +46,49 @@ class Moderation(commands.Cog):
async def on_ready(self): async def on_ready(self):
print(f"{self.__class__.__name__} Cog has been loaded\n-----") print(f"{self.__class__.__name__} Cog has been loaded\n-----")
@command(name="kick", aliases=["Kick"]) @commands.group()
@has_permissions(manage_guild=True)
@bot_has_permissions(administrator=True)
@cooldown(1, 1, BucketType.user)
async def modlogs(self, ctx):
pass
@command(name="kick", aliases=["Kick"], usage="`<member>` `[reason]`")
@guild_only() @guild_only()
@has_guild_permissions(kick_members=True) @has_guild_permissions(kick_members=True)
@bot_has_guild_permissions(kick_members=True) @bot_has_guild_permissions(kick_members=True)
async def kick(self, ctx, member: Member, *, reason=None): @cooldown(1, 1, BucketType.user)
async def kick_member(self, ctx, members: Greedy[Member], *, reason: Optional[str] = "No Reason Given"):
"""Kick Members from Server""" """Kick Members from Server"""
# Check if reason has been given # Make sure member(s) are entered properly
if reason: if not len(members):
reason = reason message = await ctx.send(
# Set default reason to None f"Not Correct Syntax!"
f"\nUse **{ctx.prefix}help** to find how to use **{ctx.command}**")
# Let the user read the message for 5 seconds
await asyncio.sleep(5)
# Delete the message
await message.delete()
# As long as all members are valid
else: else:
reason = "No Reason Given"
# Kick the user and then give confirmation to the channel # Send embed of the kicked member
await ctx.guild.kick(user=member, reason=reason) embed = await kick_members(ctx.message, members, reason)
await ctx.send(f"{ctx.author.name} **kicked** {member.name}" message = await ctx.send(embed=embed)
f"\n**Reason:** '{reason}'")
# Let the user read the message for 10 seconds
await asyncio.sleep(10)
# Delete the message
await message.delete()
@command(name="ban", aliases=["Ban"]) @command(name="ban", aliases=["Ban"])
@guild_only() @guild_only()
@has_guild_permissions(ban_members=True) @has_guild_permissions(ban_members=True)
@bot_has_guild_permissions(ban_members=True) @bot_has_guild_permissions(ban_members=True)
@cooldown(1, 1, BucketType.user)
async def ban(self, ctx, member: Member, *, reason=None): async def ban(self, ctx, member: Member, *, reason=None):
"""Ban Members from Server""" """Ban Members from Server"""
@ -58,6 +108,7 @@ class Moderation(commands.Cog):
@guild_only() @guild_only()
@has_guild_permissions(ban_members=True) @has_guild_permissions(ban_members=True)
@bot_has_guild_permissions(ban_members=True) @bot_has_guild_permissions(ban_members=True)
@cooldown(1, 1, BucketType.user)
async def unban(self, ctx, member: int, *, reason=None): async def unban(self, ctx, member: int, *, reason=None):
"""Unban Member from Server""" """Unban Member from Server"""
@ -80,6 +131,7 @@ class Moderation(commands.Cog):
@guild_only() @guild_only()
@has_guild_permissions(manage_messages=True) @has_guild_permissions(manage_messages=True)
@bot_has_guild_permissions(manage_messages=True, read_message_history=True) @bot_has_guild_permissions(manage_messages=True, read_message_history=True)
@cooldown(1, 1, BucketType.user)
async def purge(self, ctx, amount: int = None): async def purge(self, ctx, amount: int = None):
"""Purge Messages from Channel """Purge Messages from Channel
(No Amount Will Default to 50 Messages Deleted)""" (No Amount Will Default to 50 Messages Deleted)"""

Loading…
Cancel
Save