From 9584a8a3dc67648d4f43bb461f6e9f63159f518f Mon Sep 17 00:00:00 2001 From: PrStein Date: Wed, 15 Feb 2023 23:00:31 +0100 Subject: [PATCH 01/11] ajout switch pour les option et verif option valide --- srcs/commands/channel_op/mode.cpp | 87 +++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 4 deletions(-) diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index 74f2f0d..4e37f4f 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* mode.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: apommier +#+ +:+ +#+ */ +/* By: sadjigui +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/02/15 17:02:12 by apommier ### ########.fr */ +/* Updated: 2023/02/15 22:57:31 by sadjigui ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,12 +27,85 @@ int search_and_erase(std::string &str, std::string toFind) return 1; } -void do_chan_option(fdList &allFds, int userNbr, std::string opt /*, channel (string or direct reference or pointer but no copy)*/) +// void exec_chan_opt(fdList &allFds, char opt, bool sign) +// { +// (void)allFds; +// char opts[11] = {'o','p','s','i','t','n','m','l','b','v','k'}; +// int j = 0; + +// for (; opts[j] && opts[j] != opt; j++){} + +// switch (j) +// { +// case 0: std::cout << "launching option: " << opt << std::endl; +// break ; +// case 1: std::cout << "launching option: " << opt << std::endl; +// break ; +// case 2: std::cout << "launching option: " << opt << std::endl; +// break ; +// case 3: std::cout << "launching option: " << opt << std::endl; +// break ; +// case 4: std::cout << "launching option: " << opt << std::endl; +// break ; +// case 5: std::cout << "launching option: " << opt << std::endl; +// break ; +// case 6: std::cout << "launching option: " << opt << std::endl; +// break ; +// case 7: std::cout << "launching option: " << opt << std::endl; +// break ; +// case 8: std::cout << "launching option: " << opt << std::endl; +// break ; +// case 9: std::cout << "launching option: " << opt << std::endl; +// break ; +// case 10: std::cout << "launching option: " << opt << std::endl; +// break ; +// default : std::cout << "Not launching option" << std::endl; +// break ; +// } +// } + +void do_chan_opt(fdList &allFds, int userNbr, std::string opt /*, channel (string or direct reference or pointer but no copy)*/) { (void)allFds; (void)userNbr; + char opts[11] = {'o','p','s','i','t','n','m','l','b','v','k'}; + bool sign = true; + if (opt[0] == '-') + sign = false; for (int i = 0; opt[i]; i++) { + // exec_chan_opt(allFds, opt[i], sign); + int j = 0; + + for (; opts[j] && opts[j] != opt[i]; j++){} + + switch (j) + { + case 0: std::cout << "launching option: " << opt[i] << std::endl; + break ; + case 1: std::cout << "launching option: " << opt[i] << std::endl; + break ; + case 2: std::cout << "launching option: " << opt[i] << std::endl; + break ; + case 3: std::cout << "launching option: " << opt[i] << std::endl; + break ; + case 4: std::cout << "launching option: " << opt[i] << std::endl; + break ; + case 5: std::cout << "launching option: " << opt[i] << std::endl; + break ; + case 6: std::cout << "launching option: " << opt[i] << std::endl; + break ; + case 7: std::cout << "launching option: " << opt[i] << std::endl; + break ; + case 8: std::cout << "launching option: " << opt[i] << std::endl; + break ; + case 9: std::cout << "launching option: " << opt[i] << std::endl; + break ; + case 10: std::cout << "launching option: " << opt[i] << std::endl; + break ; + default : std::cout << "Not launching option" << std::endl; + break ; + } //mode_i() //call option //switch ? if forest? map container ? 2 tab (name and function pointer) ? @@ -71,7 +144,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) { if (find_channel(allFds, splitBuff[1]) == -1) //if true chan doesn't exist { - std::cout << "chan doesn't exist" << std::endl; + std::cout << splitBuff[1] << ": No such channel" << std::endl; // 403 ERR_NOSUCHCHANNEL // " :No such channel" return ; @@ -82,6 +155,12 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) search_and_erase(splitBuff[2], "opsitnmlbvk"); std::cout << "splitbuff[2] after = " << splitBuff[2] << std::endl; + if ((splitBuff[2].size() < 2) && (splitBuff[2][0] == '-' || splitBuff[2][0] == '+')) + { + std::cout << "Bad params" << std::endl; + return ; + } + do_chan_opt(allFds, userNbr, splitBuff[2]); //do_option one by one here (do_chan_opt)? return ; } From 1d240f14bf082fc0e5e7b2b2dc4227ac30908398 Mon Sep 17 00:00:00 2001 From: PrStein Date: Wed, 15 Feb 2023 23:23:43 +0100 Subject: [PATCH 02/11] ajout des ternaire psitnm --- srcs/commands/channel_op/mode.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index 4e37f4f..191af09 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -6,7 +6,7 @@ /* By: sadjigui +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/02/15 22:57:31 by sadjigui ### ########.fr */ +/* Updated: 2023/02/15 23:22:55 by sadjigui ### ########.fr */ /* */ /* ************************************************************************** */ @@ -64,7 +64,7 @@ int search_and_erase(std::string &str, std::string toFind) // } // } -void do_chan_opt(fdList &allFds, int userNbr, std::string opt /*, channel (string or direct reference or pointer but no copy)*/) +void do_chan_opt(fdList &allFds, int userNbr, std::string opt, int chanNbr /*, channel (string or direct reference or pointer but no copy)*/) { (void)allFds; (void)userNbr; @@ -83,17 +83,17 @@ void do_chan_opt(fdList &allFds, int userNbr, std::string opt /*, channel (strin { case 0: std::cout << "launching option: " << opt[i] << std::endl; break ; - case 1: std::cout << "launching option: " << opt[i] << std::endl; + case 1: allFds.channelList[chanNbr].mode.p = (sign = true) ? true : false; break ; - case 2: std::cout << "launching option: " << opt[i] << std::endl; + case 2: allFds.channelList[chanNbr].mode.s = (sign = true) ? true : false; break ; - case 3: std::cout << "launching option: " << opt[i] << std::endl; + case 3: allFds.channelList[chanNbr].mode.i = (sign = true) ? true : false; break ; - case 4: std::cout << "launching option: " << opt[i] << std::endl; + case 4: allFds.channelList[chanNbr].mode.t = (sign = true) ? true : false; break ; - case 5: std::cout << "launching option: " << opt[i] << std::endl; + case 5: allFds.channelList[chanNbr].mode.n = (sign = true) ? true : false; break ; - case 6: std::cout << "launching option: " << opt[i] << std::endl; + case 6: allFds.channelList[chanNbr].mode.m = (sign = true) ? true : false; break ; case 7: std::cout << "launching option: " << opt[i] << std::endl; break ; @@ -131,6 +131,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) { (void)userNbr; std::vector splitBuff; + int pos; split(buffer, ' ', splitBuff); if (splitBuff.size() < 3) { @@ -142,7 +143,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) //else ??? erreur j'imagine mais j'ai pas trouvé if (splitBuff[1][0] == '#' || splitBuff[1][0] == '&') //splitbuff[1] always equal to or { - if (find_channel(allFds, splitBuff[1]) == -1) //if true chan doesn't exist + if ((pos = find_channel(allFds, splitBuff[1])) == -1) //if true chan doesn't exist { std::cout << splitBuff[1] << ": No such channel" << std::endl; // 403 ERR_NOSUCHCHANNEL @@ -160,7 +161,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) std::cout << "Bad params" << std::endl; return ; } - do_chan_opt(allFds, userNbr, splitBuff[2]); + do_chan_opt(allFds, userNbr, splitBuff[2], pos); //do_option one by one here (do_chan_opt)? return ; } From 2332c761e05fe1dfda649b354c29f875c54551e4 Mon Sep 17 00:00:00 2001 From: PrStein Date: Thu, 23 Feb 2023 00:17:38 +0100 Subject: [PATCH 03/11] ajout mode chan k o --- srcs/commands/channel_op/mode.cpp | 49 ++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index 191af09..14a706e 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -6,7 +6,7 @@ /* By: sadjigui +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/02/15 23:22:55 by sadjigui ### ########.fr */ +/* Updated: 2023/02/23 00:15:27 by sadjigui ### ########.fr */ /* */ /* ************************************************************************** */ @@ -64,24 +64,49 @@ int search_and_erase(std::string &str, std::string toFind) // } // } -void do_chan_opt(fdList &allFds, int userNbr, std::string opt, int chanNbr /*, channel (string or direct reference or pointer but no copy)*/) +void chan_opt_o(fdList &allFds, int userNbr, std::vector opt, int chanNbr, bool sign) +{ + (void)allFds; + (void)userNbr; + (void)chanNbr; + + if (opt.size() != 4) + { + std::cout << "ERR_NEEDMOREPARAMS" << std::endl; + return ; + } + if ((find_user(allFds, opt[3]) == -1)) + { + std::cout << "User :" << opt[3] << " not found" << std::endl; + return ; + } + + //A voir + if (allFds.userData[userNbr].mode.o == true && sign == true) + allFds.userData[find_user(allFds, opt[3])].mode.o = (sign = true) ? true : false; + + std::cout << "-------> " << opt[3] << std::endl; +} + +void do_chan_opt(fdList &allFds, int userNbr, std::vector opt, int chanNbr /*, channel (string or direct reference or pointer but no copy)*/) { (void)allFds; (void)userNbr; char opts[11] = {'o','p','s','i','t','n','m','l','b','v','k'}; bool sign = true; - if (opt[0] == '-') + if (opt[2][0] == '-') sign = false; - for (int i = 0; opt[i]; i++) + for (int i = 0; opt[2][i]; i++) { // exec_chan_opt(allFds, opt[i], sign); int j = 0; - for (; opts[j] && opts[j] != opt[i]; j++){} + while (opts[j] && opts[j] != opt[2][i]) + j++; switch (j) { - case 0: std::cout << "launching option: " << opt[i] << std::endl; + case 0: chan_opt_o(allFds, userNbr, opt, chanNbr, sign); //std::cout << "launching option: " << opt[2][i] << std::endl; break ; case 1: allFds.channelList[chanNbr].mode.p = (sign = true) ? true : false; break ; @@ -95,13 +120,15 @@ void do_chan_opt(fdList &allFds, int userNbr, std::string opt, int chanNbr /*, c break ; case 6: allFds.channelList[chanNbr].mode.m = (sign = true) ? true : false; break ; - case 7: std::cout << "launching option: " << opt[i] << std::endl; + case 7: std::cout << "launching option: " << opt[2][i] << std::endl; break ; - case 8: std::cout << "launching option: " << opt[i] << std::endl; + case 8: std::cout << "launching option: " << opt[2][i] << std::endl; break ; - case 9: std::cout << "launching option: " << opt[i] << std::endl; + case 9: std::cout << "launching option: " << opt[2][i] << std::endl; break ; - case 10: std::cout << "launching option: " << opt[i] << std::endl; + case 10: + if (sign == true) + allFds.channelList[chanNbr].password = opt[3]; break ; default : std::cout << "Not launching option" << std::endl; break ; @@ -161,7 +188,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) std::cout << "Bad params" << std::endl; return ; } - do_chan_opt(allFds, userNbr, splitBuff[2], pos); + do_chan_opt(allFds, userNbr, splitBuff, pos); //do_option one by one here (do_chan_opt)? return ; } From 8754b6ab9c855d9d3da3cacd3dfc950c5ef5b978 Mon Sep 17 00:00:00 2001 From: PrStein Date: Thu, 23 Feb 2023 00:42:06 +0100 Subject: [PATCH 04/11] ajout du mode l --- srcs/commands/channel_op/mode.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index 14a706e..34eab32 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -6,7 +6,7 @@ /* By: sadjigui +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/02/23 00:15:27 by sadjigui ### ########.fr */ +/* Updated: 2023/02/23 00:41:10 by sadjigui ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,6 +27,19 @@ int search_and_erase(std::string &str, std::string toFind) return 1; } +int ft_stoi(std::string str) +{ + int i = 0; + int result = 0; + + while (str[i] >= '0' && str[i] <= '9') + { + result = result * 10 +str[i] - 48; + i++; + } + return result; +} + // void exec_chan_opt(fdList &allFds, char opt, bool sign) // { // (void)allFds; @@ -118,7 +131,9 @@ void do_chan_opt(fdList &allFds, int userNbr, std::vector opt, int break ; case 5: allFds.channelList[chanNbr].mode.n = (sign = true) ? true : false; break ; - case 6: allFds.channelList[chanNbr].mode.m = (sign = true) ? true : false; + case 6: + if (sign == true) + allFds.channelList[chanNbr].maxUser = ft_stoi(opt[3]); break ; case 7: std::cout << "launching option: " << opt[2][i] << std::endl; break ; From 905227811eaa798deabb4a7267fea428bbe8fcbe Mon Sep 17 00:00:00 2001 From: PrStein Date: Thu, 23 Feb 2023 20:36:01 +0100 Subject: [PATCH 05/11] modification mode k --- srcs/commands/channel_op/mode.cpp | 52 +++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index 34eab32..a8d29c8 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -6,11 +6,12 @@ /* By: sadjigui +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/02/23 00:41:10 by sadjigui ### ########.fr */ +/* Updated: 2023/02/23 20:35:05 by sadjigui ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../../includes/ft_irc.hpp" +#include int search_and_erase(std::string &str, std::string toFind) { @@ -27,19 +28,28 @@ int search_and_erase(std::string &str, std::string toFind) return 1; } -int ft_stoi(std::string str) +bool str_to_int(int &i, const std::string s) { - int i = 0; - int result = 0; - - while (str[i] >= '0' && str[i] <= '9') - { - result = result * 10 +str[i] - 48; - i++; - } - return result; + std::stringstream ss(s); + ss >> i; + if (ss.fail()) + return false; + return true; } +// int ft_stoi(std::string str) +// { +// int i = 0; +// int result = 0; + +// while (str[i] >= '0' && str[i] <= '9') +// { +// result = result * 10 +str[i] - 48; +// i++; +// } +// return result; +// } + // void exec_chan_opt(fdList &allFds, char opt, bool sign) // { // (void)allFds; @@ -101,6 +111,18 @@ void chan_opt_o(fdList &allFds, int userNbr, std::vector opt, int c std::cout << "-------> " << opt[3] << std::endl; } +void chan_opt_k(fdList &allFds, std::vector opt, int chanNbr, bool sign) +{ + if (opt.size() != 4) + { + std::cout << "ERR_NEEDMOREPARAMS" << std::endl; + std::cout << "how to use it :/MODE +k " << std::endl; + return ; + } + if (sign == true) + allFds.channelList[chanNbr].password = opt[3]; +} + void do_chan_opt(fdList &allFds, int userNbr, std::vector opt, int chanNbr /*, channel (string or direct reference or pointer but no copy)*/) { (void)allFds; @@ -133,17 +155,15 @@ void do_chan_opt(fdList &allFds, int userNbr, std::vector opt, int break ; case 6: if (sign == true) - allFds.channelList[chanNbr].maxUser = ft_stoi(opt[3]); + str_to_int(allFds.channelList[chanNbr].maxUser, opt[3]); break ; case 7: std::cout << "launching option: " << opt[2][i] << std::endl; break ; case 8: std::cout << "launching option: " << opt[2][i] << std::endl; break ; - case 9: std::cout << "launching option: " << opt[2][i] << std::endl; + case 9: std::cout << "launching option: v " << std::endl; break ; - case 10: - if (sign == true) - allFds.channelList[chanNbr].password = opt[3]; + case 10: chan_opt_k(allFds, opt, chanNbr, sign); break ; default : std::cout << "Not launching option" << std::endl; break ; From e052f32f1dfbccb963fc1194f024e18a135a1ae3 Mon Sep 17 00:00:00 2001 From: PrStein Date: Thu, 23 Feb 2023 22:07:47 +0100 Subject: [PATCH 06/11] ajout v incomplet --- srcs/commands/channel_op/mode.cpp | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index a8d29c8..38299ec 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -6,7 +6,7 @@ /* By: sadjigui +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/02/23 20:35:05 by sadjigui ### ########.fr */ +/* Updated: 2023/02/23 22:06:54 by sadjigui ### ########.fr */ /* */ /* ************************************************************************** */ @@ -116,13 +116,40 @@ void chan_opt_k(fdList &allFds, std::vector opt, int chanNbr, bool if (opt.size() != 4) { std::cout << "ERR_NEEDMOREPARAMS" << std::endl; - std::cout << "how to use it :/MODE +k " << std::endl; + std::cout << "how to use it :/MODE +k " << std::endl; return ; } if (sign == true) allFds.channelList[chanNbr].password = opt[3]; } +void chan_opt_v(fdList &allFds, int userNbr, std::vector opt, int chanNbr, bool sign) +{ + (void)userNbr; + (void)chanNbr; + (void)sign; + + if (opt.size() != 4) + { + std::cout << "ERR_NEEDMOREPARAMS" << std::endl; + std::cout << "how to use it :/MODE +/-v " << std::endl; + return ; + } + + int target = find_user(allFds, opt[3]); + if (target == -1) + { + std::cout << "no user found " << std::endl; + return ; + } + + // int pos = find_client_list(allFds.channelList[chanNbr].verboseList, allFds.userData[target]); + // if (sign == true && pos == -1) + // allFds.channelList[chanNbr].verboseList.push_back(allFds.userData[target]); + // if (sign == false && pos != -1) + // allFds.channelList[chanNbr].verboseList.erase(allFds.channelList[chanNbr].verboseList.at(pos)); +} + void do_chan_opt(fdList &allFds, int userNbr, std::vector opt, int chanNbr /*, channel (string or direct reference or pointer but no copy)*/) { (void)allFds; From bfba8d52f3cb95c65803078a2219cf3640e27ce4 Mon Sep 17 00:00:00 2001 From: PrStein Date: Tue, 28 Feb 2023 00:00:04 +0100 Subject: [PATCH 07/11] fonction do_chan_opt fini et mise en place de do_user_opt --- srcs/commands/channel_op/mode.cpp | 82 ++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 19 deletions(-) diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index 38299ec..44ebf58 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -6,7 +6,7 @@ /* By: sadjigui +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/02/23 22:06:54 by sadjigui ### ########.fr */ +/* Updated: 2023/02/27 23:58:08 by sadjigui ### ########.fr */ /* */ /* ************************************************************************** */ @@ -143,11 +143,47 @@ void chan_opt_v(fdList &allFds, int userNbr, std::vector opt, int c return ; } - // int pos = find_client_list(allFds.channelList[chanNbr].verboseList, allFds.userData[target]); - // if (sign == true && pos == -1) - // allFds.channelList[chanNbr].verboseList.push_back(allFds.userData[target]); - // if (sign == false && pos != -1) - // allFds.channelList[chanNbr].verboseList.erase(allFds.channelList[chanNbr].verboseList.at(pos)); + int pos = find_client_list(allFds.channelList[chanNbr].verboseList, &allFds.userData[target]); + if (sign == true && pos == -1) + allFds.channelList[chanNbr].verboseList.push_back(&allFds.userData[target]); + if (sign == false && pos != -1) + allFds.channelList[chanNbr].verboseList.erase(allFds.channelList[chanNbr].verboseList.begin() + (pos -1)); +} + +void chan_opt_b(fdList &allFds, int userNbr, std::vector opt, int chanNbr, bool sign) +{ + std::vector ban(allFds.channelList[chanNbr].banList); + (void)userNbr; + (void)opt; + (void)chanNbr; + (void)sign; + (void)ban; + if (opt.size() == 3 && sign == true) + { + if (ban.size() < 1) + { + std::cout << "Nobody was banned on this channel" << std::endl; + return ; + } + for (long unsigned int i = 0; i < ban.size(); ++i) + { + std::cout << ban[i]->userName << std::endl; + } + } + if (opt.size() == 4) + { + int target_in_client = find_user(allFds, opt[3]); + if (target_in_client != -1) + { + std::cout << "No user found" << std::endl; + return ; + } + int target_in_ban = find_client_list(allFds.channelList[chanNbr].banList, &allFds.userData[target_in_client]); + if (sign == true && target_in_ban == -1) + allFds.channelList[chanNbr].banList.push_back(&allFds.userData[target_in_client]); + if (sign == false && target_in_ban != -1) + allFds.channelList[chanNbr].banList.erase(allFds.channelList[chanNbr].banList.begin() + (target_in_ban -1)); + } } void do_chan_opt(fdList &allFds, int userNbr, std::vector opt, int chanNbr /*, channel (string or direct reference or pointer but no copy)*/) @@ -158,7 +194,7 @@ void do_chan_opt(fdList &allFds, int userNbr, std::vector opt, int bool sign = true; if (opt[2][0] == '-') sign = false; - for (int i = 0; opt[2][i]; i++) + for (int i = 1; opt[2][i]; i++) { // exec_chan_opt(allFds, opt[i], sign); int j = 0; @@ -180,15 +216,15 @@ void do_chan_opt(fdList &allFds, int userNbr, std::vector opt, int break ; case 5: allFds.channelList[chanNbr].mode.n = (sign = true) ? true : false; break ; - case 6: + case 6: allFds.channelList[chanNbr].mode.m = (sign = true) ? true : false; + break ; + case 7: if (sign == true) str_to_int(allFds.channelList[chanNbr].maxUser, opt[3]); break ; - case 7: std::cout << "launching option: " << opt[2][i] << std::endl; + case 8: chan_opt_b(allFds, userNbr, opt, chanNbr, sign); break ; - case 8: std::cout << "launching option: " << opt[2][i] << std::endl; - break ; - case 9: std::cout << "launching option: v " << std::endl; + case 9: chan_opt_v(allFds, userNbr, opt, chanNbr, sign); break ; case 10: chan_opt_k(allFds, opt, chanNbr, sign); break ; @@ -203,15 +239,13 @@ void do_chan_opt(fdList &allFds, int userNbr, std::vector opt, int return; } -void do_user_option(fdList &allFds, int userNbr, std::string opt) +void do_user_option(fdList &allFds, int userNbr, std::string opt, int new_target) { (void)allFds; (void)userNbr; - for (int i = 0; opt[i]; i++) + for (int i = 1; opt[i]; i++) { - //call option - //switch ? if forest? map container ? 2 tab (name and function pointer) ? - // opt_i(int signe (+ ou -), user); + } return; } @@ -245,7 +279,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) search_and_erase(splitBuff[2], "opsitnmlbvk"); std::cout << "splitbuff[2] after = " << splitBuff[2] << std::endl; - if ((splitBuff[2].size() < 2) && (splitBuff[2][0] == '-' || splitBuff[2][0] == '+')) + if ((splitBuff[2].size() < 2) && (splitBuff[2][0] != '-' || splitBuff[2][0] != '+')) { std::cout << "Bad params" << std::endl; return ; @@ -261,7 +295,17 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) // " :No such nick/channel" return ; } - search_and_erase(splitBuff[2], "iwso"); + else if ((find_user(allFds, splitBuff[1]) != -1)) + { + pos = find_user(allFds, splitBuff[1]); + search_and_erase(splitBuff[2], "iswo"); + if ((splitBuff[2].size() < 2) && (splitBuff[2][0] != '-' || splitBuff[2][0] != '+')) + { + std::cout << "Bad params" << std::endl; + return ; + } + do_user_opt(allFds, userNbr, splitBuff, pos); + } //do_option one by one here (do_user_opt)? } \ No newline at end of file From ebb27f0f0e5804bf5b300c53628b83c2140328d0 Mon Sep 17 00:00:00 2001 From: PrStein Date: Tue, 28 Feb 2023 23:24:34 +0100 Subject: [PATCH 08/11] debut de do_user_opt question user i --- srcs/commands/channel_op/mode.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index 44ebf58..dc8874f 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -6,7 +6,7 @@ /* By: sadjigui +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/02/27 23:58:08 by sadjigui ### ########.fr */ +/* Updated: 2023/02/28 23:23:06 by sadjigui ### ########.fr */ /* */ /* ************************************************************************** */ @@ -239,13 +239,33 @@ void do_chan_opt(fdList &allFds, int userNbr, std::vector opt, int return; } -void do_user_option(fdList &allFds, int userNbr, std::string opt, int new_target) +void do_user_opt(fdList &allFds, int userNbr, std::vector opt, int new_target) { (void)allFds; (void)userNbr; - for (int i = 1; opt[i]; i++) + (void)new_target; + char opts[4] = {'i', 's', 'w', 'o'}; + bool sign = true; + if (opt[2][0] == '-') + sign = false; + for (int i = 1; opt[2][i]; i++) { - + int j = 0; + while (opts[j] && opts[j] != opt[2][i]) + j++; + switch(j) + { + case 0: std::cout << "User i" << std::endl; + break ; + case 1: allFds.userData[new_target].mode.s = (sign = true) ? true : false; + break ; + case 2: allFds.userData[new_target].mode.w = (sign = true) ? true : false; + break ; + case 3: allFds.userData[new_target].mode.o = (sign = true) ? true : false; + break ; + default: std::cout << "Default" << std::endl; + break ; + } } return; } From e5a4230dddca4e2327fc8f0ddfb24e88b8386ee0 Mon Sep 17 00:00:00 2001 From: PrStein Date: Thu, 2 Mar 2023 23:54:29 +0100 Subject: [PATCH 09/11] petite modification user.mode.i --- srcs/commands/channel_op/mode.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index dc8874f..52d3b0c 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -6,7 +6,7 @@ /* By: sadjigui +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/02/28 23:23:06 by sadjigui ### ########.fr */ +/* Updated: 2023/03/02 23:31:36 by sadjigui ### ########.fr */ /* */ /* ************************************************************************** */ @@ -129,7 +129,7 @@ void chan_opt_v(fdList &allFds, int userNbr, std::vector opt, int c (void)chanNbr; (void)sign; - if (opt.size() != 4) + if (opt.size() < 4) { std::cout << "ERR_NEEDMOREPARAMS" << std::endl; std::cout << "how to use it :/MODE +/-v " << std::endl; @@ -147,7 +147,7 @@ void chan_opt_v(fdList &allFds, int userNbr, std::vector opt, int c if (sign == true && pos == -1) allFds.channelList[chanNbr].verboseList.push_back(&allFds.userData[target]); if (sign == false && pos != -1) - allFds.channelList[chanNbr].verboseList.erase(allFds.channelList[chanNbr].verboseList.begin() + (pos -1)); + allFds.channelList[chanNbr].verboseList.erase(allFds.channelList[chanNbr].verboseList.begin() + pos); } void chan_opt_b(fdList &allFds, int userNbr, std::vector opt, int chanNbr, bool sign) @@ -170,7 +170,7 @@ void chan_opt_b(fdList &allFds, int userNbr, std::vector opt, int c std::cout << ban[i]->userName << std::endl; } } - if (opt.size() == 4) + if (opt.size() <= 4) { int target_in_client = find_user(allFds, opt[3]); if (target_in_client != -1) @@ -182,7 +182,7 @@ void chan_opt_b(fdList &allFds, int userNbr, std::vector opt, int c if (sign == true && target_in_ban == -1) allFds.channelList[chanNbr].banList.push_back(&allFds.userData[target_in_client]); if (sign == false && target_in_ban != -1) - allFds.channelList[chanNbr].banList.erase(allFds.channelList[chanNbr].banList.begin() + (target_in_ban -1)); + allFds.channelList[chanNbr].banList.erase(allFds.channelList[chanNbr].banList.begin() + (target_in_ban)); } } @@ -255,7 +255,7 @@ void do_user_opt(fdList &allFds, int userNbr, std::vector opt, int j++; switch(j) { - case 0: std::cout << "User i" << std::endl; + case 0: allFds.userData[new_target].mode.i = (sign = true) ? true : false; break ; case 1: allFds.userData[new_target].mode.s = (sign = true) ? true : false; break ; @@ -299,7 +299,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) search_and_erase(splitBuff[2], "opsitnmlbvk"); std::cout << "splitbuff[2] after = " << splitBuff[2] << std::endl; - if ((splitBuff[2].size() < 2) && (splitBuff[2][0] != '-' || splitBuff[2][0] != '+')) + if ((splitBuff[2].size() < 2) || (splitBuff[2][0] != '-' && splitBuff[2][0] != '+')) { std::cout << "Bad params" << std::endl; return ; @@ -308,16 +308,16 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) //do_option one by one here (do_chan_opt)? return ; } - else if ((find_user(allFds, splitBuff[1]) == -1)) + // pos = find_user(allFds, splitBuff[1]); + else if ((pos = find_user(allFds, splitBuff[1])) == -1) { std::cout << "user doesn't exist" << std::endl; // 401 ERR_NOSUCHNICK // " :No such nick/channel" return ; } - else if ((find_user(allFds, splitBuff[1]) != -1)) + else { - pos = find_user(allFds, splitBuff[1]); search_and_erase(splitBuff[2], "iswo"); if ((splitBuff[2].size() < 2) && (splitBuff[2][0] != '-' || splitBuff[2][0] != '+')) { From 248d51e77742a347bd12bbd72aeeab3227ad4226 Mon Sep 17 00:00:00 2001 From: PrStein Date: Thu, 9 Mar 2023 00:20:54 +0100 Subject: [PATCH 10/11] ajout condition --- srcs/commands/channel_op/mode.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index 52d3b0c..2c8593e 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -6,7 +6,7 @@ /* By: sadjigui +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/03/02 23:31:36 by sadjigui ### ########.fr */ +/* Updated: 2023/03/09 00:14:57 by sadjigui ### ########.fr */ /* */ /* ************************************************************************** */ @@ -160,7 +160,8 @@ void chan_opt_b(fdList &allFds, int userNbr, std::vector opt, int c (void)ban; if (opt.size() == 3 && sign == true) { - if (ban.size() < 1) + std::cout << "========ban = "<< ban[0] << std::endl; + if (ban.empty() == true) { std::cout << "Nobody was banned on this channel" << std::endl; return ; @@ -173,7 +174,7 @@ void chan_opt_b(fdList &allFds, int userNbr, std::vector opt, int c if (opt.size() <= 4) { int target_in_client = find_user(allFds, opt[3]); - if (target_in_client != -1) + if (target_in_client == -1) { std::cout << "No user found" << std::endl; return ; @@ -255,13 +256,25 @@ void do_user_opt(fdList &allFds, int userNbr, std::vector opt, int j++; switch(j) { - case 0: allFds.userData[new_target].mode.i = (sign = true) ? true : false; + case 0: + if (allFds.userData[userNbr].userName != opt[1]) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "401 *" + opt[1] + " :No such nick/channel\n"); + return ; + } + allFds.userData[new_target].mode.i = (sign = true) ? true : false; break ; case 1: allFds.userData[new_target].mode.s = (sign = true) ? true : false; break ; case 2: allFds.userData[new_target].mode.w = (sign = true) ? true : false; break ; - case 3: allFds.userData[new_target].mode.o = (sign = true) ? true : false; + case 3: + if (allFds.userData[userNbr].mode.o == false) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "482 *" + opt[1] + " :You're not channel\n"); + return ; + } + allFds.userData[new_target].mode.o = (sign = true) ? true : false; break ; default: std::cout << "Default" << std::endl; break ; From 14f0f90c3ed192d1502e340ca674daf1ad06057a Mon Sep 17 00:00:00 2001 From: PrStein Date: Thu, 9 Mar 2023 01:50:54 +0100 Subject: [PATCH 11/11] fix /mode ban --- srcs/commands/channel_op/mode.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index 2c8593e..2da80fe 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -6,7 +6,7 @@ /* By: sadjigui +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/03/09 00:14:57 by sadjigui ### ########.fr */ +/* Updated: 2023/03/09 01:32:07 by sadjigui ### ########.fr */ /* */ /* ************************************************************************** */ @@ -160,7 +160,7 @@ void chan_opt_b(fdList &allFds, int userNbr, std::vector opt, int c (void)ban; if (opt.size() == 3 && sign == true) { - std::cout << "========ban = "<< ban[0] << std::endl; + // std::cout << "========ban = "<< ban[0] << std::endl; if (ban.empty() == true) { std::cout << "Nobody was banned on this channel" << std::endl; @@ -171,7 +171,7 @@ void chan_opt_b(fdList &allFds, int userNbr, std::vector opt, int c std::cout << ban[i]->userName << std::endl; } } - if (opt.size() <= 4) + if (opt.size() >= 4) { int target_in_client = find_user(allFds, opt[3]); if (target_in_client == -1) @@ -183,7 +183,10 @@ void chan_opt_b(fdList &allFds, int userNbr, std::vector opt, int c if (sign == true && target_in_ban == -1) allFds.channelList[chanNbr].banList.push_back(&allFds.userData[target_in_client]); if (sign == false && target_in_ban != -1) + { + std::cout <<"target in bam == "<< allFds.channelList[chanNbr].banList[target_in_ban]->nickname << std::endl; allFds.channelList[chanNbr].banList.erase(allFds.channelList[chanNbr].banList.begin() + (target_in_ban)); + } } }