flemme de fou kick topic wallops start name

This commit is contained in:
kinou-p 2023-02-18 00:52:35 +01:00
parent 68466e609a
commit da5580b615
12 changed files with 174 additions and 20 deletions

View File

@ -6,7 +6,7 @@
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2022/12/01 17:27:29 by apommier #+# #+# #
# Updated: 2023/02/16 18:21:46 by apommier ### ########.fr #
# Updated: 2023/02/17 16:02:14 by apommier ### ########.fr #
# #
# **************************************************************************** #
@ -47,6 +47,7 @@ SRCS := main.cpp\
commands/operator/squit.cpp\
commands/operator/oper.cpp\
commands/operator/kill.cpp\
commands/operator/wallops.cpp\
\
commands/not_done_cmd.cpp #special (temporary)

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:37 by apommier #+# #+# */
/* Updated: 2023/02/16 23:01:17 by apommier ### ########.fr */
/* Updated: 2023/02/17 21:56:13 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -132,6 +132,7 @@ struct channelData //each chan have one
std::vector<clientData *> userList;
std::vector<clientData *> banList;
//std::vector<clientData *> invitedList;
std::vector<clientData *> opList;
chanMode mode;
@ -169,6 +170,7 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY
/* ************************************************************************** */
void del_user_in_chan(clientData *user, channelData *chan);
void del_chan_in_user(clientData *user, channelData *chan);
void delete_user(fdList &allFds, int userNbr);
/* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/09 17:21:57 by apommier #+# #+# */
/* Updated: 2023/02/16 22:52:31 by apommier ### ########.fr */
/* Updated: 2023/02/16 23:26:08 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -17,6 +17,8 @@ int is_chan_op(fdList &allFds, channelData *chanName, int userNbr)
std::vector<clientData*>::iterator start = chanName->opList.begin();
std::vector<clientData*>::iterator pastEnd = chanName->opList.end();
//std::cout << "name1= ---" << chanName << "---\n";
if (allFds.userData[userNbr].op)
return (1);
while (start != pastEnd)
{
//std::cout << "result in find chan = " << pastEnd - start << std::endl;

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/09 15:40:33 by apommier #+# #+# */
/* Updated: 2023/02/16 18:47:49 by apommier ### ########.fr */
/* Updated: 2023/02/16 23:47:14 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -91,7 +91,8 @@ void join_or_create(std::string buffer, fdList &allFds, int userNbr)
{
std::cout << "new chan\n";
channelData new_chan;
if (splitBuff[1][0] != '#' && splitBuff[1][0] != '&')
cmd_error(allFds, allFds.userData[userNbr].fd, "476 * " + splitBuff[1] + " :Bad Channel Mask\n");
new_chan.name = splitBuff[1];
new_chan.nbrUser = 1;
new_chan.userList.push_back(&allFds.userData[userNbr]);

View File

@ -0,0 +1,12 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* list.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/18 00:50:51 by apommier #+# #+# */
/* Updated: 2023/02/18 00:50:52 by apommier ### ########.fr */
/* */
/* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 08:53:03 by apommier #+# #+# */
/* Updated: 2023/02/15 15:18:38 by apommier ### ########.fr */
/* Updated: 2023/02/16 23:20:25 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -62,6 +62,11 @@ void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
cmd_error(allFds, allFds.userData[userNbr].fd, "401 * PRIVMSG " + dest + " :No such nick/channel\n");
return ;
}
// if (allFds.channelList[pos].mode.m && !allFds.userData[userNbr].op && !is_chan_op(allFds, &allFds.channelList[pos], userNbr) && !allFds.channelList[pos].userMode[nbr].v)
// {
// cmd_error(allFds, allFds.userData[userNbr].fd, "404 * PRIVMSG " + dest + " :Cannot send to channel\n");
// return ;
// }
for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++)
{
std::cout << "send nickname " << allFds.channelList[pos].userList[i]->nickname << std::endl;

View File

@ -6,16 +6,66 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:19:32 by apommier #+# #+# */
/* Updated: 2023/02/11 20:06:32 by apommier ### ########.fr */
/* Updated: 2023/02/17 21:54:06 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../../includes/ft_irc.hpp"
//Paramètres: <canal> <utilisateur> [<commentaire>]
void KICK(std::string buffer, fdList &allFds, int userNbr)
{
(void)buffer;
(void)allFds;
(void)userNbr;
std::vector<std::string> splitBuff;
std::string msg;
int chanPos;
int userPos;
channelData chan;
split(buffer, ' ', splitBuff);
if (splitBuff.size() < 3)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "431 * KICK :Not enought argument\n");
return ;
}
if ((chanPos = find_channel(allFds, splitBuff[1])) == -1)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "401 * KICK " + splitBuff[1] + " :No such nick/channel\n");
return ;
}
if (!allFds.userData[userNbr].op && is_joined(allFds, splitBuff[1], userNbr) == -1)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "422 * " + splitBuff[1] + " :You're not on that channel\n");
return ;
}
if (chanPos != -1)
{
chan = allFds.channelList[chanPos];
if (!is_chan_op(allFds, &chan, userNbr) && !allFds.userData[userNbr].op)
cmd_error(allFds, allFds.userData[userNbr].fd, "482 * " + splitBuff[1] + " :You're not channel operator\n");
return ;
}
msg = ":" + allFds.userData[userNbr].nickname + " KICK " + chan.name + " " + splitBuff[2];
if (splitBuff.size() > 3)
msg += ": " + buffer.substr(splitBuff[0].size() + splitBuff[1].size() + splitBuff[2].size() + 1, std::string::npos);
if ((userPos = find_user(allFds, splitBuff[2])) == -1)
return ;
del_user_in_chan(&allFds.userData[userPos], &allFds.channelList[chanPos]);
del_chan_in_user(&allFds.userData[userPos], &allFds.channelList[chanPos]);
send(allFds.userData[userPos].fd, msg.c_str(), msg.size(), 0);
// else if (!allFds.userData[userNbr].op)
// {
// cmd_error(allFds, allFds.userData[userNbr].fd, "482 * " + splitBuff[1] + " :You're not channel operator\n");
// return ;
// }
return ;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:19:52 by apommier #+# #+# */
/* Updated: 2023/02/11 20:05:50 by apommier ### ########.fr */
/* Updated: 2023/02/17 21:55:29 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -14,8 +14,39 @@
void TOPIC(std::string buffer, fdList &allFds, int userNbr)
{
(void)buffer;
(void)allFds;
(void)userNbr;
channelData chan;
int chanNbr;
std::vector<std::string> splitBuff;
split(buffer, ' ', splitBuff);
if (splitBuff.size() < 2)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * TOPIC :Not enough parameters\n");
return ;
}
if (is_joined(allFds, splitBuff[1], userNbr) == -1)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "422 * " + splitBuff[1] + " :You're not on that channel\n");
return ;
}
if ((chanNbr = find_channel(allFds, splitBuff[1])) != -1)
{
chan = allFds.channelList[chanNbr];
if (!is_chan_op(allFds, &chan, userNbr) && !allFds.userData[userNbr].op)
cmd_error(allFds, allFds.userData[userNbr].fd, "482 * " + splitBuff[1] + " :You're not channel operator\n");
return ;
}
// else if (!allFds.userData[userNbr].op && !allFds.userData[userNbr].op)
// {
// cmd_error(allFds, allFds.userData[userNbr].fd, "482 * " + splitBuff[1] + " :You're not channel operator\n");
// return ;
// }
if (splitBuff.size() < 3)
std::cout << "PRINT TOPIC here\n";//RPL_NOTOPIC //RPL_TOPIC
else
{
allFds.channelList[chanNbr].topic = buffer.substr(6 + splitBuff[1].size() + 1, std::string::npos);
//RPL_TOPIC
}
return ;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:04:47 by apommier #+# #+# */
/* Updated: 2023/02/15 19:43:22 by apommier ### ########.fr */
/* Updated: 2023/02/17 20:38:40 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -41,6 +41,7 @@ void OPER(std::string buffer, fdList &allFds, int userNbr)
// return ;
// }
allFds.userData[userNbr].op = 1;
allFds.userData[userNbr].mode.s = 1;
msg = "381 * " + allFds.userData[userNbr].nickname + " :You are now an IRC operator\n";
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
}

View File

@ -6,8 +6,31 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/16 17:09:38 by apommier #+# #+# */
/* Updated: 2023/02/16 17:09:45 by apommier ### ########.fr */
/* Updated: 2023/02/17 21:13:21 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../../includes/ft_irc.hpp"
#include "../../../includes/ft_irc.hpp"
void WALLOPS(std::string buffer, fdList &allFds, int userNbr)
{
std::vector<std::string> splitBuff;
std::string msg;
//std::cout << "privmsg bufer= --" << buffer << std::endl;
split(buffer, ' ', splitBuff);
if (splitBuff.size() < 2)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "431 * WALLOPS :Not enought argument\n");
return ;
}
msg = ":" + allFds.userData[userNbr].nickname + " WALLOPS :" + buffer.substr(splitBuff[1].size() + std::string::npos + 1) + "\n";
//msg = "PRIVMSG " + allFds.userData[userNbr].nickname + " " + buffer.substr(splitBuff[1].size() + std::string::npos + 1);
for (int i = 0; i < allFds.nbrUser; i++)
{
if (allFds.userData[i].op && allFds.userData[i].mode.s)
send(allFds.userData[i].fd, msg.c_str(), msg.size(), 0);
//PRIVMSG(msg, allFds, userNbr);
}
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/16 18:14:15 by apommier #+# #+# */
/* Updated: 2023/02/16 18:19:48 by apommier ### ########.fr */
/* Updated: 2023/02/18 00:51:24 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -17,5 +17,22 @@ void NAMES(std::string buffer, fdList &allFds, int userNbr)
(void)buffer;
(void)allFds;
(void)userNbr;
return ;
// std::vector<std::string> splitBuff;
// int pos;
// split(buffer, ' ', splitBuff);
// if (splitBuff.size() == 1 || splitBuff[1] == "0")
// {
// for (int i = 0; i < allFds.nbrUser; i++)
// {
// if (!allFds.userData[i].mode.i)
// {
// //print who
// }
// }
// return ;
// }
// if (pos = find_channel(allFds, splitBuff[1]) != -1)
// return ;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/12 20:38:50 by apommier #+# #+# */
/* Updated: 2023/02/16 23:01:04 by apommier ### ########.fr */
/* Updated: 2023/02/17 21:49:52 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -21,6 +21,15 @@ void del_user_in_chan(clientData *user, channelData *chan)
chan->nbrUser--;
}
void del_chan_in_user(clientData *user, channelData *chan)
{
size_t i;
for (i = 0; chan != user->joinedChan[i]; i++)
;
user->joinedChan.erase(user->joinedChan.begin() + i);
//user->nbrUser--;
}
void delete_user(fdList &allFds, int userNbr)
{
std::cout << "Delete user nbr " << userNbr << std::endl;