feat(pterodactyl): added a players command
All checks were successful
Actions / Build Documentation (MkDocs) (push) Successful in 27s
Actions / Lint Code (Ruff & Pylint) (push) Successful in 31s

This commit is contained in:
Seaswimmer 2024-03-15 16:22:10 -04:00
parent 9b0a11a7bc
commit 014025f547
Signed by: cswimr
GPG key ID: B8953EC01E5C4063

View file

@ -1,6 +1,6 @@
import asyncio import asyncio
import json import json
from typing import Mapping, Optional, Union from typing import Mapping, Optional, Tuple, Union
import discord import discord
import websockets import websockets
@ -137,6 +137,24 @@ class Pterodactyl(commands.Cog):
command = command.replace('.$' + key, value) command = command.replace('.$' + key, value)
return command return command
async def get_player_list(self) -> Optional[Tuple[str, list]]:
if await config.api_endpoint() == "minecraft":
status, response = await mcsrvstatus.get_status(await config.topic_hostname(), await config.topic_port())
if status and 'list' in response['players']:
output_str = ''
for player in response['players']['list']:
output_str += f"{player['name']}\n"
return output_str, response['players']['list']
return None
async def get_player_list_embed(self, ctx: Union[commands.Context, discord.Interaction]) -> Optional[discord.Embed]:
player_list = await self.get_player_list()
if player_list:
embed = discord.Embed(color=await self.bot.get_embed_color(ctx.channel), title="Players Online")
embed.description = player_list[0]
return embed
return None
async def power(self, ctx: Union[discord.Interaction, commands.Context], action: str, action_ing: str, warning: str = '') -> None: async def power(self, ctx: Union[discord.Interaction, commands.Context], action: str, action_ing: str, warning: str = '') -> None:
if isinstance(ctx, discord.Interaction): if isinstance(ctx, discord.Interaction):
author = ctx.user author = ctx.user
@ -230,6 +248,15 @@ class Pterodactyl(commands.Cog):
The command to send to the server.""" The command to send to the server."""
return await self.send_command(interaction, command) return await self.send_command(interaction, command)
@slash_pterodactyl.command(name = "players", description = "Retrieve a list of players on the server.")
async def slash_pterodactyl_players(self, interaction: discord.Interaction) -> None:
"""Retrieve a list of players on the server."""
e = await self.get_player_list_embed(interaction)
if e:
await interaction.response.send_message(embed=e, ephemeral=True)
else:
await interaction.response.send_message("No players online.", ephemeral=True)
@slash_pterodactyl.command(name = "power", description = "Send power actions to the server.") @slash_pterodactyl.command(name = "power", description = "Send power actions to the server.")
@app_commands.choices(action=[ @app_commands.choices(action=[
Choice(name="Start", value="start"), Choice(name="Start", value="start"),
@ -254,6 +281,15 @@ class Pterodactyl(commands.Cog):
async def pterodactyl(self, ctx: commands.Context) -> None: async def pterodactyl(self, ctx: commands.Context) -> None:
"""Pterodactyl allows you to manage your Pterodactyl Panel from Discord.""" """Pterodactyl allows you to manage your Pterodactyl Panel from Discord."""
@pterodactyl.command(name = "players", aliases=["list", "online", "playerlist", "who"])
async def pterodactyl_players(self, ctx: commands.Context) -> None:
"""Retrieve a list of players on the server."""
e = await self.get_player_list_embed(ctx)
if e:
await ctx.send(embed=e)
else:
await ctx.send("No players online.")
@pterodactyl.command(name = "command", aliases = ["cmd", "execute", "exec"]) @pterodactyl.command(name = "command", aliases = ["cmd", "execute", "exec"])
@commands.admin() @commands.admin()
async def pterodactyl_command(self, ctx: commands.Context, *, command: str) -> None: async def pterodactyl_command(self, ctx: commands.Context, *, command: str) -> None: