diff --git a/bot.py b/bot.py index 5c22332..1fac2f1 100644 --- a/bot.py +++ b/bot.py @@ -4,6 +4,7 @@ import os import platform import random import sys +import time import aiosqlite import discord @@ -125,6 +126,7 @@ class DiscordBot(commands.Bot): self.database = None self.bot_prefix = os.getenv("PREFIX") self.invite_link = os.getenv("INVITE_LINK") + self.start_time = time.time() async def init_db(self) -> None: async with aiosqlite.connect( @@ -225,6 +227,22 @@ class DiscordBot(commands.Bot): ) ) + def get_uptime(self) -> str: + uptime_seconds = int(time.time() - self.start_time) + days = uptime_seconds // 86400 + hours = (uptime_seconds % 86400) // 3600 + minutes = (uptime_seconds % 3600) // 60 + seconds = uptime_seconds % 60 + + if days > 0: + return f"{days}d {hours}h {minutes}m {seconds}s" + elif hours > 0: + return f"{hours}h {minutes}m {seconds}s" + elif minutes > 0: + return f"{minutes}m {seconds}s" + else: + return f"{seconds}s" + async def on_message(self, message: discord.Message) -> None: """ The code in this event is executed every time someone sends a message, with or without the prefix diff --git a/cogs/general/help.py b/cogs/general/help.py index caf2c87..ed5dbdc 100644 --- a/cogs/general/help.py +++ b/cogs/general/help.py @@ -41,6 +41,7 @@ class Help(commands.Cog, name="help"): "serverinfo": "general", "ping": "general", "feedback": "general", + "uptime": "general", # "context_menus": "general", # Fun Commands diff --git a/cogs/general/uptime.py b/cogs/general/uptime.py new file mode 100644 index 0000000..654bd3b --- /dev/null +++ b/cogs/general/uptime.py @@ -0,0 +1,54 @@ +import discord +from discord.ext import commands +from discord.ext.commands import Context + + +class UptimeView(discord.ui.View): + def __init__(self, bot): + super().__init__(timeout=300) + self.bot = bot + + @discord.ui.button(emoji="<:RefreshEmoji:1418934990770802891>", style=discord.ButtonStyle.primary) + async def refresh_button(self, interaction: discord.Interaction, button: discord.ui.Button): + embed = discord.Embed( + title="Bot Uptime", + description=f"The bot has been running for {self.bot.get_uptime()}", + color=0x7289DA, + ) + embed.set_author(name="Uptime", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") + await interaction.response.edit_message(embed=embed, view=self) + + +class Uptime(commands.Cog, name="uptime"): + def __init__(self, bot) -> None: + self.bot = bot + + @commands.hybrid_command( + name="uptime", + description="Check how long the bot has been running.", + ) + async def uptime(self, context: Context) -> None: + """ + Check how long the bot has been running. + + :param context: The hybrid command context. + """ + embed = discord.Embed( + title="Bot Uptime", + description=f"The bot has been running for **{self.bot.get_uptime()}**", + color=0x7289DA, + ) + embed.set_author(name="Uptime", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") + view = UptimeView(self.bot) + if getattr(context, "interaction", None): + inter = context.interaction + if not inter.response.is_done(): + await inter.response.send_message(embed=embed, view=view, ephemeral=True) + else: + await inter.followup.send(embed=embed, view=view, ephemeral=True) + else: + await context.send(embed=embed, view=view) + + +async def setup(bot) -> None: + await bot.add_cog(Uptime(bot))