1
0
Fork 0
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:
niansa 2022-11-01 14:20:18 +01:00
parent 49888a7afd
commit 5ff93aceef
2 changed files with 65 additions and 68 deletions

View file

@ -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)+"**!!!");

View file

@ -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;