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:
parent
7fb405b06a
commit
fce4fa40b6
8 changed files with 105 additions and 16 deletions
|
@ -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})
|
||||
|
|
2
main.cpp
2
main.cpp
|
@ -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]() {
|
||||
|
|
|
@ -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));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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--;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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 = ?;"
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue