60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
#include "../Common.hpp"
|
|
#include "../Utility/CairoTools.hpp"
|
|
|
|
#include <algorithm>
|
|
#include <cctype>
|
|
#include <dpp/dispatcher.h>
|
|
#include <dpp/dpp.h>
|
|
#include <dpp/guild.h>
|
|
#include <dpp/message.h>
|
|
#include <dpp/misc-enum.h>
|
|
#include <dpp/queues.h>
|
|
#include <dpp/snowflake.h>
|
|
#include <dpp/user.h>
|
|
|
|
#include <functional>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
|
|
void commandGenerateReport(const dpp::slashcommand_t &event,
|
|
dpp::cluster &bot) {
|
|
event.thinking();
|
|
dpp::snowflake fileId =
|
|
std::get<dpp::snowflake>(event.get_parameter("image"));
|
|
dpp::attachment file = event.command.get_resolved_attachment(fileId);
|
|
auto fileType = supportedImageFileTypes.find(file.content_type);
|
|
|
|
if (fileType != supportedImageFileTypes.end()) {
|
|
bot.request(
|
|
file.url, dpp::http_method::m_get,
|
|
[event, &bot, fileType](const dpp::http_request_completion_t &result) {
|
|
auto imageAsSurface = fileType->second(result.body);
|
|
if (imageAsSurface == nullptr) {
|
|
event.edit_response(COMMAND_GENERATE_REPORT_FAIL_IMAGE_LOAD);
|
|
return;
|
|
}
|
|
|
|
// Don't forget that its only funny if it is all in upper case
|
|
std::string headline =
|
|
std::get<std::string>(event.get_parameter("headline"));
|
|
|
|
// Never seen this method before but looks awesome
|
|
std::transform(headline.begin(), headline.end(), headline.data(),
|
|
::toupper);
|
|
|
|
std::string responseData =
|
|
GenerateReportImage(imageAsSurface, headline);
|
|
dpp::message response(event.command.channel_id, "");
|
|
response.add_file("report.png", responseData);
|
|
event.edit_response(response);
|
|
});
|
|
} else {
|
|
event.edit_response(
|
|
COMMAND_GENERATE_REPORT_FAIL_NOT_SUPPORTED(file.content_type));
|
|
}
|
|
}
|
|
|
|
//
|
|
// ACTUAL GENERATION STARTS HERE
|
|
//
|