#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); }