printer deletion flow with confirmatin

This commit is contained in:
Tabby 2025-10-30 15:10:21 +11:00
parent bc94b521e5
commit c26b350e49
4 changed files with 100 additions and 17 deletions

View file

@ -1,32 +1,108 @@
extends RefCounted extends RefCounted
#func on_ready(main, bot: DiscordBot) -> void: var endangered_printer : String = ""
# pass
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: func on_autocomplete(main, bot: DiscordBot, interaction: DiscordInteraction, options: Array) -> void:
print(options) #print(options)
interaction.respond_autocomplete(Library.printer_choies()) #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 pass
func execute(main, bot: DiscordBot, interaction: DiscordInteraction, options: Array) -> void: func execute(main, bot: DiscordBot, interaction: DiscordInteraction, options: Array) -> void:
print(options) print(options)
var printer_name = options[0].value var printer_name = options[0].value
var printer_exists : bool = false
for printer in Library.save.printers: for printer in Library.save.printers:
if printer.name == printer_name: if printer.name == printer_name:
Library.save.printers.erase(printer) printer_exists = true
endangered_printer = printer.name
#Library.save.printers.erase(printer)
Library.save_data() #Library.save_data()
var response : String = "erased printer: `" + printer_name + "`\n" if not printer_exists:
interaction.reply({
"content" : "unable to find " + printer_name
})
return
var response : String = "Are you sure you want to delete: `" + printer_name + "`?\n"
var embed = Embed.new().set_description(Library.list_printers()) 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({ interaction.reply({
"content": response, "content": response,
"embeds":[embed] "embeds":[embed],
"components":[row],
}) })
pass 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-printer"):
#print("deleting: " + endangered_printer)
for printer in Library.save.printers:
if printer.name == endangered_printer:
Library.save.printers.erase(printer)
Library.save_data()
var embed = Embed.new().set_description(endangered_printer + " has been deleted")
var new_embeds = interaction.message.embeds + [embed]
interaction.update({
"content": interaction.message.content,
"embeds": new_embeds,
"components": []
})
elif(interaction.data.custom_id == "keep-printer"):
endangered_printer = ""
var embed = Embed.new().set_description("cancelled deletion")
var new_embeds = interaction.message.embeds + [embed]
interaction.update({
"content": interaction.message.content,
"embeds": new_embeds,
"components": []
})
var data = ApplicationCommand.new()\ var data = ApplicationCommand.new()\
.set_name("printer-delete")\ .set_name("printer-delete")\

View file

@ -49,3 +49,9 @@ func printer_choies() -> Array[Dictionary]:
for printer : Printer in save.printers: for printer : Printer in save.printers:
printer_names.append(ApplicationCommand.choice(printer.name, printer.name)) printer_names.append(ApplicationCommand.choice(printer.name, printer.name))
return printer_names return printer_names
func printer_choices_string() -> Array[String]:
var printer_names : Array[String] = []
for printer : Printer in save.printers:
printer_names.append(printer.name)
return printer_names

View file

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

16
main.gd
View file

@ -165,13 +165,14 @@ func _register_application_commands(bot, guild_id: String = "") -> void:
#cmd.on_message(self, bot, message, channel, args) #cmd.on_message(self, bot, message, channel, args)
func remove_components_from_interaction(interaction: DiscordInteraction, msg = ":robot: Components have timed out!") -> void: func remove_components_from_interaction(interaction: DiscordInteraction, msg = ":robot: Components have timed out!") -> void:
var embed = Embed.new().set_description(msg) #var embed = Embed.new().set_description(msg)
var new_embeds = interaction.message.embeds + [embed] #var new_embeds = interaction.message.embeds ## + [embed] TODO?
interaction.update({ #interaction.update({
"content": interaction.message.content, #"content": interaction.message.content,
"embeds": new_embeds, #"embeds": new_embeds,
"components": [] #"components": []
}) #})
pass
func _on_interaction_create(bot: DiscordBot, interaction: DiscordInteraction): func _on_interaction_create(bot: DiscordBot, interaction: DiscordInteraction):
# Handle ApplicationCommand # Handle ApplicationCommand
@ -195,6 +196,7 @@ func _on_interaction_create(bot: DiscordBot, interaction: DiscordInteraction):
"ephemeral": true, "ephemeral": true,
"content": ":electric_plug: The requested command was not found." "content": ":electric_plug: The requested command was not found."
}) })
pass
return return
var msg_id = interaction.message.id var msg_id = interaction.message.id