diff options
| author | soler_j <soler_j@etna-alternance.net> | 2025-04-30 22:55:01 +0200 | 
|---|---|---|
| committer | soler_j <soler_j@etna-alternance.net> | 2025-04-30 22:55:01 +0200 | 
| commit | 5bc4019e23c5344054bfd2b409760c5b084341a2 (patch) | |
| tree | 6b97c36dadab3d30d0b4db8711c4aac9440c117d /bot/src/handle_actions.cpp | |
| parent | 976c7a7466ef2852607a83ead4e0ed93550742d8 (diff) | |
Ajout de la gestion des actions de suppression de messages avec validation des permissions et des erreurs
Diffstat (limited to 'bot/src/handle_actions.cpp')
| -rw-r--r-- | bot/src/handle_actions.cpp | 115 | 
1 files changed, 8 insertions, 107 deletions
diff --git a/bot/src/handle_actions.cpp b/bot/src/handle_actions.cpp index 38d9982..15645cb 100644 --- a/bot/src/handle_actions.cpp +++ b/bot/src/handle_actions.cpp @@ -1,5 +1,5 @@  #include <dpp/dpp.h> - +#include "../include/actions/delete.hpp"  dpp::task<bool> handle_actions(const dpp::slashcommand_t &event, const nlohmann::json &actions, const std::unordered_map<std::string, std::string> &key_values)  { @@ -17,112 +17,13 @@ dpp::task<bool> handle_actions(const dpp::slashcommand_t &event, const nlohmann:                  std::string action_type = action["type"];                  if (action_type == "delete_messages" && event.command.is_guild_interaction())                  { -                    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<std::string, std::string> 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."}}; - -                    if (action.contains("error_amount")) -                    { -                        error_messages["error_amount"] = action["error_amount"].get<std::string>(); -                    } - -                    if (action.contains("error_perm_channel")) -                    { -                        error_messages["error_perm_channel"] = action["error_perm_channel"].get<std::string>(); -                    } - -                    if (action.contains("error")) -                    { -                        error_messages["error"] = action["error"].get<std::string>(); -                    } -                    // let's retrieve the current channel -                    const dpp::channel *channel_ptr = &event.command.get_channel(); - -                    // let's check if the user has permission to delete messages -                    if (!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)) -                    { -                        co_await thinking; -                        event.edit_response(error_messages["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()) -                        { -                            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) -                            { -                                co_await thinking; -                                event.edit_response(error_messages["error_amount"]); -                                co_return false; -                            } -                        } -                    } -                    if (amount > 0) -                    { -                        dpp::confirmation_callback_t 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()); -                            co_await thinking; -                            event.edit_response(error_messages["error"]); -                            co_return false; -                        } -                        auto messages = callback.get<dpp::message_map>(); -                        if (messages.empty()) -                        { -                            printf("No messages to delete\n"); -                            co_await thinking; -                            event.edit_response("No messages to delete."); -                            co_return false; -                        } -                        std::vector<dpp::snowflake> msg_ids; - -                        for (const auto &msg : messages) -                        { -                            // let's check if the message is older than 2 weeks -                            if (msg.second.get_creation_time() < dpp::utility::time_f() - 1209600) -                            { -                                printf("Message is older than 2 weeks\n"); -                                continue; -                            } -                            else -                            { -                                msg_ids.push_back(msg.second.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()) -                            { -                                printf("Error: %s\n", result.get_error().message.c_str()); -                                co_await thinking; -                                event.edit_response(error_messages["error"]); -                                co_return false; -                            } - -                            co_await thinking; -                        } -                    } +                   co_await thinking; +                   auto return_value = co_await delete_action(event, action, key_values, user_ptr, cluster); +                   // if it's a false, we need to return false ! +                     if (!return_value) +                     { +                          co_return false; +                     }                  }              }              if (i == actions.size())  | 
