Made ban command better (Multiple people can be banned at once)

Sending bans to logs if modlogs channel has been setup
Error messages don't disappear anymore and are now embedded
Updating Commentary
pull/8/head
sgoudham 4 years ago
parent 2166543eab
commit d309dc6d70

@ -1,4 +1,3 @@
import asyncio
import datetime import datetime
from datetime import timedelta from datetime import timedelta
from typing import Optional from typing import Optional
@ -12,6 +11,51 @@ from db import connection
from settings import enso_embedmod_colours, get_modlog_for_guild, storage_modlog_for_guild, remove_modlog_channel from settings import enso_embedmod_colours, get_modlog_for_guild, storage_modlog_for_guild, remove_modlog_channel
async def ban_members(message, targets, reason):
"""
Method to allow members to be banned
If no channel has been detected in the cache, it will send the embed
to the current channel that the user is in
"""
# Get the channel of the modlog within the guild
modlog = get_modlog_for_guild(str(message.guild.id))
if modlog is None:
channel = message.channel
else:
channel = message.guild.get_channel(int(modlog))
# With every member, ban them and send an embed confirming the ban
# The embed will either be sent to the current channel or the modlogs channel
for target in targets:
if (message.guild.me.top_role.position > target.top_role.position
and not target.guild_permissions.administrator):
await target.ban(reason=reason)
embed = Embed(title="Member Banned",
colour=enso_embedmod_colours,
timestamp=datetime.datetime.utcnow())
embed.set_thumbnail(url=target.avatar_url)
fields = [("Member", 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)
await channel.send(embed=embed)
# Send error message if the User could not be banned
else:
embed = Embed(description="**User {} could not be Banned!**".format(target.mention))
await message.channel.send(embed=embed)
async def kick_members(message, targets, reason): async def kick_members(message, targets, reason):
""" """
@ -42,7 +86,7 @@ async def kick_members(message, targets, reason):
embed.set_thumbnail(url=target.avatar_url) embed.set_thumbnail(url=target.avatar_url)
fields = [("Member", f"{target.mention}", False), fields = [("Member", target.mention, False),
("Actioned by", message.author.mention, False), ("Actioned by", message.author.mention, False),
("Reason", reason, False)] ("Reason", reason, False)]
@ -53,7 +97,8 @@ async def kick_members(message, targets, reason):
# Send error message if the User could not be kicked # Send error message if the User could not be kicked
else: else:
await message.channel.send("**User {} could not be Kicked!**".format(target.mention)) embed = Embed(description="**User {} could not be Kicked!**".format(target.mention))
await message.channel.send(embed=embed)
class Moderation(Cog): class Moderation(Cog):
@ -210,39 +255,36 @@ class Moderation(Cog):
# When no members are entered. Throw an error # When no members are entered. Throw an error
if not len(members): if not len(members):
message = await ctx.send( embed = Embed(description="Not Correct Syntax!"
f"Not Correct Syntax!" "\nUse **{}help** to find how to use **{}**".format(ctx.prefix, ctx.command))
f"\nUse **{ctx.prefix}help** to find how to use **{ctx.command}**") await ctx.send(embed=embed)
# 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 # As long as all members are valid
else: else:
# Send embed of the kicked member # Send embed of the kicked member
await kick_members(ctx.message, members, reason) await kick_members(ctx.message, members, reason)
@command(name="ban", aliases=["Ban"], usage="`<member>` `[reason]`") @command(name="ban", aliases=["Ban"], usage="`<member>...` `[reason]`")
@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) @cooldown(1, 1, BucketType.user)
async def ban(self, ctx, member: Member, *, reason=None): async def ban(self, ctx, members: Greedy[Member], *, reason: Optional[str] = "No reason provided."):
"""Ban Members from Server""" """
Ban Member(s) from Server
Multiple Members can be banned at once
"""
# Check if reason has been given # When no members are entered. Throw an error
if reason: if not len(members):
reason = reason embed = Embed(description="Not Correct Syntax!"
# Set default reason to None "\nUse **{}help** to find how to use **{}**".format(ctx.prefix, ctx.command))
else: await ctx.send(embed=embed)
reason = "No Reason Given"
# Ban the user and send confirmation to the channel # As long as all members are valid
await ctx.guild.ban(user=member, reason=reason) else:
await ctx.send(f"{ctx.author.name} **banned** {member.name}" # Send embed of the Banned member
f"\n**Reason:** '{reason}'") await ban_members(ctx.message, members, reason)
@command(name="unban", aliases=["Unban"], usage="`<member>` `[reason]`") @command(name="unban", aliases=["Unban"], usage="`<member>` `[reason]`")
@guild_only() @guild_only()
@ -305,7 +347,7 @@ class Moderation(Cog):
@Cog.listener() @Cog.listener()
async def on_raw_bulk_message_delete(self, payload): async def on_raw_bulk_message_delete(self, payload):
"""Sending Bulk Deleted Messages to Modlogs Channel""" """Logging Bulk Message Deletion from Server"""
# Get the guild within the cache # Get the guild within the cache
guild = get_modlog_for_guild(str(payload.guild_id)) guild = get_modlog_for_guild(str(payload.guild_id))
@ -332,7 +374,7 @@ class Moderation(Cog):
@Cog.listener() @Cog.listener()
async def on_member_remove(self, member): async def on_member_remove(self, member):
"""Sending Members that have left to Modlogs Channel""" """Log Member Leaves from Server"""
# Get the guild within the cache # Get the guild within the cache
guild = get_modlog_for_guild(str(member.guild.id)) guild = get_modlog_for_guild(str(member.guild.id))
@ -357,7 +399,7 @@ class Moderation(Cog):
@Cog.listener() @Cog.listener()
async def on_member_join(self, member): async def on_member_join(self, member):
"""Sending Members that have joined to the Modlogs Channel""" """Log Member Joins to Server"""
# Get the guild within the cache # Get the guild within the cache
guild = get_modlog_for_guild(str(member.guild.id)) guild = get_modlog_for_guild(str(member.guild.id))

Loading…
Cancel
Save