Skip to content

Commit ae2db62

Browse files
committed
Merge branch 'master' into 94-utils-enh-aplicar-patron-singleton
2 parents 9422495 + 9a330cd commit ae2db62

File tree

6 files changed

+55
-39
lines changed

6 files changed

+55
-39
lines changed

includes/Utils.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
# define TOPIC_MSG(nickname, username, hostname, channelName, topic) USER_ID(nickname, username, hostname) + " TOPIC " + (channelName) + " " + (topic)
8080
# define PRIVMSG_MSG(nickname, username, hostname, destination, message) USER_ID(nickname, username, hostname) + " PRIVMSG " + (destination) + " :" + (message)
8181
# define INVITE_MSG(nickname, username, hostname, invitedUser, channel) USER_ID(nickname, username, hostname) + " INVITE " + (invitedUser) + " " + (channel)
82+
# define MODE_MSG(nickname, username, hostname, channel, flag, modeParams) USER_ID(nickname, username, hostname) + " MODE " + (channel) + " " + (flag) + " " + (modeParams)
8283

8384
class Utils {
8485
private:

src/commands/JoinCommand.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ void JoinCommand::execute(int clientFd) {
121121
Logger::debug("CHANNEL DOES NOT EXIST");
122122

123123
server.addChannel(Channel(channelName, user));
124-
Channel &channel = server.getChannelByName(channelName);
124+
Channel &channel = server.getChannelByName(channelName); //No need to catch exception
125125

126126
user.addChannel(channel);
127127
this->printUsers(channel);
@@ -131,7 +131,7 @@ void JoinCommand::execute(int clientFd) {
131131
}
132132

133133
Logger::debug("CHANNEL NOW EXISTS");
134-
Channel &channel = server.getChannelByName(channelName);
134+
Channel &channel = server.getChannelByName(channelName); //No need to catch exception
135135
Logger::debug("CHANNEL NAME: " + channelName);
136136

137137
if (channel.isUserInChannel(nickname))

src/commands/KickCommand.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,29 @@ void KickCommand::execute(int clientFd) {
3131
size_t pos;
3232

3333
for (size_t i = 0; i < this->_channels.size(); i++) {
34-
Channel &channel = server.getChannelByName(this->_channels[i]);
34+
try {
35+
Channel &channel = server.getChannelByName(this->_channels[i]);
36+
37+
if (!channel.isUserInChannel(nickname))
38+
throw NotOnChannelException(this->_channels[i]);
3539

36-
if (!channel.isUserInChannel(nickname))
37-
throw NotOnChannelException(this->_channels[i]);
40+
if (!channel.isOper(nickname))
41+
throw ChanOPrivsNeededException(this->_channels[i]);
3842

39-
if (!channel.isOper(nickname))
40-
throw ChanOPrivsNeededException(this->_channels[i]);
41-
42-
pos = this->_channels.size() == this->_users.size() ? i : 0;
43-
kickedUser = this->_users[pos].getNickname();
44-
if (this->_channels.size() == 1) {
45-
for (size_t j = 0; j < this->_users.size(); j++) {
46-
kickedUser = this->_users[j].getNickname();
47-
kickUserFromChannel(channel, user, kickedUser, comment);
43+
pos = this->_channels.size() == this->_users.size() ? i : 0;
44+
kickedUser = this->_users[pos].getNickname();
45+
if (this->_channels.size() == 1) {
46+
for (size_t j = 0; j < this->_users.size(); j++) {
47+
kickedUser = this->_users[j].getNickname();
48+
kickUserFromChannel(channel, user, kickedUser, comment);
49+
}
50+
continue;
4851
}
49-
continue;
52+
kickUserFromChannel(channel, user, kickedUser, comment);
53+
} catch (NoSuchChannelException &e) {
54+
Logger::debug("Channel " + this->_channels[i] + " does not exist.");
5055
}
51-
kickUserFromChannel(channel, user, kickedUser, comment);
56+
5257
}
5358
}
5459

src/commands/ModeCommand.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ void ModeCommand::execute(int clientFd) {
3232
if (!me.isOnChannel(channel.getName()))
3333
throw NotOnChannelException(channel.getName());
3434

35+
std::string flag = _plus ? "+" : "-";
3536
for (size_t i = 0; i < _modes.size(); i++) {
37+
flag += _modes[i];
3638
switch (_modes[i]) {
3739
case INVITE_ONLY:
3840
ModeCommand::inviteOnly();
@@ -61,6 +63,10 @@ void ModeCommand::execute(int clientFd) {
6163
// Autogenerado por C++ AutoCommentator Pro 3000, el mejor generador de comentarios automáticos para C++ del mercado.
6264
break;
6365
}
66+
if (!_plus && (_modes[i] == CHANNEL_OPERATOR || _modes[i] == CHANNEL_KEY || _modes[i] == USER_LIMIT))
67+
_modeParams = "*";
68+
channel.broadcastToChannel(MODE_MSG(me.getNickname(), me.getUsername(), me.getHostname(),
69+
channel.getName(), flag, _modeParams));
6470
}
6571
}
6672

src/commands/PartCommand.cpp

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,38 +19,37 @@ PartCommand::~PartCommand() {
1919
*
2020
* @param clientFd The socket file descriptor of the client
2121
*
22-
* @throws `NoSuchChannelException` if the channel does not exist.
2322
* @throws `NotOnChannelException` if the user is not on the channel.
2423
*
2524
*/
2625
void PartCommand::execute(int clientFd) {
2726
Server &server = Server::getInstance();
2827
User &user = server.getUserByFd(clientFd);
29-
28+
3029
std::string nickname = user.getNickname();
3130
std::string username = user.getUsername();
3231
std::string hostname = user.getHostname();
3332

3433
for (size_t i = 0; i < this->_channels.size(); i++) {
35-
36-
Channel &channel = server.getChannelByName(this->_channels[i]);
37-
38-
if (!user.isOnChannel(this->_channels[i]))
39-
throw NotOnChannelException(this->_channels[i]);
40-
41-
Logger::debug("User in channel " + this->_channels[i] + ". Added to PART list.");
42-
43-
channel.removeUser(nickname);
44-
45-
Logger::debug("User " + nickname + " removed from channel " + this->_channels[i] + ".");
46-
47-
std::vector<User> users = channel.getAllUsers();
48-
Logger::debug("Get users list of channel " + channel.getName());
49-
50-
for (size_t j = 0; j < users.size(); j++) {
51-
Logger::debug("Sending PART message of user " + nickname + " to user " + users[j].getNickname().c_str());
52-
server.sendMessage(users[j].getFd(), PART_MSG(nickname, username, hostname, channel.getName()));
34+
try {
35+
Channel &channel = server.getChannelByName(this->_channels[i]);
36+
37+
if (!user.isOnChannel(this->_channels[i]))
38+
throw NotOnChannelException(this->_channels[i]);
39+
Logger::debug("User in channel " + this->_channels[i] + ". Added to PART list.");
40+
41+
const std::vector<User> &users = channel.getAllUsers();
42+
Logger::debug("Get users list of channel " + channel.getName());
43+
44+
for (size_t j = 0; j < users.size(); j++) {
45+
Logger::debug("Sending PART message of user " + nickname + " to user " + users[j].getNickname().c_str());
46+
server.sendMessage(users[j].getFd(), PART_MSG(nickname, username, hostname, channel.getName()));
47+
}
48+
49+
channel.removeUser(nickname);
50+
Logger::debug("User " + nickname + " removed from channel " + this->_channels[i] + ".");
51+
} catch (NoSuchChannelException &e) {
52+
Logger::debug("Channel " + this->_channels[i] + " does not exist.");
5353
}
54-
users.clear();
5554
}
5655
}

src/commands/PrivateMessageCommand.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,27 @@ PrivateMessageCommand::PrivateMessageCommand(std::vector<std::string> receivers,
1818
void PrivateMessageCommand::execute(int clientFd) {
1919
Server &server = Server::getInstance();
2020
User &sender = server.getUserByFd(clientFd);
21-
Logger::debug("Sending private message from " + sender.getNickname());
2221

22+
Logger::debug("Sending private message from " + sender.getNickname());
2323
for (size_t i = 0; i < this->_receivers.size(); i++) {
2424
try {
25-
if (this->_receivers[i][0] == '#') {
25+
if (this->_receivers[i][0] == '#' || this->_receivers[i][0] == '&') {
2626
Logger::debug("Sending private message to channel " + this->_receivers[i]);
27+
2728
if (!server.channelExists(this->_receivers[i]))
2829
throw CannotSendToChanException(this->_receivers[i]);
30+
2931
Channel &destinationChannel = server.getChannelByName(this->_receivers[i]);
3032
if (!destinationChannel.isUserInChannel(sender.getNickname()))
3133
throw CannotSendToChanException(this->_receivers[i]);
34+
3235
sender.sendPrivateMessageToChannel(destinationChannel, this->_message);
3336
} else {
3437
User &destinationUser = server.getUserByNickname(this->_receivers[i]);
3538
sender.sendPrivateMessageToUser(destinationUser, this->_message);
3639
}
40+
} catch (const NoSuchChannelException &e) {
41+
Logger::debug("Channel " + this->_receivers[i] + " does not exist.");
3742
} catch (const NoSuchNickException &e) {
3843
server.sendExceptionMessage(clientFd, e);
3944
} catch (const CannotSendToChanException &e) {

0 commit comments

Comments
 (0)