from typing import Optional import discord from discord.ext import tasks, commands import time from discord.ext.commands import Context import humanize import datetime import lavalink from bot import ChristmasBot from utils.EmbedGenerator import EmbedGenerator from utils.paginator import HelpPaginator class InformationCog(commands.Cog, name="Information"): def __init__(self, bot: ChristmasBot): self.bot = bot @commands.cooldown(rate=1, per=5, type=commands.BucketType.user) @commands.command(description="PONG!", aliases=["pong"]) async def ping(self, ctx: Context): """Test the latency""" avatar = ctx.author.avatar.with_static_format("jpeg") emoji = discord.utils.get(ctx.bot.emojis, name="loading") start = time.monotonic() msg = await ctx.send( embed=discord.Embed(description=f"{emoji} Calculating ping") ) millis = (time.monotonic() - start) * 1000 heartbeat = ctx.bot.latency * 1000 embed = discord.Embed(color=discord.Color.blue()) embed.add_field( name=":heartbeat: Heartbeat", value=f"`{heartbeat:,.2f}ms`", inline=True ) embed.add_field( name=":file_cabinet: ACK", value=f"`{millis:,.2f}ms`", inline=True ) embed.set_footer(text=f"Requested by: {ctx.author}", icon_url=f"{avatar}") await msg.edit(embed=embed) @commands.command( name="invite", description="Gets the invite link!", slash_commands=True ) @commands.cooldown(rate=1, per=5, type=commands.BucketType.user) async def invite(self, ctx: Context): """Gets the invite link!""" await EmbedGenerator.Message( ctx, "Add our bot to your server:", self.bot.invite_link ) @commands.command( name="wlinfo", description="Retrieve various Node/Server/Player information.", slash_commands=True, ) @commands.cooldown(rate=1, per=5, type=commands.BucketType.user) async def wlinfo(self, ctx: Context): """Retrieve various Node/Server/Player information.""" player = self.bot.lavalink.player_manager.get(ctx.guild.id) node = player.node used = humanize.naturalsize(node.stats.memory_used) total = humanize.naturalsize(node.stats.memory_allocated) free = humanize.naturalsize(node.stats.memory_free) cpu = node.stats.cpu_cores fmt = ( f"**WaveLink:** `{lavalink.__version__}`\n\n" f"Connected to `{len(self.bot.lavalink.nodes)}` nodes.\n" f"Best available Node `{self.bot.lavalink.get_best_node().__repr__()}`\n" f"`{len(self.bot.lavalink.players)}` players are distributed on nodes.\n" f"`{node.stats.players}` players are distributed on server.\n" f"`{node.stats.playing_players}` players are playing on server.\n\n" f"Server Memory: `{used}/{total}` | `({free} free)`\n" f"Server CPU: `{cpu}`\n\n" f"Server Uptime: `{datetime.timedelta(milliseconds=node.stats.uptime)}`" ) await ctx.send(fmt) from utils import database database.AutoJoin.get_channels() @commands.command(name="help", aliases=["about", "info"], slash_command=True) @commands.cooldown(1, 1, commands.BucketType.user) async def about( self, ctx: Context, command: Optional[str] = commands.Option( description="Show help for a command or category" ), ): """ChristmasBot command list""" if command: entity = self.bot.get_cog(command) or self.bot.get_command(command) if entity is None: clean = command.replace("@", "@\u200b") return await ctx.send(f'Command or category "{clean}" not found.') elif isinstance(entity, discord.ext.commands.Command): p = await HelpPaginator.from_command(ctx, entity) else: p = await HelpPaginator.from_cog(ctx, entity) return await p.paginate() info = self.bot.config["info"] title = info["name"] + " Help" descr = info["description"] color = self.bot.colors["embed"] embed = discord.Embed(color=color, title=title, description=descr) display_cogs = { "Information": ":information_source:", "Music": ":musical_note:", "Settings": ":gear:", } for cog_name, cog_icon in display_cogs.items(): cog = self.bot.cogs.get(cog_name) if not cog: continue cogname_str = f"{cog_icon} {cog_name}" commands = [f"`{cmd.name}`" for cmd in cog.get_commands() if not cmd.hidden] commands_str = ", ".join(commands) embed.add_field(name=cogname_str, value=commands_str, inline=False) avatar = ctx.author.avatar.with_static_format("jpeg") embed.set_footer(text=f"Requested by: {ctx.author}", icon_url=avatar) await ctx.send(embed=embed) def setup(bot: ChristmasBot): bot.remove_command("help") bot.add_cog(InformationCog(bot))