spool system redo nearly done

still need to fix unload
This commit is contained in:
Tabby 2025-11-02 00:51:39 +11:00
parent 0ed04fbc93
commit b83ef6b77b
12 changed files with 286 additions and 46 deletions

View file

@ -1,6 +1,6 @@
extends RefCounted
var endangered_spool : String = ""
var endangered_spool : Spool
func on_ready(main, bot: DiscordBot) -> void:
bot.interaction_create.connect(on_interaction_create)
@ -78,37 +78,63 @@ func execute(main, bot: DiscordBot, interaction: DiscordInteraction, options: Ar
spool_editing = spool
if spool_exists and printer_exists:
var printer_has_spool : bool = printer_editing.spool != null
if printer_has_spool:
endangered_spool = printer_editing.spool.name
printer_editing.spool = spool_editing
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()
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 + "` would you like to keep or delete the old spool: `" + endangered_spool + "` ?"
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)
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],
})
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
else:
interaction.reply({
"content" : "Invalid input"
@ -129,10 +155,11 @@ func on_interaction_create(bot: DiscordBot, interaction : DiscordInteraction):
if(interaction.data.custom_id == "delete-oldspool"):
#print("deleting: " + endangered_printer)
for spool in Library.save.spools:
if spool.name == endangered_spool:
if spool == endangered_spool:
Library.save.spools.erase(spool)
Library.save_data()
var embed = Embed.new().set_description(endangered_spool + " has been removed")
var embed = Embed.new().set_description(endangered_spool.name + " has been removed")
endangered_spool = null
var new_embeds = interaction.message.embeds + [embed]
interaction.update({
"content": interaction.message.content,
@ -141,7 +168,7 @@ func on_interaction_create(bot: DiscordBot, interaction : DiscordInteraction):
})
elif(interaction.data.custom_id == "keep-oldspool"):
endangered_spool = ""
endangered_spool = null
var embed = Embed.new().set_description("cancelled removal")
var new_embeds = interaction.message.embeds + [embed]
interaction.update({

View file

@ -65,7 +65,7 @@ func execute(main, bot: DiscordBot, interaction: DiscordInteraction, options: Ar
var data = ApplicationCommand.new()\
.set_name("printer-nozzle")\
.set_description("chnage the nozzle attached to a printer")\
.set_description("change the nozzle attached to a printer")\
.add_option(ApplicationCommand.string_option("name", "the printers name",
{
"required":true,

View file

@ -0,0 +1,81 @@
extends RefCounted
#func on_ready(main, bot: DiscordBot) -> void:
#pass
#
func on_autocomplete(main, bot: DiscordBot, interaction: DiscordInteraction, options: Array) -> void:
#print(options)
#interaction.respond_autocomplete(Library.printer_choies())
# The part of string which the user is typing
var part = options[0].value
#print("received autocomplete: ", part)
# The final Array of choices for the autocomplete response
var result = []
for hint in Library.printer_choices_string():
# If the user hasn't typed anything, add all the hints
if part == "":
result.append(ApplicationCommand.choice(hint, hint))
else:
# If the user has typed some part of string,
# add only those hints which have the part as a substring
if hint.findn(part) > -1:
result.append(ApplicationCommand.choice(hint, hint))
# Limit the number of results to 25 (Discord's limit is 25)
if result.size() > 25:
result = result.slice(0, 24)
# Respond with the results
interaction.respond_autocomplete(result)
pass
func execute(main, bot: DiscordBot, interaction: DiscordInteraction, options: Array) -> void:
print(options)
var printer_name = options[0].value
var new_slots : int = options[1].value
var printer_exists : bool = false
for printer in Library.save.printers:
if printer.name == printer_name:
printer_exists = true
printer.spool_slots = new_slots
#Library.save.printers.erase(printer)
Library.save_data()
if not printer_exists:
interaction.reply({
"content" : "unable to find " + printer_name
})
return
var response : String = printer_name + " now has `" + str(new_slots) + "` spool slots\n"
var embed = Embed.new().set_description(Library.list_printers())
interaction.reply({
"content": response,
"embeds":[embed],
})
pass
var data = ApplicationCommand.new()\
.set_name("printer-slots")\
.set_description("change the amount of spool slots the printer has")\
.add_option(ApplicationCommand.string_option("name", "the printers name",
{
"required":true,
"autocomplete":true,
#"choices" : Library.printer_choies()
}))\
.add_option(ApplicationCommand.integer_option("slots","number of spool slots the printer should have",
{
"required" : true,
}))\
## lesson learnt: option name must not have spaces

View file

@ -0,0 +1 @@
uid://cil50lh15obcb

View file

@ -0,0 +1,98 @@
extends RefCounted
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())
# The part of string which the user is typing
var part = options[0].value
#print("received autocomplete: ", part)
# The final Array of choices for the autocomplete response
var result = []
for hint in Library.printer_choices_string():
# If the user hasn't typed anything, add all the hints
if part == "":
result.append(ApplicationCommand.choice(hint, hint))
else:
# If the user has typed some part of string,
# add only those hints which have the part as a substring
if hint.findn(part) > -1:
result.append(ApplicationCommand.choice(hint, hint))
# Limit the number of results to 25 (Discord's limit is 25)
if result.size() > 25:
result = result.slice(0, 24)
# Respond with the results
interaction.respond_autocomplete(result)
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 : String = ""
for printer in Library.save.printers:
if printer.name == printer_name:
printer_exists = true
spool_name = printer.spool.name
Library.save.spools.append(printer.spool)
printer.spool = null
#Library.save.printers.erase(printer)
#Library.save_data()
if not printer_exists:
interaction.reply({
"content" : "unable to find " + printer_name
})
return
var response : String = "returned `" + spool_name + "` to the library"
#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-printer')
#delete_button.set_label("Yes, delete " + printer_name)
#var keep_button = MessageButton.new().set_style(MessageButton.STYLES.DEFAULT)
#keep_button.set_custom_id('keep-printer')
#keep_button.set_label("No, keep the printer")
#row.add_component(delete_button)
#row.add_component(keep_button)
interaction.reply({
"content": response,
#"embeds":[embed],
#"components":[row],
})
pass
func on_interaction_create(bot: DiscordBot, interaction : DiscordInteraction):
if not interaction.is_button():
return
print(interaction.data.custom_id)
var data = ApplicationCommand.new()\
.set_name("printer-unload")\
.set_description("unload the spool from a printer and return it to the library")\
.add_option(ApplicationCommand.string_option("name", "the printers name",
{
"required":true,
"autocomplete":true,
#"choices" : Library.printer_choies()
}))\

View file

@ -0,0 +1 @@
uid://k8kxljysyux2

View file

@ -13,6 +13,13 @@ func execute(main, bot: DiscordBot, interaction: DiscordInteraction, options: Ar
if options.size() > 1:
spool_link = options[1].value
## some sort of logic to name duplicated spool differently?
#var match_count : int = 0
#for spool : Spool in Library.save.spools:
#if spool.name.find(spool_name):
#match_count += 1
var new_spool : Spool = Spool.new()
new_spool.name = spool_name
if spool_link:

View file

@ -54,7 +54,7 @@ func execute(main, bot: DiscordBot, interaction: DiscordInteraction, options: Ar
return
var response : String = "Are you sure you want to delete: `" + spool_name + "`?\n"
var embed = Embed.new().set_description(Library.list_spools())
var embed = Embed.new().set_description(Library.list_spools(spool_name))
var row = MessageActionRow.new()
var delete_button = MessageButton.new().set_style(MessageButton.STYLES.DANGER)
delete_button.set_custom_id('delete-spool')
@ -83,6 +83,7 @@ func on_interaction_create(bot: DiscordBot, interaction : DiscordInteraction):
for spool in Library.save.spools:
if spool.name == endangered_spool:
Library.save.spools.erase(spool)
break
Library.save_data()
var embed = Embed.new().set_description(endangered_spool + " has been deleted")
var new_embeds = interaction.message.embeds + [embed]