feat(pterodactyl): added console channel support
Some checks failed
Actions / Lint Code (Ruff & Pylint) (pull_request) Failing after 21s
Actions / Build Documentation (MkDocs) (pull_request) Successful in 24s

This commit is contained in:
Seaswimmer 2024-02-28 12:43:26 -05:00
parent d9f5d14f40
commit cebc2223d9
Signed by: cswimr
GPG key ID: B8953EC01E5C4063

View file

@ -1,6 +1,7 @@
import json import json
import logging import logging
import discord
import websockets import websockets
from pydactyl import PterodactylClient, exceptions from pydactyl import PterodactylClient, exceptions
from redbot.core import Config, commands from redbot.core import Config, commands
@ -17,6 +18,7 @@ class Pterodactyl(commands.Cog):
base_url=None, base_url=None,
api_key=None, api_key=None,
server_id=None, server_id=None,
console_channel=None,
startup_jar=None, startup_jar=None,
startup_arguments=None, startup_arguments=None,
power_action_in_progress=False power_action_in_progress=False
@ -66,9 +68,14 @@ class Pterodactyl(commands.Cog):
auth_message = json.dumps({"event": "auth", "args": [websocket_credentials['data']['token']]}) auth_message = json.dumps({"event": "auth", "args": [websocket_credentials['data']['token']]})
await websocket.send(auth_message) await websocket.send(auth_message)
self.logger.debug("Authentication message sent") self.logger.debug("Authentication message sent")
if json.loads(message)['event'] == 'auth success': if json.loads(message)['event'] == 'auth success':
self.logger.debug("Authentication successful") self.logger.debug("Authentication successful")
self.logger.debug("Received message: %s", message)
if json.loads(message)['event'] == 'console output' and await self.config.console_channel() is not None:
channel = self.bot.get_channel(await self.config.console_channel)
await channel.send(json.loads(message)['args'][0])
#FIXME - Add pagification for long messages to prevent Discord API errors
except websockets.exceptions.ConnectionClosed as e: except websockets.exceptions.ConnectionClosed as e:
self.logger.debug("WebSocket connection closed: %s", e) self.logger.debug("WebSocket connection closed: %s", e)
websocket_credentials = client.servers.get_websocket(server_id) websocket_credentials = client.servers.get_websocket(server_id)
@ -84,6 +91,11 @@ class Pterodactyl(commands.Cog):
self.task.cancel() self.task.cancel()
await self.client._session.close() # pylint: disable=protected-access await self.client._session.close() # pylint: disable=protected-access
@commands.cog.listener()
async def on_message(self, message: discord.Message):
if message.channel.id == await self.config.console_channel():
self.websocket.send(json.dumps({"event": "send command", "args": [message.content]}))
@commands.group(autohelp = True, name = "pterodactyl", aliases = ["ptero"]) @commands.group(autohelp = True, name = "pterodactyl", aliases = ["ptero"])
async def pterodactyl(self, ctx: commands.Context): async def pterodactyl(self, ctx: commands.Context):
"""Pterodactyl allows you to manage your Pterodactyl Panel from Discord.""" """Pterodactyl allows you to manage your Pterodactyl Panel from Discord."""