54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
#include "../../Common.hpp"
|
|
#include "../../Utility/CairoTools.hpp"
|
|
|
|
#include <dpp/cluster.h>
|
|
#include <dpp/dispatcher.h>
|
|
#include <dpp/misc-enum.h>
|
|
#include <string>
|
|
|
|
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); }
|