1
0
Fork 0
mirror of https://gitlab.com/niansa/SomeBot.git synced 2025-03-06 20:48:26 +01:00

Enabled and fixed a lot of warnings and enabled LTO

This commit is contained in:
niansa 2022-12-27 18:05:58 +01:00
parent 7fb405b06a
commit fce4fa40b6
8 changed files with 105 additions and 16 deletions

View file

@ -15,6 +15,10 @@ add_compile_definitions(COMPILER_PLATFORM="${CMAKE_CXX_PLATFORM_ID}")
file(GLOB MODULES modules/*.cpp modules/*.hpp)
add_executable(KeineAhnung main.cpp util.cpp ${MODULES})
target_link_libraries(KeineAhnung PRIVATE dpp justgpt sqlite3 pthread)
set_property(TARGET KeineAhnung PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
target_compile_options(KeineAhnung PRIVATE
-Wall -Wextra -Wpedantic
)
install(TARGETS KeineAhnung
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})

View file

@ -76,7 +76,7 @@ Bot::Bot(const std::string& token, const std::string& database) : cluster(token)
event.reply(":sos: Unhandled exception at `"+Util::int_as_hex(&e)+"`: "+e.what());
}
});
cluster.on_ready([this](const dpp::ready_t& event) { //TODO: Clear this macro mess without compromising performance... actually, does that even matter here?
cluster.on_ready([this](const dpp::ready_t&) { //TODO: Clear this macro mess without compromising performance... actually, does that even matter here?
// Register bot commands once
if (dpp::run_once<struct register_bot_commands>()) {
std::thread([this]() {

View file

@ -43,13 +43,13 @@ public:
.set_image(strOrEmpty(event.get_parameter("image")))
.set_video(strOrEmpty(event.get_parameter("video")))
.set_thumbnail(strOrEmpty(event.get_parameter("thumbnail")))
.set_color(color!=-1?color:0xffffff)
.set_color(color!=-1U?color:0xffffff)
.set_footer(strOrEmpty(event.get_parameter("footer_text")), strOrEmpty(event.get_parameter("footer_image")));
// Send embed
bot->cluster.message_create(dpp::message().set_content(strOrEmpty(event.get_parameter("content"))).set_channel_id(event.command.channel_id).add_embed(embed));
// Report success
event.reply(dpp::message(std::string("Das Embed wurde erstellt!")
+(color==-1?"\n**Achtung:** Die Angegebene Farbe wurde nicht erkannt! Versuche es mit einem Farbcode erneut.":"")).set_flags(dpp::message_flags::m_ephemeral));
+(color==-1U?"\n**Achtung:** Die Angegebene Farbe wurde nicht erkannt! Versuche es mit einem Farbcode erneut.":"")).set_flags(dpp::message_flags::m_ephemeral));
});
}
};

View file

@ -173,7 +173,7 @@ class Globalchat {
} else {
auto msg = ccb.get<dpp::message>();
// Add reaction
bot->cluster.message_add_reaction(msg, "💣", [this, msg](const dpp::confirmation_callback_t& ccb) {
bot->cluster.message_add_reaction(msg, "💣", [this, msg](const dpp::confirmation_callback_t&) {
// Delete message soon (random delay to avoid deleting many messages at once)
std::thread([this, msg]() {
std::this_thread::sleep_for(std::chrono::seconds((msg.id%10)+6));
@ -377,7 +377,7 @@ public:
bot->add_chatcommand(Bot::ChatCommand({"gc_color", "globalchat_color", "globalchat_farbe"}, "Setze Farbe im Globalchat", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_string, "color", "Farbcode oder Name", true))), [&](const dpp::slashcommand_t& event) {
auto color_str = std::get<std::string>(event.get_parameter("color"));
auto color_code = Util::str_to_color(color_str);
if (color_code == -1) {
if (color_code == -1U) {
event.reply(dpp::message("Farbe ist ungültig. Versuche es mit einem Farbcode.").set_flags(dpp::message_flags::m_ephemeral));
return;
}
@ -467,7 +467,7 @@ public:
if (guild_id_str != std::to_string(bot->config.management_guild_id)) {
bot->cluster.message_delete(message_id_str, channel_id_str);
} else {
bot->cluster.message_get(message_id_str, channel_id_str, [this, bot](const dpp::confirmation_callback_t& ccb) {
bot->cluster.message_get(message_id_str, channel_id_str, [bot](const dpp::confirmation_callback_t& ccb) {
if (ccb.is_error()) {
return;
}

View file

@ -194,10 +194,10 @@ public:
}).detach();
});
bot->cluster.on_guild_create([&](const dpp::guild_create_t& guild) {
bot->cluster.on_guild_create([&](const dpp::guild_create_t&) {
server_count++;
});
bot->cluster.on_guild_delete([&](const dpp::guild_delete_t& guild) {
bot->cluster.on_guild_delete([&](const dpp::guild_delete_t&) {
server_count--;
});
}

View file

@ -78,7 +78,7 @@ class Levels {
dpp::embed embed;
embed.set_title("Dein Level")
.set_description(msg_str)
.set_color(0xff0000);
.set_color(color);
return base_msg.add_embed(embed);
} else {
return base_msg.set_content(msg_str);
@ -198,7 +198,7 @@ public:
}
if (opt_color.index() != 0) {
auto color = Util::str_to_color(std::get<std::string>(opt_color));
if (!(bad_color = color == -1)) {
if (!(bad_color = color == -1U)) {
bot->db << "UPDATE levels_guild_settings "
"SET color = ? "
"WHERE id = ?;"

View file

@ -7,14 +7,43 @@
class Moderation {
Bot *bot;
void db_add_guild(const dpp::snowflake& guild_id) {
bot->db << "INSERT OR IGNORE INTO moderation_guild_settings (id) VALUES (?);"
<< std::to_string(guild_id);
}
dpp::snowflake get_moderation_role(const dpp::snowflake& guild_id) {
std::string fres;
bot->db << "SELECT moderation_role FROM moderation_guild_settings "
"WHERE id = ?;"
<< std::to_string(guild_id)
>> [&] (const std::string& moderation_role) {
fres = moderation_role;
};
return fres.empty()?"0":fres;
}
bool has_moderation_role(const dpp::guild_member& member) {
auto moderation_role = get_moderation_role(member.guild_id);
if (!moderation_role) {
return false;
}
return std::find_if(member.roles.begin(), member.roles.end(), [moderation_role](auto a) {
return a == moderation_role;
}) != member.roles.end();
}
public:
Moderation(Bot *_bot) : bot(_bot) {
bot->cluster.intents |= dpp::intents::i_guild_presences;
bot->db << "CREATE TABLE IF NOT EXISTS moderation_guild_settings ("
" id TEXT PRIMARY KEY NOT NULL,"
" moderation_role TEXT,"
" logs_channel TEXT,"
" UNIQUE(id)"
");";
bot->add_chatcommand(Bot::ChatCommand({"purge"}, "Lösche die letzen Nachrichten", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_integer, "amount", "Menge", true))), [&](const dpp::slashcommand_t& event) {
auto amount = std::get<long>(event.get_parameter("amount"));
unsigned long amount = std::get<long>(event.get_parameter("amount"));
// Check that user has the correct permissions
if (!event.command.get_guild().base_permissions(event.command.member).has(dpp::permissions::p_manage_messages)) {
if (!has_moderation_role(event.command.member) && !event.command.get_guild().base_permissions(event.command.member).has(dpp::permissions::p_manage_messages)) {
event.reply(dpp::message("Du brauchst die Nachrichtenverwaltungsberechtigung, um dieses Kommando zu verwenden.").set_flags(dpp::message_flags::m_ephemeral));
return;
}
@ -31,7 +60,7 @@ public:
} else {
last_msg = 0;
}
auto requested_amount = std::min(amount, 100L);
auto requested_amount = std::min(amount, 100UL);
auto new_messages = bot->cluster.messages_get_sync(channel_id, 0, last_msg, 0, requested_amount);
// Update counters
amount -= new_messages.size();
@ -66,6 +95,62 @@ public:
// Report success
event.reply(dpp::message("Okay! Vorgang wird gestartet...").set_flags(dpp::message_flags::m_ephemeral));
});
bot->add_chatcommand(Bot::ChatCommand({"ban"}, "Verbanne jemanden vom Server", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_user, "member", "Mitglied", true)).add_option(dpp::command_option(dpp::command_option_type::co_string, "reason", "Grund", true))), [&](const dpp::slashcommand_t& event) {
auto member_id = std::get<dpp::snowflake>(event.get_parameter("member"));
auto reason = std::get<std::string>(event.get_parameter("reason"));
// Check that user has the correct permissions
if (!has_moderation_role(event.command.member) && !event.command.get_guild().base_permissions(event.command.member).has(dpp::permissions::p_ban_members)) {
event.reply(dpp::message("Du brauchst die Banberechtigung, um dieses Kommando zu verwenden.").set_flags(dpp::message_flags::m_ephemeral));
return;
}
// Send ban DM
dpp::embed embed;
embed.set_title("Du wurdest gebannt")
.set_description("Du wurdest von "+event.command.get_guild().name+" gebannt!\n\n"+reason);
bot->cluster.direct_message_create(member_id, dpp::message().add_embed(embed), [this, member_id, event] (const dpp::confirmation_callback_t& ccb) {
// Ban
bot->cluster.guild_ban_add(event.command.guild_id, member_id, 0, [this, event, dm_ccb = ccb] (const dpp::confirmation_callback_t& ccb) {
if (ccb.is_error()) {
event.reply(dpp::message("Ich kann diese Person nicht verbannen.").set_flags(dpp::message_flags::m_ephemeral));
// Delete DM message because it's not valid
if (!dm_ccb.is_error()) {
auto dm_msg = dm_ccb.get<dpp::message>();
bot->cluster.message_delete(dm_msg.id, dm_msg.channel_id);
}
} else {
event.reply(dpp::message("Okay!").set_flags(dpp::message_flags::m_ephemeral));
}
});
});
});
bot->add_chatcommand(Bot::ChatCommand({"kick"}, "Kicke jemanden vom Server", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_user, "member", "Mitglied", true)).add_option(dpp::command_option(dpp::command_option_type::co_string, "reason", "Grund", true))), [&](const dpp::slashcommand_t& event) {
auto member_id = std::get<dpp::snowflake>(event.get_parameter("member"));
auto reason = std::get<std::string>(event.get_parameter("reason"));
// Check that user has the correct permissions
if (!has_moderation_role(event.command.member) && !event.command.get_guild().base_permissions(event.command.member).has(dpp::permissions::p_kick_members)) {
event.reply(dpp::message("Du brauchst die Kickberechtigung, um dieses Kommando zu verwenden.").set_flags(dpp::message_flags::m_ephemeral));
return;
}
// Send kick DM
dpp::embed embed;
embed.set_title("Du wurdest gekickt")
.set_description("Du wurdest von "+event.command.get_guild().name+" gekickt!\n\n"+reason);
bot->cluster.direct_message_create(member_id, dpp::message().add_embed(embed), [this, member_id, event] (const dpp::confirmation_callback_t& ccb) {
// Kick
bot->cluster.guild_member_kick(event.command.guild_id, member_id, [this, event, dm_ccb = ccb] (const dpp::confirmation_callback_t& ccb) {
if (ccb.is_error()) {
event.reply(dpp::message("Ich kann diese Person nicht kicken.").set_flags(dpp::message_flags::m_ephemeral));
// Delete DM message because it's not valid
if (!dm_ccb.is_error()) {
auto dm_msg = dm_ccb.get<dpp::message>();
bot->cluster.message_delete(dm_msg.id, dm_msg.channel_id);
}
} else {
event.reply(dpp::message("Okay!").set_flags(dpp::message_flags::m_ephemeral));
}
});
});
});
}
};
BOT_ADD_MODULE(Moderation);

View file

@ -290,7 +290,7 @@ public:
.set_title(title)
.set_description(text)
.set_footer(footer_text, "")
.set_color(color!=-1?color:0xffffff))
.set_color(color!=-1U?color:0xffffff))
.add_component(dpp::component()
.add_component(dpp::component()
.set_label("Ticket erstellen")
@ -309,7 +309,7 @@ public:
// Report success and potentially warn about missing ticket management role configuration
event.reply("Ticketerstellung ist nun in <#"+std::to_string(channel_id)+"> möglich!\n"
"**Tipp:** Um Tickets zu deaktivieren, reicht es, das erstellte Embed zu löschen."+
(color==-1?"\n**Fehler:** Die angegebene Farbe wurde nicht erkannt. Versuche es mit einem HTML-Farbcode!":"")+
(color==-1U?"\n**Fehler:** Die angegebene Farbe wurde nicht erkannt. Versuche es mit einem HTML-Farbcode!":"")+
(management_role_id=="0"?"\n**Warnung:** Du solltest mit `/ticket_einstellungen` eine Ticketverwaltungs-Rolle festlegen!":""));
});
bot->add_chatcommand(Bot::ChatCommand({"ticket_close", "ticket_schliessen"}, "Schließe ein Ticket"), [&](const dpp::slashcommand_t& event) {