From 39bfa6bca0b10a917258b87f722557339cf12e3d Mon Sep 17 00:00:00 2001 From: delikesance Date: Thu, 1 May 2025 14:40:48 +0200 Subject: optimized delete --- bot/src/actions/delete.cpp | 124 ++++++++++++++++++++++----------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/bot/src/actions/delete.cpp b/bot/src/actions/delete.cpp index 58835cf..ed62dbc 100644 --- a/bot/src/actions/delete.cpp +++ b/bot/src/actions/delete.cpp @@ -1,107 +1,107 @@ #include -dpp::task delete_action(const dpp::slashcommand_t &event, const nlohmann::json &action, const std::unordered_map &key_values, dpp::user &user_ptr, dpp::cluster *cluster) +dpp::task delete_action(const dpp::slashcommand_t &event, const nlohmann::json &action, + const std::unordered_map &key_values, + dpp::user &user_ptr, dpp::cluster *cluster) { - dpp::guild guild_ptr = event.command.get_guild(); - // let's retrieve the member. - dpp::guild_member member_ptr = guild_ptr.members.find(user_ptr.id)->second; - dpp::guild_member bot_member_ptr = guild_ptr.members.find(cluster->me.id)->second; - std::unordered_map error_messages = { - {"error", "You need to wait a bit before deleting messages."}, - {"error_amount", "The amount of messages to delete must be between 1 and 100."}, - {"error_perm_channel", "You do not have permission to delete messages in this channel."}}; + const dpp::channel *channel_ptr = &event.command.get_channel(); + const auto &guild_ptr = event.command.get_guild(); - if (action.contains("error_amount")) - { - error_messages["error_amount"] = action["error_amount"].get(); - } + const auto member_it = guild_ptr.members.find(user_ptr.id); + const auto *member_ptr = (member_it != guild_ptr.members.end()) ? &member_it->second : nullptr; - if (action.contains("error_perm_channel")) - { - error_messages["error_perm_channel"] = action["error_perm_channel"].get(); - } + const auto bot_member_it = guild_ptr.members.find(cluster->me.id); + const auto *bot_member_ptr = (bot_member_it != guild_ptr.members.end()) ? &bot_member_it->second : nullptr; - if (action.contains("error")) + if (!member_ptr || !bot_member_ptr) { - error_messages["error"] = action["error"].get(); - } - // let's retrieve the current channel - const dpp::channel *channel_ptr = &event.command.get_channel(); - auto user_as_perms = channel_ptr->get_user_permissions(member_ptr).has(dpp::p_manage_messages); - auto bot_as_perms = channel_ptr->get_user_permissions(bot_member_ptr).has(dpp::p_manage_messages); - if (!user_as_perms) - { - event.edit_response(error_messages["error_perm_channel"]); + event.edit_response("Member lookup failed"); co_return false; } - if (!bot_as_perms) + + const std::unordered_map error_messages = [&action]() + { + std::unordered_map defaults = { + {"error", "You need to wait a bit before deleting messages."}, + {"error_amount", "The amount of messages to delete must be between 1 and 100."}, + {"error_perm_channel", "You do not have permission to delete messages in this channel."}}; + if (action.contains("error_amount")) + defaults["error_amount"] = action["error_amount"]; + if (action.contains("error_perm_channel")) + defaults["error_perm_channel"] = action["error_perm_channel"]; + if (action.contains("error")) + defaults["error"] = action["error"]; + return defaults; + }(); + + const bool has_permissions = channel_ptr->get_user_permissions(*member_ptr).has(dpp::p_manage_messages) && channel_ptr->get_user_permissions(*bot_member_ptr).has(dpp::p_manage_messages); + if (!has_permissions) { - event.edit_response(error_messages["error_perm_channel"]); + event.edit_response(error_messages.at("error_perm_channel")); co_return false; } + int amount = 0; if (action.contains("depend_on")) { - std::string depend_on = action["depend_on"]; - auto it = key_values.find(depend_on); - if (it != key_values.end()) + const std::string &depend_on = action["depend_on"]; + if (const auto it = key_values.find(depend_on); it != key_values.end()) { - std::string depend_on_value = it->second; - - // let's convert the depend_on_value to an int - amount = std::stoi(depend_on_value); - if (amount < 0 || amount > 100) + try { - event.edit_response(error_messages["error_amount"]); + amount = std::stoi(it->second); + if (amount < 1 || amount > 100) + { + event.edit_response(error_messages.at("error_amount")); + co_return false; + } + } + catch (const std::exception &e) + { + event.edit_response("Invalid message count format"); co_return false; } } } + if (amount > 0) { - dpp::confirmation_callback_t callback = co_await cluster->co_messages_get(channel_ptr->id, 0, 0, 0, amount); + const time_t two_weeks_ago = dpp::utility::time_f() - 1209600; + + auto callback = co_await cluster->co_messages_get(channel_ptr->id, 0, 0, 0, amount); if (callback.is_error()) { - printf("Error: %s\n", callback.get_error().message.c_str()); - event.edit_response(error_messages["error"]); + event.edit_response(error_messages.at("error")); co_return false; } - auto messages = callback.get(); + + const auto &messages = callback.get(); if (messages.empty()) { event.edit_response("No messages to delete."); co_return false; } + std::vector msg_ids; + msg_ids.reserve(messages.size()); - for (const auto &msg : messages) + for (const auto &[id, msg] : messages) { - // let's check if the message is older than 2 weeks - if (msg.second.get_creation_time() < dpp::utility::time_f() - 1209600) + if (msg.get_creation_time() >= two_weeks_ago) { - printf("Message is older than 2 weeks\n"); - continue; - } - else - { - msg_ids.push_back(msg.second.id); + msg_ids.emplace_back(id); } } if (!msg_ids.empty()) { - dpp::confirmation_callback_t result; - if (msg_ids.size() == 1) - { - result = co_await cluster->co_message_delete(msg_ids[0], channel_ptr->id); - } - else - { - result = co_await cluster->co_message_delete_bulk(msg_ids, channel_ptr->id); - } - if (result.is_error()) + const auto delete_result = msg_ids.size() == 1 + ? co_await cluster->co_message_delete(msg_ids.front(), channel_ptr->id) + : co_await cluster->co_message_delete_bulk(msg_ids, channel_ptr->id); + + if (delete_result.is_error()) { - event.edit_response(error_messages["error"]); + event.edit_response(error_messages.at("error")); co_return false; } } -- cgit v1.2.3 From 777a37336b5144ce39f2c815ea0fda4dc0ad0e2f Mon Sep 17 00:00:00 2001 From: delikesance Date: Thu, 1 May 2025 14:56:21 +0200 Subject: fixing issues --- bot/src/actions/delete.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bot/src/actions/delete.cpp b/bot/src/actions/delete.cpp index ed62dbc..5813d63 100644 --- a/bot/src/actions/delete.cpp +++ b/bot/src/actions/delete.cpp @@ -13,12 +13,6 @@ dpp::task delete_action(const dpp::slashcommand_t &event, const nlohmann:: const auto bot_member_it = guild_ptr.members.find(cluster->me.id); const auto *bot_member_ptr = (bot_member_it != guild_ptr.members.end()) ? &bot_member_it->second : nullptr; - if (!member_ptr || !bot_member_ptr) - { - event.edit_response("Member lookup failed"); - co_return false; - } - const std::unordered_map error_messages = [&action]() { std::unordered_map defaults = { @@ -34,6 +28,12 @@ dpp::task delete_action(const dpp::slashcommand_t &event, const nlohmann:: return defaults; }(); + if (!member_ptr || !bot_member_ptr) + { + event.edit_response(error_messages.at("error_perm_channel")); + co_return false; + } + const bool has_permissions = channel_ptr->get_user_permissions(*member_ptr).has(dpp::p_manage_messages) && channel_ptr->get_user_permissions(*bot_member_ptr).has(dpp::p_manage_messages); if (!has_permissions) { @@ -58,7 +58,7 @@ dpp::task delete_action(const dpp::slashcommand_t &event, const nlohmann:: } catch (const std::exception &e) { - event.edit_response("Invalid message count format"); + event.edit_response(error_messages.at("error")); co_return false; } } -- cgit v1.2.3