From f2c949c78a8b08aa012352f627aecca52aed7f72 Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Sat, 24 May 2025 10:04:24 +0100 Subject: [PATCH] Fix multidrop not handling externally hosted images correctly (#447) - Fix multidrop command not handling externally hosted images correctly - It was trying to find the `https://` link in the file system, which it couldn't find - Fixed by copying existing logic from the drop command into the multidrop command #442 Reviewed-on: https://git.vylpes.xyz/External/card-drop/pulls/447 Reviewed-by: VylpesTester Co-authored-by: Ethan Lane Co-committed-by: Ethan Lane --- src/buttonEvents/Multidrop.ts | 16 ++++++++++++---- src/commands/multidrop.ts | 15 +++++++++++---- tests/buttonEvents/Multidrop.test.ts | 13 +++++++++++++ tests/commands/multidrop.test.ts | 13 +++++++++++++ 4 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 tests/buttonEvents/Multidrop.test.ts create mode 100644 tests/commands/multidrop.test.ts diff --git a/src/buttonEvents/Multidrop.ts b/src/buttonEvents/Multidrop.ts index e6ea7c2..e88d6ef 100644 --- a/src/buttonEvents/Multidrop.ts +++ b/src/buttonEvents/Multidrop.ts @@ -98,10 +98,18 @@ export default class Multidrop extends ButtonEvent { await interaction.deferUpdate(); try { - const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path)); - const imageFileName = randomCard.card.path.split("/").pop()!; + const files = []; + let imageFileName = ""; + + if (!(randomCard.card.path.startsWith("http://") || randomCard.card.path.startsWith("https://"))) { + const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path)); + imageFileName = randomCard.card.path.split("/").pop()!; + + const attachment = new AttachmentBuilder(image, { name: imageFileName }); + + files.push(attachment); + } - const attachment = new AttachmentBuilder(image, { name: imageFileName }); const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, randomCard.card.id); const quantityClaimed = inventory ? inventory.Quantity : 0; @@ -112,7 +120,7 @@ export default class Multidrop extends ButtonEvent { await interaction.editReply({ embeds: [ embed ], - files: [ attachment ], + files: files, components: [ row ], }); } catch (e) { diff --git a/src/commands/multidrop.ts b/src/commands/multidrop.ts index aa42686..82d19fe 100644 --- a/src/commands/multidrop.ts +++ b/src/commands/multidrop.ts @@ -62,10 +62,17 @@ export default class Multidrop extends Command { await interaction.deferReply(); try { - const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path)); - const imageFileName = randomCard.card.path.split("/").pop()!; + const files = []; + let imageFileName = ""; - const attachment = new AttachmentBuilder(image, { name: imageFileName }); + if (!(randomCard.card.path.startsWith("http://") || randomCard.card.path.startsWith("https://"))) { + const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path)); + imageFileName = randomCard.card.path.split("/").pop()!; + + const attachment = new AttachmentBuilder(image, { name: imageFileName }); + + files.push(attachment); + } const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, randomCard.card.id); const quantityClaimed = inventory ? inventory.Quantity : 0; @@ -76,7 +83,7 @@ export default class Multidrop extends Command { await interaction.editReply({ embeds: [ embed ], - files: [ attachment ], + files: files, components: [ row ], }); } catch (e) { diff --git a/tests/buttonEvents/Multidrop.test.ts b/tests/buttonEvents/Multidrop.test.ts new file mode 100644 index 0000000..5c9da42 --- /dev/null +++ b/tests/buttonEvents/Multidrop.test.ts @@ -0,0 +1,13 @@ +describe("execute", () => { + describe("GIVEN randomCard image is hosted locally", () => { + test.todo("EXPECT image to be uploaded directly"); + }); + + describe("GIVEN randomCard image is hosted via http", () => { + test.todo("EXPECT image link to be directly added to embed"); + }); + + describe("GIVEN randomCard image is hosted via https", () => { + test.todo("EXPECT image link to be directly added to embed"); + }); +}); diff --git a/tests/commands/multidrop.test.ts b/tests/commands/multidrop.test.ts new file mode 100644 index 0000000..5c9da42 --- /dev/null +++ b/tests/commands/multidrop.test.ts @@ -0,0 +1,13 @@ +describe("execute", () => { + describe("GIVEN randomCard image is hosted locally", () => { + test.todo("EXPECT image to be uploaded directly"); + }); + + describe("GIVEN randomCard image is hosted via http", () => { + test.todo("EXPECT image link to be directly added to embed"); + }); + + describe("GIVEN randomCard image is hosted via https", () => { + test.todo("EXPECT image link to be directly added to embed"); + }); +});