Update configuration and README for improved setup and security; disable default API and emoji sync, and enhance Discord permission checks in API routes.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
128
bot/cogs/commands/timer.py
Normal file
128
bot/cogs/commands/timer.py
Normal file
@@ -0,0 +1,128 @@
|
||||
# ╔══════════════════════════════════════════════════════════════════╗
|
||||
# ║ ║
|
||||
# ║ ░█▀▀░█▀█░█▀▄░█▀▀░█░█ ░█▀▄░█▀▀░█░█░█▀▀ ║
|
||||
# ║ ░█░░░█░█░█░█░█▀▀░▄▀▄ ░█░█░█▀▀░▀▄▀░▀▀█ ║
|
||||
# ║ ░▀▀▀░▀▀▀░▀▀░░▀▀▀░▀░▀ ░▀▀░░▀▀▀░░▀░░▀▀▀ ║
|
||||
# ║ ║
|
||||
# ║ © 2026 CodeX Devs — All Rights Reserved ║
|
||||
# ║ ║
|
||||
# ║ discord ── https://discord.gg/codexdev ║
|
||||
# ║ youtube ── https://youtube.com/@CodeXDevs ║
|
||||
# ║ github ── https://github.com/RayExo ║
|
||||
# ║ ║
|
||||
# ╚══════════════════════════════════════════════════════════════════╝
|
||||
|
||||
import time
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
import asyncio
|
||||
from utils.Tools import *
|
||||
from datetime import datetime
|
||||
|
||||
class Timer(commands.Cog):
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
@commands.hybrid_command(name="timer", aliases=['tstart'], description="Starts a timer")
|
||||
@blacklist_check()
|
||||
@ignore_check()
|
||||
@commands.cooldown(1, 30, commands.BucketType.user)
|
||||
async def _timer(self, ctx, times, *, title: str = None):
|
||||
if title is None:
|
||||
title = 'Timer'
|
||||
|
||||
try:
|
||||
try:
|
||||
time = int(times)
|
||||
except:
|
||||
convertTimeList = {'s':1, 'm':60, 'h':3600, 'd':86400, 'S':1, 'M':60, 'H':3600, 'D':86400}
|
||||
time = int(times[:-1]) * convertTimeList[times[-1]]
|
||||
if time > 86400:
|
||||
await ctx.send("Timers should not exceed a day in duration.")
|
||||
return
|
||||
if time <= 0:
|
||||
await ctx.send("Timers do not go into negatives.")
|
||||
return
|
||||
if time >= 3600:
|
||||
embed = discord.Embed(
|
||||
title=f'{title}',
|
||||
description=f"**{time//3600}** hours, **{time%3600//60}** minutes, **{time%60}** seconds",
|
||||
color=0xFF0000
|
||||
)
|
||||
embed.set_footer(text=f'Requested by {ctx.author.name}')
|
||||
message = await ctx.send(embed=embed)
|
||||
await message.add_reaction('⏱️')
|
||||
elif time >= 60:
|
||||
embed = discord.Embed(
|
||||
title=f'{title}',
|
||||
description=f"**{time//60}** minutes, **{time%60}** seconds",
|
||||
color=0xFF0000
|
||||
)
|
||||
embed.set_footer(text=f'Requested by {ctx.author.name}')
|
||||
message = await ctx.send(embed=embed)
|
||||
await message.add_reaction('⏱️')
|
||||
elif time < 60:
|
||||
embed = discord.Embed(
|
||||
title=f'{title}',
|
||||
description=f'**{time}** seconds',
|
||||
color=0xFF0000
|
||||
)
|
||||
embed.set_footer(text=f'Requested by {ctx.author.name}')
|
||||
message = await ctx.send(embed=embed)
|
||||
await message.add_reaction('⏱️')
|
||||
while True:
|
||||
try:
|
||||
await asyncio.sleep(6)
|
||||
time -= 6
|
||||
if time >= 3600:
|
||||
embed = discord.Embed(
|
||||
title=f'{title}',
|
||||
description=f"**{time//3600}** hours, **{time%3600//60}** minutes, **{time%60}** seconds",
|
||||
color=0xFF0000
|
||||
)
|
||||
embed.set_footer(text=f'Requested by {ctx.author.name}')
|
||||
await message.edit(embed=embed)
|
||||
elif time >= 60:
|
||||
embed = discord.Embed(
|
||||
title=f'{title}',
|
||||
description=f"**{time//60}** minutes, **{time%60}** seconds",
|
||||
color=0xFF0000
|
||||
)
|
||||
embed.set_footer(text=f'Requested by {ctx.author.name}')
|
||||
await message.edit(embed=embed)
|
||||
elif time < 60:
|
||||
embed = discord.Embed(
|
||||
title=f'{title}',
|
||||
description=f"**{time}** seconds",
|
||||
color=0xFF0000
|
||||
)
|
||||
embed.set_footer(text=f'Requested by {ctx.author.name}')
|
||||
await message.edit(embed=embed)
|
||||
if time <= 0:
|
||||
embed = discord.Embed(
|
||||
title=f'{title}',
|
||||
description='Time is up!',
|
||||
color=0xFF0000
|
||||
)
|
||||
content= ctx.author.mention
|
||||
await message.edit(content=content, embed=embed)
|
||||
m = await ctx.channel.get_message(message.id)
|
||||
list_thingy = []
|
||||
output_list_thingy = []
|
||||
reactants = await m.reactions[0].users().flatten()
|
||||
reactants.pop(reactants.index(self.client.user))
|
||||
for user in reactants:
|
||||
list_thingy.append(user.id)
|
||||
x = '<@!' + str(user.id) + '>'
|
||||
output_list_thingy.append(x)
|
||||
if output_list_thingy != []:
|
||||
final = ', '.join(map(str, output_list_thingy))
|
||||
return await ctx.send(f'The timer for **{title}** has ended!\n{final}')
|
||||
else:
|
||||
return await ctx.send(f'The timer for **{title}** has ended!')
|
||||
except:
|
||||
break
|
||||
except ValueError:
|
||||
await ctx.send(f"Invalid time input.", delete_after=5)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user