mirror of
https://github.com/neoarz/Syntrel.git
synced 2025-12-25 11:40:12 +01:00
Converted individual moderation command cogs (ban, kick, purge, warnings, archive, hackban, nick) into command factory functions and registered them under a new Moderation GroupCog in cogs/moderation/__init__.py. Updated bot.py and help.py to support the new moderation group and category. This improves organization and enables grouped moderation commands.
124 lines
5.9 KiB
Python
124 lines
5.9 KiB
Python
import discord
|
|
from discord import app_commands
|
|
from discord.ext import commands
|
|
from discord.ext.commands import Context
|
|
|
|
|
|
def kick_command():
|
|
@commands.hybrid_command(
|
|
name="kick",
|
|
description="Kicks a user from the server.",
|
|
)
|
|
@app_commands.describe(
|
|
user="The user that should be kicked.",
|
|
reason="The reason why the user should be kicked.",
|
|
)
|
|
async def kick(
|
|
self, context, user: discord.User, *, reason: str = "Not specified"
|
|
):
|
|
try:
|
|
member = context.guild.get_member(user.id)
|
|
if not member:
|
|
try:
|
|
member = await context.guild.fetch_member(user.id)
|
|
except discord.NotFound:
|
|
embed = discord.Embed(
|
|
title="Error!",
|
|
description="This user is not in the server.",
|
|
color=0xE02B2B,
|
|
).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png")
|
|
await context.send(embed=embed, ephemeral=True)
|
|
return
|
|
|
|
if not context.author.guild_permissions.kick_members and context.author != context.guild.owner:
|
|
embed = discord.Embed(
|
|
title="Missing Permissions!",
|
|
description="You don't have the `Kick Members` permission to use this command.",
|
|
color=0xE02B2B,
|
|
).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png")
|
|
await context.send(embed=embed, ephemeral=True)
|
|
return
|
|
|
|
if member and member.top_role >= context.guild.me.top_role:
|
|
embed = discord.Embed(
|
|
title="Cannot Kick User",
|
|
description="This user has a higher or equal role to me. Make sure my role is above theirs.",
|
|
color=0xE02B2B,
|
|
).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png")
|
|
await context.send(embed=embed, ephemeral=True)
|
|
return
|
|
|
|
if member and context.author != context.guild.owner:
|
|
if member.top_role >= context.author.top_role:
|
|
embed = discord.Embed(
|
|
title="Cannot Kick User",
|
|
description="You cannot kick this user as they have a higher or equal role to you.",
|
|
color=0xE02B2B,
|
|
).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png")
|
|
await context.send(embed=embed, ephemeral=True)
|
|
return
|
|
|
|
try:
|
|
if member:
|
|
try:
|
|
await member.send(
|
|
embed=discord.Embed(
|
|
title="Kick",
|
|
description=f"You were kicked by **{context.author}** from **{context.guild.name}**!\nReason: {reason}",
|
|
color=0xE02B2B,
|
|
).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png")
|
|
|
|
)
|
|
except (discord.Forbidden, discord.HTTPException):
|
|
pass
|
|
|
|
await member.kick(reason=reason)
|
|
|
|
embed = discord.Embed(
|
|
title="Kick",
|
|
description=f"**{user}** was kicked by **{context.author}**!",
|
|
color=0x7289DA,
|
|
).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png")
|
|
embed.add_field(name="Reason:", value=reason)
|
|
|
|
await context.send(embed=embed)
|
|
|
|
except discord.Forbidden:
|
|
embed = discord.Embed(
|
|
title="Error!",
|
|
description="I don't have permission to kick this user. Make sure my role is above theirs.",
|
|
color=0xE02B2B,
|
|
).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png")
|
|
await context.send(embed=embed, ephemeral=True)
|
|
except discord.HTTPException as e:
|
|
if "Cannot kick the owner of a guild" in str(e):
|
|
embed = discord.Embed(
|
|
title="Cannot Kick User",
|
|
description="You cannot kick the server owner.",
|
|
color=0xE02B2B,
|
|
).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png")
|
|
else:
|
|
embed = discord.Embed(
|
|
title="Error!",
|
|
description=f"Discord API error: {str(e)}",
|
|
color=0xE02B2B,
|
|
).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png")
|
|
await context.send(embed=embed, ephemeral=True)
|
|
except Exception as e:
|
|
embed = discord.Embed(
|
|
title="Debug Error!",
|
|
description=f"Error type: {type(e).__name__}\nError message: {str(e)}",
|
|
color=0xE02B2B,
|
|
).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png")
|
|
await context.send(embed=embed, ephemeral=True)
|
|
|
|
except Exception as e:
|
|
embed = discord.Embed(
|
|
title="Error!",
|
|
description="An unexpected error occurred.",
|
|
color=0xE02B2B,
|
|
).set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png")
|
|
await context.send(embed=embed, ephemeral=True)
|
|
|
|
return kick
|