From 09abd6c1160201f9aede54a4ad06ecdffdaf4539 Mon Sep 17 00:00:00 2001 From: cat Date: Wed, 23 Jul 2025 18:46:39 +0300 Subject: [PATCH] Added component response for generate_report --- languages/locale_en.hpp | 6 ++- src/Commands.cpp | 3 +- .../Components/GenerativeComponents.cpp | 47 +++++++++++++++++++ src/Commands/GenerativeCommands.cpp | 3 +- 4 files changed, 55 insertions(+), 4 deletions(-) diff --git a/languages/locale_en.hpp b/languages/locale_en.hpp index fa610a7..50d8c15 100644 --- a/languages/locale_en.hpp +++ b/languages/locale_en.hpp @@ -24,6 +24,7 @@ "Upload a background image to use (Only supports PNG, JPEG, and WEBP files)" #define COMMAND_GENERATE_REPORT_ARGS_HEADLINE_DESCRIPTION \ "What is the headline?" + #define COMMAND_GENERATE_REPORT_FAIL_NOT_SUPPORTED(filetype) \ "File type: " + filetype + \ " is not supported. Only PNG, JPEG, and WEBP are allowed!" @@ -31,12 +32,13 @@ "Failed to download the background image! Aborting." RESPONSE_NO_CHARGE #define COMMAND_GENERATE_REPORT_FAIL_IMAGE_LOAD \ "Failed to load the background image! Aborting." RESPONSE_NO_CHARGE + #define COMMAND_GENERATE_REPORT_CONFIRMATION_QUESTION(price, imageURL, \ - headline) \ + imageMIME, headline) \ "This image generation will cost you " + price + \ " " CURRENCY_NAME \ "(s).\nAre you sure you want to continue?\nHeadline: " + \ - headline + " [image](" + imageURL + ")" + headline + "\n[" + imageMIME + "](" + imageURL + ")" // Command get_pfp #define COMMAND_GET_PFP_DESCRIPTION \ diff --git a/src/Commands.cpp b/src/Commands.cpp index ce0be66..900cdec 100644 --- a/src/Commands.cpp +++ b/src/Commands.cpp @@ -20,4 +20,5 @@ std::unordered_map> Commands{ {COMMAND_GENERATE_REPORT, commandGenerateReport}}; std::unordered_map> Components{ - {COMPONENT_COMMAND_CANCEL, componentCancel}}; + {COMPONENT_COMMAND_CANCEL, componentCancel}, + {COMPONENT_GENERATE_REPORT_CONFIRM, componentGenerateReport}}; diff --git a/src/Commands/Components/GenerativeComponents.cpp b/src/Commands/Components/GenerativeComponents.cpp index c3f2f81..5a254c4 100644 --- a/src/Commands/Components/GenerativeComponents.cpp +++ b/src/Commands/Components/GenerativeComponents.cpp @@ -1,6 +1,53 @@ #include "../../Common.hpp" #include "../../Utility/CairoTools.hpp" + #include #include +#include +#include + +void componentGenerateReport(COMPONENT_ARGS) { + std::string content = event.command.get_context_message().content; + + // Find headline + size_t start = content.find(": ") + 2; + std::string headline = + content.substr(start, content.find("\n[", start) - start); + + // Find image MIME + start = content.find("[") + 1; + std::string imageType = + content.substr(start, content.find("]", start) - start); + + // Find image link + start = content.find("](") + 2; + std::string url = content.substr(start, content.find(")", start) - start); + + // Handler + auto fileType = supportedImageFileTypes.find(imageType); + bot.request(url, dpp::http_method::m_get, + [event, &bot, headline, + fileType](const dpp::http_request_completion_t &result) { + // We might not be able to download it + if (result.status != 200) { + event.edit_response( + COMMAND_GENERATE_REPORT_FAIL_IMAGE_DOWNLOAD); + return; + } + + // Its possible that file is corrupted + auto imageAsSurface = fileType->second(result.body); + if (imageAsSurface == nullptr) { + event.edit_response(COMMAND_GENERATE_REPORT_FAIL_IMAGE_LOAD); + return; + } + + std::string responseData = + GenerateReportImage(imageAsSurface, headline); + dpp::message response(event.command.channel_id, ""); + response.add_file("report.png", responseData); + event.edit_response(response); + }); +} void componentCancel(COMPONENT_ARGS) { event.edit_response(REQUEST_CANCELLED); } diff --git a/src/Commands/GenerativeCommands.cpp b/src/Commands/GenerativeCommands.cpp index d5df1b3..14c8f4c 100644 --- a/src/Commands/GenerativeCommands.cpp +++ b/src/Commands/GenerativeCommands.cpp @@ -27,7 +27,8 @@ void commandGenerateReport(const dpp::slashcommand_t &event, dpp::message confirmRequest( event.command.channel_id, COMMAND_GENERATE_REPORT_CONFIRMATION_QUESTION( - std::to_string(COMMAND_GENERATE_REPORT_COST), file.url, headline)); + std::to_string(COMMAND_GENERATE_REPORT_COST), file.url, + fileType->first, headline)); confirmRequest.add_component( dpp::component()