blob: 06a03b06c0728b9bb30bf4652d67e2f43f5e331b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#include <dpp/dpp.h>
#include <string>
#include "../include/utils.hpp"
#include "../include/server.cpp"
int main(int argc, char *argv[])
{
if (argc > 1)
{
std::string token = argv[1];
setenv("BOT_TOKEN", token.c_str(), 1);
}
const std::string BOT_TOKEN = getenv("BOT_TOKEN");
dpp::cluster bot(BOT_TOKEN);
std::unique_ptr<UnixSocketServer> server;
std::unique_ptr<nlohmann::json> json_data = std::make_unique<nlohmann::json>();
bot.on_log(dpp::utility::cout_logger());
bot.on_slashcommand([&json_data](const dpp::slashcommand_t &event)
{
// let's generate the key-value map
std::unordered_map<std::string, std::string> key_values = app::generate_key_values(event);
// let's create a string to send
std::string response = "Interaction found, but no response found.";
// let's first check if it's a command or not.
if(event.command.get_command_name() != ""){
// let's check if the command is in the json_data
// display json_data as string in the console
if (json_data->contains(event.command.get_command_name()))
{
// let's check if it does exist
std::cout << "Command found: " << event.command.get_command_name() << std::endl;
auto command_data = json_data->at(event.command.get_command_name());
if (command_data.contains("response"))
{
std::cout << "Response found: " << command_data.at("response") << std::endl;
response = command_data.at("response");
}else
{
// let's display the command data
std::cout << "Command data: " << command_data.dump(4) << std::endl;
std::cout << "No response found for command: " << event.command.get_command_name() << std::endl;
}
}
}
event.reply(app::update_string(response, key_values));
});
bot.on_ready([&bot, &server, &json_data](const dpp::ready_t &event)
{
if (dpp::run_once<struct register_bot_commands>())
{
// let's start the server
std::string socket_path = "/tmp/" + bot.me.id.str() + ".sock";
server = std::make_unique<UnixSocketServer>(socket_path); // Création explicite
server->start([&json_data, &server](const std::string& msg)
{
// Traitement du message reçu
nlohmann::json j = app::json_from_string(msg);
if (j.contains("command"))
{
std::string command = j["command"];
// ... [traitement de la commande]
if (command == "update")
{
// ... [traitement de la commande update]
json_data = std::make_unique<nlohmann::json>(j["data"]);
}
else if (command == "stop")
{
server->stop();
std::cout << "Server stopped." << std::endl;
exit(0);
}
// ... [gestion des messages entrants]
}
});
}
});
bot.start(dpp::st_wait);
}
|