forked from cswimr/SeaCogs
feat(pterodactyl): added a players command
This commit is contained in:
parent
9b0a11a7bc
commit
014025f547
1 changed files with 37 additions and 1 deletions
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue