2025-10-31 02:15:11 +11:00
extends RefCounted
2025-11-02 00:51:39 +11:00
var endangered_spool : Spool
2025-10-31 02:15:11 +11:00
func on_ready ( main , bot : DiscordBot ) - > void :
bot . interaction_create . connect ( on_interaction_create )
pass
#
func on_autocomplete ( main , bot : DiscordBot , interaction : DiscordInteraction , options : Array ) - > void :
print ( options )
#interaction.respond_autocomplete(Library.printer_choies())
var result = [ ]
# The part of string which the user is typing
var spool_part : String
if options . size ( ) > 1 :
2025-11-02 01:38:37 +11:00
AutocompleteTools . spool_autocomplete ( options [ 1 ] . value , interaction )
2025-10-31 02:15:11 +11:00
else :
2025-11-02 01:38:37 +11:00
AutocompleteTools . printer_autocomplete ( options [ 0 ] . value , interaction )
2025-10-31 02:15:11 +11:00
pass
func execute ( main , bot : DiscordBot , interaction : DiscordInteraction , options : Array ) - > void :
print ( options )
var printer_name = options [ 0 ] . value
var printer_exists : bool = false
var spool_name = options [ 1 ] . value
var spool_exists : bool = false
var printer_editing : Printer
var spool_editing : Spool
for printer in Library . save . printers :
if printer . name == printer_name :
printer_exists = true
printer_editing = printer
#Library.save.printers.erase(printer)
for spool in Library . save . spools :
if spool . name == spool_name :
spool_exists = true
spool_editing = spool
if spool_exists and printer_exists :
2025-11-02 00:51:39 +11:00
if printer_editing . spool_slots < = 1 :
var printer_has_spool : bool = printer_editing . spools . size ( ) > 0
if printer_has_spool :
endangered_spool = printer_editing . spools [ 0 ]
Library . save . spools . append ( endangered_spool )
printer_editing . spools . clear ( )
printer_editing . spools . append ( spool_editing )
Library . save . spools . erase ( spool_editing )
Library . save_data ( )
2025-10-31 02:15:11 +11:00
2025-11-02 00:51:39 +11:00
if printer_has_spool :
#ask the user if they want to delete the old one
var response : String = " Loaded ` " + spool_editing . name + " ` into ` " + printer_editing . name + " ` and unloaded ` " + endangered_spool . name + " ` would you like to keep or delete the old spool: ` " + endangered_spool . name + " ` ? "
var embed = Embed . new ( ) . set_description ( Library . list_printers ( ) )
var row = MessageActionRow . new ( )
var delete_button = MessageButton . new ( ) . set_style ( MessageButton . STYLES . DANGER )
delete_button . set_custom_id ( ' delete-oldspool ' )
delete_button . set_label ( " Yes, delete " + endangered_spool . name )
var keep_button = MessageButton . new ( ) . set_style ( MessageButton . STYLES . DEFAULT )
keep_button . set_custom_id ( ' keep-oldspool ' )
keep_button . set_label ( " No, keep the old spool " )
row . add_component ( delete_button )
row . add_component ( keep_button )
interaction . reply ( {
" content " : response ,
" embeds " : [ embed ] ,
" components " : [ row ] ,
} )
else :
var response : String = " Loaded ` " + spool_editing . name + " ` into ` " + printer_editing . name + " ` "
var embed = Embed . new ( ) . set_description ( Library . list_printers ( ) )
interaction . reply ( {
" content " : response ,
" embeds " : [ embed ] ,
} )
else : #printer has multiple slots, we can only handle it if there are empty slots
if ( printer_editing . spools . size ( ) < printer_editing . spool_slots ) :
printer_editing . spools . append ( spool_editing )
Library . save . spools . erase ( spool_editing )
Library . save_data ( )
var response : String = " Loaded ` " + spool_editing . name + " ` into ` " + printer_editing . name + " ` "
var embed = Embed . new ( ) . set_description ( Library . list_printers ( ) )
interaction . reply ( {
" content " : response ,
" embeds " : [ embed ] ,
} )
else : #its full!!
interaction . reply ( {
" content " : " This printer has multiple slots and they are all full, I don ' t know which one to replace! use `/printer-unload` to unload a spool first " ,
} )
pass
2025-10-31 02:15:11 +11:00
else :
interaction . reply ( {
" content " : " Invalid input "
} )
return
#Library.save_data()
pass
func on_interaction_create ( bot : DiscordBot , interaction : DiscordInteraction ) :
if not interaction . is_button ( ) :
return
print ( interaction . data . custom_id )
if ( interaction . data . custom_id == " delete-oldspool " ) :
#print("deleting: " + endangered_printer)
for spool in Library . save . spools :
2025-11-02 00:51:39 +11:00
if spool == endangered_spool :
2025-10-31 02:15:11 +11:00
Library . save . spools . erase ( spool )
Library . save_data ( )
2025-11-02 00:51:39 +11:00
var embed = Embed . new ( ) . set_description ( endangered_spool . name + " has been removed " )
endangered_spool = null
2025-10-31 02:15:11 +11:00
var new_embeds = interaction . message . embeds + [ embed ]
interaction . update ( {
" content " : interaction . message . content ,
" embeds " : new_embeds ,
" components " : [ ]
} )
elif ( interaction . data . custom_id == " keep-oldspool " ) :
2025-11-02 00:51:39 +11:00
endangered_spool = null
2025-10-31 02:15:11 +11:00
var embed = Embed . new ( ) . set_description ( " cancelled removal " )
var new_embeds = interaction . message . embeds + [ embed ]
interaction . update ( {
" content " : interaction . message . content ,
" embeds " : new_embeds ,
" components " : [ ]
} )
var data = ApplicationCommand . new ( ) \
. set_name ( " printer-load " ) \
. set_description ( " load a new spool of fillament into a printer, optionally deleting the old spool " ) \
. add_option ( ApplicationCommand . string_option ( " printer-name " , " the printer to load " ,
{
" required " : true ,
" autocomplete " : true ,
#"choices" : Library.printer_choies()
} ) ) \
. add_option ( ApplicationCommand . string_option ( " spool-name " , " the spool to load into the printer " ,
{
" required " : true ,
" autocomplete " : true ,
#"choices" : Library.printer_choies()
} ) ) \