import typing from discord import app_commands from discord import Interaction import humanize import lavalink import cogs.music.helper as music_helper from utils.embed import create_embed if typing.TYPE_CHECKING: from bot import TuneBot class InfoCommands(app_commands.Group): def __init__(self, bot: "TuneBot"): super().__init__(name="bot", description="Some extra info") self.bot: "TuneBot" = bot @app_commands.command(name="invite", description="I'd happily join your server") async def invite(self, ctx: Interaction): embed = create_embed(ctx.user) embed.title = "My invite link" embed.description = f"[{self.bot.invite_link}]({self.bot.invite_link})" await ctx.response.send_message(embed=embed) @app_commands.command( name="help", description="In case you cannot find what you want" ) async def about(self, ctx: Interaction): embed = create_embed(ctx.user) info = self.bot.config["info"] embed.title = info["name"] + " help" embed.description = info["description"] 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) await ctx.response.send_message(embed=embed) @app_commands.command( name="stats", description="Some node/server/player information" ) async def wlinfo(self, ctx: Interaction): embed = create_embed(ctx.user) nodes = self.bot.lavalink.node_manager.available_nodes used = humanize.naturalsize(sum([n.stats.memory_used for n in nodes])) total = humanize.naturalsize(sum([n.stats.memory_allocated for n in nodes])) free = humanize.naturalsize(sum([n.stats.memory_free for n in nodes])) cpu = sum([n.stats.cpu_cores for n in nodes]) info = self.bot.config["info"] embed.title = info["name"] + " stats" embed.description = ( f"**Lavalink:** `{lavalink.__version__}`\n\n" f"Connected to `{len(self.bot.lavalink.node_manager.available_nodes)}` nodes.\n" f"`{len(self.bot.lavalink.player_manager.players)}` players are distributed on nodes.\n" f"`{sum([n.stats.players for n in nodes])}` players are distributed on server.\n" f"`{sum([n.stats.playing_players for n in nodes])}` players are playing on server.\n\n" f"Server Memory: `{used}/{total}` | `({free} free)`\n" f"Server CPU: `{cpu}`\n\n" ) await ctx.response.send_message(embed=embed)