1
Fork 0
mirror of https://github.com/wlinator/luminara.git synced 2024-10-02 22:23:13 +00:00
Lumi/modules/moderation/slowmode.py

76 lines
2.4 KiB
Python
Raw Normal View History

2024-08-29 08:48:14 +00:00
import contextlib
import discord
from discord.ext import commands
from lib.const import CONST
from ui.embeds import Builder
class Slowmode(commands.Cog):
def __init__(self, bot: commands.Bot):
self.bot = bot
@commands.command(
name="slowmode",
aliases=["sm"],
usage="slowmode <duration> <channel>",
)
@commands.has_permissions(manage_channels=True)
async def slowmode(
self,
ctx: commands.Context[commands.Bot],
arg1: str,
arg2: str,
) -> None:
# define actual channel & duration
channel: discord.TextChannel | None = None
duration: int | None = None
for arg in (arg1, arg2):
if not channel:
try:
channel = await commands.TextChannelConverter().convert(ctx, arg)
except commands.BadArgument:
with contextlib.suppress(ValueError):
duration = int(arg)
else:
with contextlib.suppress(ValueError):
duration = int(arg)
if not channel:
await ctx.send(CONST.STRINGS["slowmode_channel_not_found"])
return
if duration is None:
await ctx.send(CONST.STRINGS["slowmode_duration_not_found"])
return
if duration < 0 or duration > 21600: # 21600 seconds = 6 hours (Discord's max slowmode)
await ctx.send("Slowmode duration must be between 0 and 21600 seconds.")
return
try:
await channel.edit(slowmode_delay=duration)
embed = Builder.create_embed(
theme="success",
user_name=ctx.author.name,
author_text=CONST.STRINGS["slowmode_author"],
description=CONST.STRINGS["slowmode_success"].format(duration, channel.mention),
footer_text=CONST.STRINGS["slowmode_footer"],
)
except discord.Forbidden:
embed = Builder.create_embed(
theme="error",
user_name=ctx.author.name,
author_text=CONST.STRINGS["slowmode_author"],
description=CONST.STRINGS["slowmode_forbidden"],
footer_text=CONST.STRINGS["slowmode_footer"],
)
await ctx.send(embed=embed)
async def setup(bot: commands.Bot) -> None:
await bot.add_cog(Slowmode(bot))