mirror of
https://gitlab.com/niansa/SomeBot.git
synced 2025-03-06 20:48:26 +01:00
Refactored levels commands
This commit is contained in:
parent
49888a7afd
commit
5ff93aceef
2 changed files with 65 additions and 68 deletions
|
@ -15,7 +15,7 @@ class Levels {
|
|||
<< std::to_string(user_id);
|
||||
}
|
||||
void db_add_guild(dpp::snowflake guild_id) {
|
||||
bot->db << "INSERT OR IGNORE INTO levels_guild_settings (id, enabled, embed, speed) VALUES (?, FALSE, TRUE, 1);"
|
||||
bot->db << "INSERT OR IGNORE INTO levels_guild_settings (id, enabled, embed, speed, color) VALUES (?, FALSE, TRUE, 1, 16711680);"
|
||||
<< std::to_string(guild_id);
|
||||
}
|
||||
|
||||
|
@ -39,12 +39,12 @@ class Levels {
|
|||
<< std::to_string(user_id);
|
||||
}
|
||||
|
||||
std::tuple<bool, bool, double> get_guild_data(dpp::snowflake guild_id) {
|
||||
std::tuple<unsigned, unsigned, double> fres = {0, 1, 0.0};
|
||||
bot->db << "SELECT enabled, embed, speed FROM levels_guild_settings "
|
||||
std::tuple<bool, bool, double, unsigned> get_guild_data(dpp::snowflake guild_id) {
|
||||
std::tuple<unsigned, unsigned, double, unsigned> fres;
|
||||
bot->db << "SELECT enabled, embed, speed, color FROM levels_guild_settings "
|
||||
"WHERE id = ?;"
|
||||
<< std::to_string(guild_id)
|
||||
>> std::tie(std::get<0>(fres), std::get<1>(fres), std::get<2>(fres));
|
||||
>> std::tie(std::get<0>(fres), std::get<1>(fres), std::get<2>(fres), std::get<3>(fres));
|
||||
return fres;
|
||||
}
|
||||
void set_guild_data(dpp::snowflake guild_id, bool enabled, double speed) {
|
||||
|
@ -56,29 +56,8 @@ class Levels {
|
|||
<< speed
|
||||
<< std::to_string(guild_id);
|
||||
}
|
||||
void set_guild_enabled(dpp::snowflake guild_id, bool enabled) {
|
||||
bot->db << "UPDATE levels_guild_settings "
|
||||
"SET enabled = ? "
|
||||
"WHERE id = ?;"
|
||||
<< enabled
|
||||
<< std::to_string(guild_id);
|
||||
}
|
||||
void set_guild_embed(dpp::snowflake guild_id, bool enabled) {
|
||||
bot->db << "UPDATE levels_guild_settings "
|
||||
"SET embed = ? "
|
||||
"WHERE id = ?;"
|
||||
<< enabled
|
||||
<< std::to_string(guild_id);
|
||||
}
|
||||
void set_guild_speed(dpp::snowflake guild_id, double speed) {
|
||||
bot->db << "UPDATE levels_guild_settings "
|
||||
"SET speed = ? "
|
||||
"WHERE id = ?;"
|
||||
<< speed
|
||||
<< std::to_string(guild_id);
|
||||
}
|
||||
|
||||
dpp::message get_level_info_message(dpp::snowflake guild_id, dpp::snowflake target_id, bool target_is_sender, bool embed_enabled) {
|
||||
dpp::message get_level_info_message(dpp::snowflake guild_id, dpp::snowflake target_id, bool target_is_sender, bool embed_enabled, unsigned color = 0xff0000) {
|
||||
// Get level and XP
|
||||
db_add_user(guild_id, target_id);
|
||||
auto [level, xp] = get_user_data(guild_id, target_id);
|
||||
|
@ -115,6 +94,7 @@ public:
|
|||
" enabled INTEGER,"
|
||||
" embed INTEGER,"
|
||||
" speed REAL,"
|
||||
" color INTEGER,"
|
||||
" UNIQUE(id)"
|
||||
");";
|
||||
bot->db << "CREATE TABLE IF NOT EXISTS levels_guild_roles ("
|
||||
|
@ -134,7 +114,7 @@ public:
|
|||
bot->add_chatcommand(Bot::ChatCommand({"current_level", "level"}, "Zeigt dein Level an (oder das von jemand anderem)", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_user, "target", "Benutzer dessen Level du sehen möchtest", false))), [&](const dpp::slashcommand_t& event) {
|
||||
// Get guild settings
|
||||
db_add_guild(event.command.guild_id);
|
||||
auto [enabled, embed_enabled, speed] = get_guild_data(event.command.guild_id);
|
||||
auto [enabled, embed_enabled, speed, color] = get_guild_data(event.command.guild_id);
|
||||
// Make sure levels are enabled here
|
||||
if (!enabled) {
|
||||
event.reply(dpp::message("Dieser Server hat keine Levels aktiviert.").set_flags(dpp::message_flags::m_ephemeral));
|
||||
|
@ -159,7 +139,7 @@ public:
|
|||
bot->add_chatcommand(Bot::ChatCommand({"levels_leaderboard", "levels_bestenliste"}, "Zeigt die Level-Bestenliste dieses Servers an"), [&](const dpp::slashcommand_t& event) {
|
||||
// Get guild settings
|
||||
db_add_guild(event.command.guild_id);
|
||||
auto [enabled, embed_enabled, speed] = get_guild_data(event.command.guild_id);
|
||||
auto [enabled, embed_enabled, speed, color] = get_guild_data(event.command.guild_id);
|
||||
// Make sure levels are enabled here
|
||||
if (!enabled) {
|
||||
event.reply(dpp::message("Dieser Server hat keine Levels aktiviert.").set_flags(dpp::message_flags::m_ephemeral));
|
||||
|
@ -181,11 +161,12 @@ public:
|
|||
// Create embed
|
||||
dpp::embed embed;
|
||||
embed.set_title("Bestenliste")
|
||||
.set_description(std::move(leaderboard_str).str());
|
||||
.set_description(std::move(leaderboard_str).str())
|
||||
.set_color(color);
|
||||
// Send result
|
||||
event.reply(dpp::message().add_embed(embed));
|
||||
});
|
||||
bot->add_chatcommand(Bot::ChatCommand({"levels_set_enabled", "levels_aktivieren"}, "Stelle ein ob Levels aktiviert sein sollen", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_boolean, "enabled", "Ob Levels aktiviert sein sollen", true))), [&](const dpp::slashcommand_t& event) {
|
||||
bot->add_chatcommand(Bot::ChatCommand({"levels_settings", "levels_einstellungen"}, "Konfiguiere Levels", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_boolean, "enabled", "Ob Levels aktiviert sein sollen", false)).add_option(dpp::command_option(dpp::command_option_type::co_boolean, "embed", "Ob Levels Embeds verwenden sollen", false)).add_option(dpp::command_option(dpp::command_option_type::co_string, "color", "Embed-Farbe der Levels", false)).add_option(dpp::command_option(dpp::command_option_type::co_number, "speed", "Level-Speed: 0,5=halb, 1,0=normal, 2,0=doppelt, ...", false))), [&](const dpp::slashcommand_t& event) {
|
||||
// Check that user has enough permissions
|
||||
if (!event.command.get_guild().base_permissions(event.command.member).has(dpp::permissions::p_administrator)) {
|
||||
event.reply(dpp::message("Du braucht Administrationsrechte, um dieses Kommando zu verwenden.").set_flags(dpp::message_flags::m_ephemeral));
|
||||
|
@ -193,36 +174,52 @@ public:
|
|||
}
|
||||
// Go on
|
||||
db_add_guild(event.command.guild_id);
|
||||
set_guild_enabled(event.command.guild_id, std::get<bool>(event.get_parameter("enabled")));
|
||||
event.reply(dpp::message("Okay!").set_flags(dpp::message_flags::m_ephemeral));
|
||||
});
|
||||
bot->add_chatcommand(Bot::ChatCommand({"levels_set_embed_enabled", "levels_embed_aktivieren"}, "Stelle ein ob Embeds aktiviert sein sollen", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_boolean, "enabled", "Ob Embeds aktiviert sein sollen", true))), [&](const dpp::slashcommand_t& event) {
|
||||
// Check that user has enough permissions
|
||||
if (!event.command.get_guild().base_permissions(event.command.member).has(dpp::permissions::p_administrator)) {
|
||||
event.reply(dpp::message("Du braucht Administrationsrechte, um dieses Kommando zu verwenden.").set_flags(dpp::message_flags::m_ephemeral));
|
||||
return;
|
||||
// Get parameters
|
||||
auto opt_enabled = event.get_parameter("enabled"),
|
||||
opt_embed = event.get_parameter("embed"),
|
||||
opt_color = event.get_parameter("color"),
|
||||
opt_speed = event.get_parameter("speed");
|
||||
bool bad_color = false,
|
||||
bad_speed = false;
|
||||
// Update database
|
||||
if (opt_enabled.index() != 0) {
|
||||
bot->db << "UPDATE levels_guild_settings "
|
||||
"SET enabled = ? "
|
||||
"WHERE id = ?;"
|
||||
<< std::get<bool>(opt_enabled)
|
||||
<< std::to_string(event.command.guild_id);
|
||||
}
|
||||
// Go on
|
||||
db_add_guild(event.command.guild_id);
|
||||
set_guild_embed(event.command.guild_id, std::get<bool>(event.get_parameter("enabled")));
|
||||
event.reply(dpp::message("Okay!").set_flags(dpp::message_flags::m_ephemeral));
|
||||
});
|
||||
bot->add_chatcommand(Bot::ChatCommand({"levels_set_speed", "levels_geschwindigkeit"}, "Stelle die Levelup-Geschwindigkeit ein", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_number, "speed", "0,5=halb, 1,0=normal, 2,0=doppelt, ...", true))), [&](const dpp::slashcommand_t& event) {
|
||||
// Check that user has enough permissions
|
||||
if (!event.command.get_guild().base_permissions(event.command.member).has(dpp::permissions::p_administrator)) {
|
||||
event.reply(dpp::message("Du braucht Administrationsrechte, um dieses Kommando zu verwenden.").set_flags(dpp::message_flags::m_ephemeral));
|
||||
return;
|
||||
if (opt_embed.index() != 0) {
|
||||
bot->db << "UPDATE levels_guild_settings "
|
||||
"SET embed = ? "
|
||||
"WHERE id = ?;"
|
||||
<< std::get<bool>(opt_embed)
|
||||
<< std::to_string(event.command.guild_id);
|
||||
}
|
||||
// Check speed
|
||||
auto speed = std::get<double>(event.get_parameter("speed"));
|
||||
if (speed <= 0.0 || speed > 7.5) {
|
||||
event.reply(dpp::message("Die angegebene Geschwindigkeit ist Null, negativ oder zu hoch.").set_flags(dpp::message_flags::m_ephemeral));
|
||||
return;
|
||||
if (opt_color.index() != 0) {
|
||||
auto color = Util::str_to_color(std::get<std::string>(opt_color));
|
||||
if (!(bad_color = color == -1)) {
|
||||
bot->db << "UPDATE levels_guild_settings "
|
||||
"SET color = ? "
|
||||
"WHERE id = ?;"
|
||||
<< color
|
||||
<< std::to_string(event.command.guild_id);
|
||||
}
|
||||
}
|
||||
// Go on
|
||||
db_add_guild(event.command.guild_id);
|
||||
set_guild_speed(event.command.guild_id, speed);
|
||||
event.reply(dpp::message("Okay!").set_flags(dpp::message_flags::m_ephemeral));
|
||||
if (opt_speed.index() != 0) {
|
||||
auto speed = std::get<double>(opt_speed);
|
||||
if (!(bad_speed = speed <= 0.0 || speed > 7.0)) {
|
||||
bot->db << "UPDATE levels_guild_settings "
|
||||
"SET speed = ? "
|
||||
"WHERE id = ?;"
|
||||
<< speed
|
||||
<< std::to_string(event.command.guild_id);
|
||||
}
|
||||
}
|
||||
// Report success
|
||||
event.reply(dpp::message(std::string("Okay!")+
|
||||
(bad_color?"\n**Warnung:** Ich konnte die Farbe nicht identifizieren. Versuche es erneut mit einem HTML-Farbcode!":"")+
|
||||
(bad_speed?"\n**Warnung:** Die angegebene Geschwindigkeit ist nicht erlaubt!":"")).set_flags(dpp::message_flags::m_ephemeral));
|
||||
});
|
||||
bot->add_chatcommand(Bot::ChatCommand({"levels_add_role", "levels_rolle"}, "Füge eine Level-Rolle hinzu", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_integer, "threshold", "Mindestlevel", true)).add_option(dpp::command_option(dpp::command_option_type::co_role, "role", "Rolle", true))), [&](const dpp::slashcommand_t& event) {
|
||||
// Check that user has enough permissions
|
||||
|
@ -273,7 +270,7 @@ public:
|
|||
bot->add_usercommand(Bot::UserCommand({"Level anzeigen"}, "Zeige das Level des Mitglieds an"), [&](const dpp::user_context_menu_t& event) {
|
||||
// Get guild settings
|
||||
db_add_guild(event.command.guild_id);
|
||||
auto [enabled, embed_enabled, speed] = get_guild_data(event.command.guild_id);
|
||||
auto [enabled, embed_enabled, speed, color] = get_guild_data(event.command.guild_id);
|
||||
// Make sure levels are enabled here
|
||||
if (!enabled) {
|
||||
event.reply(dpp::message("Dieser Server hat keine Levels aktiviert.").set_flags(dpp::message_flags::m_ephemeral));
|
||||
|
@ -282,7 +279,7 @@ public:
|
|||
// Get target
|
||||
dpp::snowflake target_id = event.get_user().id;
|
||||
// Get level info message and reply with it
|
||||
event.reply(get_level_info_message(event.command.guild_id, target_id, target_id == event.command.usr.id, embed_enabled));
|
||||
event.reply(get_level_info_message(event.command.guild_id, target_id, target_id == event.command.usr.id, embed_enabled, color));
|
||||
});
|
||||
|
||||
bot->cluster.on_message_create([&](const dpp::message_create_t& message) {
|
||||
|
@ -294,7 +291,7 @@ public:
|
|||
// Make sure guild has entry in database
|
||||
db_add_guild(message.msg.guild_id);
|
||||
// Get guild data
|
||||
auto [enabled, embed_enabled, speed] = get_guild_data(message.msg.guild_id);
|
||||
auto [enabled, embed_enabled, speed, color] = get_guild_data(message.msg.guild_id);
|
||||
// Make sure leveling is enabled on guild
|
||||
if (!enabled) {
|
||||
return;
|
||||
|
@ -314,7 +311,7 @@ public:
|
|||
dpp::embed embed;
|
||||
embed.set_title(":partying_face: Levelup!")
|
||||
.set_description("**"+author.get_mention()+"**, du bist jetzt Level **"+std::to_string(level)+"**!!!")
|
||||
.set_color(0xff0000);
|
||||
.set_color(color);
|
||||
message.reply(dpp::message().add_embed(embed));
|
||||
} else {
|
||||
message.reply(":partying_face: **"+author.get_mention()+"**, du bist jetzt Level **"+std::to_string(level)+"**!!!");
|
||||
|
|
|
@ -259,13 +259,13 @@ public:
|
|||
}
|
||||
// Get parameters
|
||||
auto channel_id = std::get<dpp::snowflake>(event.get_parameter("channel"));
|
||||
auto title_opt = event.get_parameter("title");
|
||||
auto text_opt = event.get_parameter("text");
|
||||
auto color_opt = event.get_parameter("color");
|
||||
auto title_opt = event.get_parameter("title"),
|
||||
text_opt = event.get_parameter("text"),
|
||||
color_opt = event.get_parameter("color");
|
||||
auto footer_text_opt = event.get_parameter("footer_text");
|
||||
auto title = title_opt.index()!=0?std::get<std::string>(title_opt):"Support Tickets";
|
||||
auto text = text_opt.index()!=0?std::get<std::string>(text_opt):"Klicke den Knopf an, um ein Ticket zu erstellen!";
|
||||
auto footer_text = footer_text_opt.index()!=0?std::get<std::string>(footer_text_opt):"Jemand wird sich anschließend um dein Anliegen kümmern.";
|
||||
auto title = title_opt.index()!=0?std::get<std::string>(title_opt):"Support Tickets",
|
||||
text = text_opt.index()!=0?std::get<std::string>(text_opt):"Klicke den Knopf an, um ein Ticket zu erstellen!",
|
||||
footer_text = footer_text_opt.index()!=0?std::get<std::string>(footer_text_opt):"Jemand wird sich anschließend um dein Anliegen kümmern.";
|
||||
unsigned color = Util::str_to_color(color_opt.index()!=0?std::get<std::string>(color_opt):"#ff2217");
|
||||
// Send embed there
|
||||
dpp::message msg;
|
||||
|
|
Loading…
Add table
Reference in a new issue