2023-07-15 12:59:55 -04:00
import asyncio
import aiohttp
2023-07-14 11:29:06 -04:00
import discord
2023-07-15 12:59:55 -04:00
import requests
2023-07-15 19:16:11 -04:00
from discord import ui
2023-07-15 23:39:35 -04:00
from discord . ext import commands
2023-07-23 14:04:02 -04:00
from redbot . core import Config , app_commands , commands
2023-07-14 11:04:58 -04:00
class Pterodactyl ( commands . Cog ) :
""" Pterodactyl allows you to manage your Pterodactyl Panel from Discord. """
def __init__ ( self , bot ) :
self . bot = bot
self . config = Config . get_conf ( self , identifier = 457581387213637448123567 )
2023-07-14 11:08:49 -04:00
self . config . register_guild (
2023-07-14 11:17:38 -04:00
base_url = None ,
2023-07-14 11:04:58 -04:00
api_key = None ,
2023-07-15 12:59:55 -04:00
server_id = None ,
startup_jar = None ,
startup_arguments = None
2023-07-14 11:04:58 -04:00
)
2023-07-23 14:04:02 -04:00
self . session : aiohttp . ClientSession = None
2023-07-14 11:04:58 -04:00
2023-07-23 14:04:02 -04:00
async def cog_load ( self ) :
self . session = aiohttp . ClientSession ( )
async def cog_unload ( self ) :
await self . session . close ( )
async def get_headers ( self , guild : discord . Guild ) :
""" Returns the headers used to access the Pterodactyl API. """
if await self . config . guild ( guild ) . api_key ( ) is None :
2023-07-16 13:06:19 -04:00
raise LookupError ( " API Key not set. " )
headers = {
" Authorization " : f " Bearer { await self . config . guild ( guild ) . api_key ( ) } " ,
" Content-Type " : " application/json " ,
" Accept " : " application/json "
}
2023-07-23 14:04:02 -04:00
return headers
2023-07-16 13:06:19 -04:00
2023-07-14 11:29:06 -04:00
async def get_url ( self , guild , endpoint = None ) :
2023-07-15 23:33:33 -04:00
""" Returns the base url for the server ' s API, or the url for a specific API endpoint if one is provided. """
2023-07-14 12:29:59 -04:00
if await self . config . guild ( guild ) . server_id ( ) is None :
2023-07-14 11:04:58 -04:00
raise LookupError ( " Server ID not set. " )
2023-07-14 12:29:59 -04:00
elif await self . config . guild ( guild ) . base_url ( ) is None :
2023-07-14 11:16:03 -04:00
raise LookupError ( " Base URL not set. " )
2023-07-14 11:29:06 -04:00
base_url = await self . config . guild ( guild ) . base_url ( )
server_id = await self . config . guild ( guild ) . server_id ( )
2023-07-15 23:33:33 -04:00
url = f " https:// { base_url } /api/client/servers/ { server_id } "
2023-07-14 11:04:58 -04:00
if endpoint :
2023-07-15 23:33:33 -04:00
url + = ' / ' + endpoint
2023-07-14 11:04:58 -04:00
return url
2023-07-15 12:59:55 -04:00
async def put ( self , url : str , headers : dict , data : dict ) :
""" Sends an asyncio PUT request to the specified URL with the specified headers and data. """
async with aiohttp . ClientSession ( ) as session :
async with session . put ( url , headers = headers , json = data ) as response :
return response
2023-07-16 13:35:17 -04:00
@app_commands.command ( name = " update " , description = " Updates the server. " )
2023-07-16 14:41:16 -04:00
@app_commands.guild_only ( )
2023-07-16 13:35:17 -04:00
async def update ( self , interaction : discord . Interaction ) :
""" Updates the server using the arguments provided in the server ' s configuration. """
2023-07-23 14:04:02 -04:00
session = self . session
2023-07-16 13:35:17 -04:00
await interaction . response . defer ( ephemeral = True , thinking = True )
interaction_message = await interaction . original_response ( )
2023-07-23 12:39:44 -04:00
if await self . config . guild ( interaction . guild ) . startup_jar ( ) is None :
2023-07-16 13:35:17 -04:00
await interaction_message . edit ( f " Something went wrong. \n Error: `Startup jar not set.` " , ephemeral = True )
raise LookupError ( " Startup jar not set. " )
elif await self . config . guild ( interaction . guild ) . startup_arguments ( ) is None :
await interaction_message . edit ( f " Something went wrong. \n Error: `Startup arguments not set.` " , ephemeral = True )
raise LookupError ( " Startup arguments not set. " )
else :
startup_jar = await self . config . guild ( interaction . guild ) . startup_jar ( )
startup_commands = await self . config . guild ( interaction . guild ) . startup_arguments ( )
2023-07-23 14:04:02 -04:00
try :
headers = await self . get_headers ( interaction . guild )
except LookupError as e :
await interaction_message . edit ( f " Something went wrong. \n Error: ` { e } ` " , ephemeral = True )
return
2023-07-23 14:05:03 -04:00
async with session . get ( await self . get_url ( interaction . guild , " resources " ) , headers = headers ) as response :
2023-07-23 14:08:15 -04:00
response_dict = await response . json ( )
2023-07-23 14:05:03 -04:00
async with session . get ( await self . get_url ( interaction . guild , " startup " ) , headers = headers ) as response :
2023-07-23 14:08:15 -04:00
list_var_response_dict = await response . json ( )
2023-07-16 13:35:17 -04:00
updater_startup_vars = [
{
" key " : " FLAGS " ,
" value " : startup_commands
} ,
{
" key " : " SERVER_JARFILE " ,
" value " : startup_jar
}
]
old_startup_vars = [
{
" key " : " FLAGS " ,
" value " : list_var_response_dict [ ' data ' ] [ 4 ] [ ' attributes ' ] [ ' server_value ' ]
} ,
{
" key " : " SERVER_JARFILE " ,
" value " : list_var_response_dict [ ' data ' ] [ 0 ] [ ' attributes ' ] [ ' server_value ' ]
}
]
if response_dict [ ' attributes ' ] [ ' current_state ' ] == " offline " :
for data in updater_startup_vars :
2023-07-23 14:29:07 -04:00
await session . put ( await self . get_url ( interaction . guild , " startup/variable " ) , headers = headers , json = data )
2023-07-23 14:04:02 -04:00
await session . post ( await self . get_url ( interaction . guild , " power " ) , headers = headers , json = { " signal " : " start " } )
2023-07-16 13:35:17 -04:00
await interaction_message . edit ( content = " Updater started... " )
await asyncio . sleep ( 1 )
while True :
2023-07-23 14:04:02 -04:00
async with session . get ( await self . get_url ( interaction . guild , " resources " ) , headers = headers ) as response :
2023-07-23 12:39:44 -04:00
response_dict = await response . json ( )
if response_dict [ ' attributes ' ] [ ' current_state ' ] == " offline " :
await interaction_message . edit ( content = " Updater finished. " )
break
else :
2023-07-23 23:09:34 -04:00
await asyncio . sleep ( 0.5 )
2023-07-23 12:39:44 -04:00
continue
2023-07-16 13:35:17 -04:00
for data in old_startup_vars :
2023-07-23 14:29:07 -04:00
await session . put ( await self . get_url ( interaction . guild , " startup/variable " ) , headers = headers , json = data )
2023-07-16 13:36:48 -04:00
await interaction_message . edit ( content = " Updater finished. \n Update process completed! " )
2023-07-16 13:35:17 -04:00
elif response_dict [ ' attributes ' ] [ ' current_state ' ] == " running " or response_dict [ ' attributes ' ] [ ' current_state ' ] == " starting " :
passed_info = {
2023-07-23 14:04:02 -04:00
" headers " : headers ,
2023-07-16 13:35:17 -04:00
" updater_startup_vars " : updater_startup_vars ,
" old_startup_vars " : old_startup_vars ,
" interaction " : interaction ,
" guild " : interaction . guild ,
}
2023-07-23 12:39:44 -04:00
await interaction_message . edit ( content = " The server is already running! Are you sure you ' d like to stop the server for updates? " , view = self . UpdateButtons ( timeout = 180 , passed_info = passed_info , session = session ) )
2023-07-16 13:35:17 -04:00
2023-07-16 13:25:41 -04:00
power = app_commands . Group ( name = ' power ' , description = " Controls the server ' s power state. " )
@power.command ( name = ' start ' , description = " Starts the server. " )
2023-07-23 12:49:58 -04:00
@app_commands.guild_only ( )
2023-07-16 13:25:41 -04:00
async def start ( self , interaction : discord . Interaction ) :
""" Starts the server. """
2023-07-16 13:34:23 -04:00
await interaction . response . defer ( ephemeral = True , thinking = True )
2023-07-16 13:25:41 -04:00
interaction_message = await interaction . original_response ( )
headers = await self . get_headers ( interaction . guild )
response = requests . get ( await self . get_url ( interaction . guild , " resources " ) , headers = headers )
requests_json = response . json ( )
current_status = requests_json [ ' attributes ' ] [ ' current_state ' ]
if current_status == " offline " :
passed_info = {
" headers " : headers ,
" interaction " : interaction ,
" guild " : interaction . guild ,
" signal " : " start " ,
" target_signal " : " running " ,
" message " : " Server starting... " ,
" completed_message " : " Server started! "
}
await interaction_message . edit ( content = " Are you sure you ' d like to start the server? " , view = self . PowerButtons ( timeout = 180 , passed_info = passed_info ) )
else :
message = await interaction_message . edit ( content = " The server is already running! " )
await message . delete ( delay = 3 )
2023-07-16 13:27:20 -04:00
@power.command ( name = ' restart ' , description = " Restarts the server. " )
2023-07-23 12:49:58 -04:00
@app_commands.guild_only ( )
2023-07-16 13:27:20 -04:00
async def restart ( self , interaction : discord . Interaction ) :
""" Restarts the server. """
2023-07-16 13:34:23 -04:00
await interaction . response . defer ( ephemeral = True , thinking = True )
2023-07-16 13:27:20 -04:00
interaction_message = await interaction . original_response ( )
headers = await self . get_headers ( interaction . guild )
response = requests . get ( await self . get_url ( interaction . guild , " resources " ) , headers = headers )
requests_json = response . json ( )
current_status = requests_json [ ' attributes ' ] [ ' current_state ' ]
if current_status == " running " :
passed_info = {
" headers " : headers ,
" interaction " : interaction ,
" guild " : interaction . guild ,
" signal " : " restart " ,
" target_signal " : " running " ,
" message " : " Server restarting... " ,
" completed_message " : " Server restarted! "
}
await interaction_message . edit ( content = " Are you sure you ' d like to restart the server? " , view = self . PowerButtons ( timeout = 180 , passed_info = passed_info ) )
elif current_status == " offline " :
message = await interaction_message . edit ( content = " The server is offline! " )
await message . delete ( delay = 3 )
elif current_status == " starting " :
message = await interaction_message . edit ( content = " The server is already starting! " )
await message . delete ( delay = 3 )
2023-07-16 13:28:18 -04:00
@power.command ( name = ' stop ' , description = " Stops the server. " )
2023-07-23 12:49:58 -04:00
@app_commands.guild_only ( )
2023-07-16 13:28:18 -04:00
async def stop ( self , interaction : discord . Interaction ) :
""" Stops the server. """
2023-07-16 13:34:23 -04:00
await interaction . response . defer ( ephemeral = True , thinking = True )
2023-07-16 13:28:18 -04:00
interaction_message = await interaction . original_response ( )
headers = await self . get_headers ( interaction . guild )
response = requests . get ( await self . get_url ( interaction . guild , " resources " ) , headers = headers )
requests_json = response . json ( )
current_status = requests_json [ ' attributes ' ] [ ' current_state ' ]
if current_status == " running " or current_status == " starting " :
passed_info = {
" headers " : headers ,
" interaction " : interaction ,
" guild " : interaction . guild ,
" signal " : " stop " ,
" target_signal " : " offline " ,
" message " : " Server stopping... " ,
" completed_message " : " Server stopped! "
}
await interaction_message . edit ( content = " Are you sure you ' d like to stop the server? " , view = self . PowerButtons ( timeout = 180 , passed_info = passed_info ) )
elif current_status == " offline " :
message = await interaction_message . edit ( content = " The server is already offline! " )
await message . delete ( delay = 3 )
2023-07-15 19:16:11 -04:00
class UpdateButtons ( ui . View ) :
2023-07-23 12:39:44 -04:00
def __init__ ( self , timeout , passed_info , session : aiohttp . ClientSession ) :
2023-07-15 12:59:55 -04:00
super ( ) . __init__ ( )
self . passed_info = passed_info
2023-07-23 12:39:44 -04:00
self . session = session
2023-07-16 08:17:56 -04:00
self . config = Config . get_conf ( None , cog_name = ' Pterodactyl ' , identifier = 457581387213637448123567 )
2023-07-15 12:59:55 -04:00
2023-07-15 19:16:11 -04:00
@ui.button ( label = " Yes " , style = discord . ButtonStyle . success )
async def yes_button ( self , button : ui . Button , interaction : discord . Interaction ) :
2023-07-23 12:39:44 -04:00
session = self . session
2023-07-23 14:11:26 -04:00
await session . post ( await Pterodactyl . get_url ( self , self . passed_info [ ' guild ' ] , " power " ) , headers = self . passed_info [ ' headers ' ] , json = { " signal " : " stop " } )
2023-07-16 08:19:55 -04:00
await self . passed_info [ ' interaction ' ] . edit_original_response ( content = " Server stopping... " , view = None )
2023-07-15 18:23:25 -04:00
while True :
2023-07-23 14:04:02 -04:00
async with session . get ( await Pterodactyl . get_url ( self , self . passed_info [ ' guild ' ] , " resources " ) , headers = self . passed_info [ ' headers ' ] ) as response :
2023-07-23 12:39:44 -04:00
response_dict = await response . json ( )
if response_dict [ ' attributes ' ] [ ' current_state ' ] == " offline " :
await self . passed_info [ ' interaction ' ] . edit_original_response ( content = " \n Server stopped! " )
break
else :
2023-07-23 23:09:34 -04:00
await asyncio . sleep ( 0.5 )
2023-07-23 12:39:44 -04:00
continue
2023-07-15 21:03:22 -04:00
for data in self . passed_info [ ' updater_startup_vars ' ] :
2023-07-24 08:45:53 -04:00
await session . put ( url = await Pterodactyl . get_url ( self , self . passed_info [ ' guild ' ] , " startup/variable " ) , headers = self . passed_info [ ' headers ' ] , json = data )
2023-07-23 14:04:02 -04:00
await session . post ( url = await Pterodactyl . get_url ( self , self . passed_info [ ' guild ' ] , " power " ) , headers = self . passed_info [ ' headers ' ] , json = { " signal " : " start " } )
2023-07-16 08:36:00 -04:00
await self . passed_info [ ' interaction ' ] . edit_original_response ( content = " Updater started... " )
2023-07-16 08:30:03 -04:00
await asyncio . sleep ( 2 )
2023-07-15 12:59:55 -04:00
while True :
2023-07-23 14:04:02 -04:00
async with session . get ( await Pterodactyl . get_url ( self , self . passed_info [ ' guild ' ] , " resources " ) , headers = self . passed_info [ ' headers ' ] ) as response :
2023-07-23 12:39:44 -04:00
response_dict = await response . json ( )
if response_dict [ ' attributes ' ] [ ' current_state ' ] == " offline " :
await self . passed_info [ ' interaction ' ] . edit_original_response ( content = " Updater finished! " )
break
else :
await asyncio . sleep ( 1 )
continue
2023-07-15 21:03:22 -04:00
for data in self . passed_info [ ' old_startup_vars ' ] :
2023-07-24 08:45:53 -04:00
await session . put ( await Pterodactyl . get_url ( self , self . passed_info [ ' guild ' ] , " startup/variable " ) , headers = self . passed_info [ ' headers ' ] , json = data )
2023-07-16 08:30:03 -04:00
await asyncio . sleep ( 2 )
2023-07-23 14:04:02 -04:00
await session . post ( url = await Pterodactyl . get_url ( self , self . passed_info [ ' guild ' ] , " power " ) , headers = self . passed_info [ ' headers ' ] , json = { " signal " : " start " } )
2023-07-16 08:19:55 -04:00
await self . passed_info [ ' interaction ' ] . edit_original_response ( content = " Server starting... " )
2023-07-15 12:59:55 -04:00
while True :
2023-07-23 14:04:02 -04:00
async with session . get ( await Pterodactyl . get_url ( self , self . passed_info [ ' guild ' ] , " resources " ) , headers = self . passed_info [ ' headers ' ] ) as response :
2023-07-23 12:39:44 -04:00
response_dict = await response . json ( )
if response_dict [ ' attributes ' ] [ ' current_state ' ] == " running " :
await self . passed_info [ ' interaction ' ] . edit_original_response ( content = " Server started! \n Update process completed! " )
break
else :
2023-07-23 23:09:34 -04:00
await asyncio . sleep ( 0.5 )
2023-07-23 12:39:44 -04:00
continue
2023-07-15 12:59:55 -04:00
2023-07-15 19:16:11 -04:00
@ui.button ( label = " No " , style = discord . ButtonStyle . danger )
async def no_button ( self , button : ui . Button , interaction : discord . Interaction ) :
2023-07-15 23:12:33 -04:00
message = await self . passed_info [ ' interaction ' ] . edit_original_response ( content = f " Command cancelled. " , view = None )
2023-07-15 23:12:47 -04:00
await message . delete ( delay = 3 )
2023-07-15 12:59:55 -04:00
2023-07-16 13:25:31 -04:00
class PowerButtons ( ui . View ) :
def __init__ ( self , timeout , passed_info ) :
super ( ) . __init__ ( )
self . passed_info = passed_info
self . config = Config . get_conf ( None , cog_name = ' Pterodactyl ' , identifier = 457581387213637448123567 )
@ui.button ( label = " Yes " , style = discord . ButtonStyle . success )
async def yes_button ( self , button : ui . Button , interaction : discord . Interaction ) :
headers = self . passed_info [ ' headers ' ]
requests . post ( await Pterodactyl . get_url ( self , self . passed_info [ ' guild ' ] , " power " ) , headers = headers , json = { " signal " : self . passed_info [ ' signal ' ] } )
message = await self . passed_info [ ' interaction ' ] . edit_original_response ( content = self . passed_info [ ' message ' ] , view = None )
while True :
async with aiohttp . ClientSession ( ) as session :
async with session . get ( await Pterodactyl . get_url ( self , self . passed_info [ ' guild ' ] , " resources " ) , headers = headers ) as response :
response_dict = await response . json ( )
if response_dict [ ' attributes ' ] [ ' current_state ' ] == self . passed_info [ ' target_signal ' ] :
await message . edit ( content = self . passed_info [ ' completed_message ' ] )
break
else :
await asyncio . sleep ( 1 )
continue
@ui.button ( label = " No " , style = discord . ButtonStyle . danger )
async def no_button ( self , button : ui . Button , interaction : discord . Interaction ) :
message = await self . passed_info [ ' interaction ' ] . edit_original_response ( content = f " Command cancelled. " , view = None )
await message . delete ( delay = 3 )
2023-07-16 12:52:46 -04:00
get_group = app_commands . Group ( name = ' get ' , description = " Retrieves information from the Pterodactyl API. " )
@get_group.command ( name = ' url ' , description = " Retrieves the URL for the specified endpoint. " )
2023-07-23 12:50:44 -04:00
@app_commands.guild_only ( )
2023-07-16 12:52:46 -04:00
async def retrieve_url ( self , interaction : discord . Interaction , endpoint : str = None ) :
""" Retrieves the URL for the specified endpoint. """
2023-07-14 11:16:03 -04:00
try :
if endpoint :
2023-07-14 11:29:06 -04:00
url = await self . get_url ( interaction . guild , endpoint )
2023-07-14 11:16:03 -04:00
else :
2023-07-14 11:29:06 -04:00
url = await self . get_url ( interaction . guild )
2023-07-14 11:16:03 -04:00
except LookupError as e :
2023-07-14 11:29:06 -04:00
await interaction . response . send_message ( f " Something went wrong. \n Error: ` { e } ` " , ephemeral = True )
2023-07-14 11:16:58 -04:00
return
2023-07-14 11:29:06 -04:00
await interaction . response . send_message ( url , ephemeral = True )
2023-07-14 11:51:46 -04:00
2023-07-15 12:59:55 -04:00
configure = app_commands . Group ( name = " config " , description = " Configures the Pterodactyl cog. " )
2023-07-16 14:25:00 -04:00
@configure.command ( name = " api " , description = " Sets the information used to access the Pterodactyl API. " )
2023-07-23 12:51:10 -04:00
@app_commands.guild_only ( )
2023-07-16 14:25:00 -04:00
async def configure_api ( self , interaction : discord . Interaction ) :
2023-07-15 12:59:55 -04:00
""" Sets the information used to access the Pterdoactyl API. """
await interaction . response . send_modal ( self . APIConfigModal ( self . config ) )
2023-07-16 14:25:00 -04:00
@configure.command ( name = " update " , description = " Sets the startup arguments for the update command. " )
2023-07-23 12:51:10 -04:00
@app_commands.guild_only ( )
2023-07-16 14:25:00 -04:00
async def configure_update ( self , interaction : discord . Interaction ) :
2023-07-15 12:59:55 -04:00
""" Sets the startup arguments for the update command. """
await interaction . response . send_modal ( self . StartupConfigModal ( self . config ) )
2023-07-14 11:51:46 -04:00
2023-07-15 12:59:55 -04:00
class APIConfigModal ( discord . ui . Modal , title = " Pterodactyl Manager Configuration " ) :
2023-07-14 12:27:03 -04:00
def __init__ ( self , config ) :
2023-07-14 12:12:56 -04:00
super ( ) . __init__ ( )
2023-07-14 12:22:28 -04:00
self . config = config
2023-07-14 12:12:56 -04:00
base_url = discord . ui . TextInput (
label = " Base URL " ,
placeholder = " Input your Pterodactyl Panel ' s Base URL here, without HTTPS or HTTP. " ,
style = discord . TextStyle . paragraph ,
required = False ,
max_length = 300
)
api_key = discord . ui . TextInput (
label = " API Key " ,
placeholder = " Input your Pterodactyl Client API Key here. " ,
style = discord . TextStyle . short ,
required = False ,
max_length = 300
)
server_id = discord . ui . TextInput (
label = " Server ID " ,
placeholder = " Input your Pterodactyl server ' s Server ID here. " ,
style = discord . TextStyle . short ,
required = False ,
max_length = 300
)
2023-07-14 11:51:46 -04:00
2023-07-14 12:12:56 -04:00
async def on_submit ( self , interaction : discord . Interaction ) :
message = " "
if self . base_url . value != " " :
2023-07-14 12:32:28 -04:00
await self . config . guild ( interaction . guild ) . base_url . set ( self . base_url . value )
2023-07-15 13:22:10 -04:00
message + = f " - Base URL set to \n - ` { self . base_url . value } ` \n "
2023-07-14 12:12:56 -04:00
if self . api_key . value != " " :
2023-07-14 12:32:28 -04:00
await self . config . guild ( interaction . guild ) . api_key . set ( self . api_key . value )
2023-07-15 13:22:10 -04:00
trimmed_api_key = self . api_key . value [ : 16 ]
message + = f " - API Key set to \n - ` { trimmed_api_key } ` - Trimmed for security \n "
2023-07-14 12:12:56 -04:00
if self . server_id . value != " " :
2023-07-14 12:32:28 -04:00
await self . config . guild ( interaction . guild ) . server_id . set ( self . server_id . value )
2023-07-15 13:22:10 -04:00
message + = f " - Server ID set to \n - ` { self . server_id . value } ` \n "
2023-07-14 12:12:56 -04:00
if message == " " :
2023-07-15 13:22:51 -04:00
trimmed_api_key = str ( await self . config . guild ( interaction . guild ) . api_key ( ) ) [ : 16 ]
2023-07-15 13:22:10 -04:00
send = f " No changes were made. \n Current configuration: \n - Base URL: \n - ` { await self . config . guild ( interaction . guild ) . base_url ( ) } ` \n - API Key: \n - ` { trimmed_api_key } ` - Trimmed for security \n - Server ID: \n - ` { await self . config . guild ( interaction . guild ) . server_id ( ) } ` "
2023-07-15 13:04:03 -04:00
else :
send = f " Configuration changed: \n { message } "
await interaction . response . send_message ( send , ephemeral = True )
2023-07-15 12:59:55 -04:00
class StartupConfigModal ( discord . ui . Modal , title = " Pterodactyl Manager Configuration " ) :
def __init__ ( self , config ) :
super ( ) . __init__ ( )
self . config = config
startup_jar = discord . ui . TextInput (
label = " Startup .jar " ,
placeholder = " Input the name of your updater .jar here. " ,
style = discord . TextStyle . short ,
required = False ,
max_length = 300
)
startup_arguments = discord . ui . TextInput (
label = " Startup Arguments " ,
placeholder = " Input your startup arguments here. \n Example: \n -g -s server https://repository.link/here " ,
style = discord . TextStyle . paragraph ,
required = False ,
max_length = 1000
)
async def on_submit ( self , interaction : discord . Interaction ) :
message = " "
if self . startup_jar . value != " " :
await self . config . guild ( interaction . guild ) . startup_jar . set ( self . startup_jar . value )
2023-07-15 13:22:10 -04:00
message + = f " - Startup jar set to \n - ` { self . startup_jar . value } ` \n "
2023-07-15 12:59:55 -04:00
if self . startup_arguments . value != " " :
await self . config . guild ( interaction . guild ) . startup_arguments . set ( self . startup_arguments . value )
2023-07-15 13:05:33 -04:00
message + = f " - Startup arguments set to: \n ``` { self . startup_arguments . value } ``` \n "
2023-07-15 12:59:55 -04:00
if message == " " :
2023-07-15 13:04:03 -04:00
send = f " No changes were made. \n Current configuration: \n - Startup jar: ` { await self . config . guild ( interaction . guild ) . startup_jar ( ) } ` \n - Startup arguments: \n ``` { await self . config . guild ( interaction . guild ) . startup_arguments ( ) } ``` "
else :
send = f " Configuration changed: \n { message } "
await interaction . response . send_message ( send , ephemeral = True )