From fba8c950975290a54ffb854567ca397e835fdc70 Mon Sep 17 00:00:00 2001 From: aortigos Date: Sun, 17 May 2026 13:44:55 +0200 Subject: [PATCH] join cmd and channel fixes --- Channel/Channel.cpp | 5 +++++ Channel/Channel.hpp | 1 + cmds/join.cpp | 45 ++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/Channel/Channel.cpp b/Channel/Channel.cpp index 8b3db45..dea045f 100644 --- a/Channel/Channel.cpp +++ b/Channel/Channel.cpp @@ -47,6 +47,11 @@ Channel::Channel(std::string &name) : name_(name) { /* std::cout << "Channel wit // Getters std::string Channel::getName() const { return (this->name_); } +const std::set &Channel::getMembers() const +{ + return (members_); +} + // Members void Channel::addMember(int fd) { this->members_.insert(fd); } void Channel::removeMember(int fd) { this->members_.erase(fd); } diff --git a/Channel/Channel.hpp b/Channel/Channel.hpp index f5abd85..de852e6 100644 --- a/Channel/Channel.hpp +++ b/Channel/Channel.hpp @@ -37,6 +37,7 @@ class Channel // Getters std::string getName() const; + const std::set &getMembers() const; // Users diff --git a/cmds/join.cpp b/cmds/join.cpp index 1b491a5..7c6c286 100644 --- a/cmds/join.cpp +++ b/cmds/join.cpp @@ -6,7 +6,7 @@ /* By: aortigos > args; - if (!client.isRegistered()) return (client.send("You are not registered\r\n")); - if (args.empty()) return (client.send("No name specified\r\n")); + if (!client.isRegistered()) return (client.send(":" SERVER_NAME " 451 * :You have not registered\r\n")); + if (args.empty()) return (client.send(":" SERVER_NAME " 461 " + client.getNick() + " JOIN :Not enough parameters\r\n")); std::map::iterator it = channels_.find(args); @@ -29,16 +29,51 @@ void Server::join_cmd(User &client, std::istringstream &ss) channels_[args].addMember(client.getFd()); channels_[args].addOperator(client.getFd()); client.joinChannel(args); - return (client.send("Channel created\r\n")); + + std::string joinMsg = ":" + client.getNick() + "!" + client.getUsername() + "@localhost JOIN " + args + "\r\n"; + channels_[args].broadcast(joinMsg, clients_, -1); + + std::string namesList = ":" SERVER_NAME " 353 " + client.getNick() + " = " + args + " :"; + const std::set &members = channels_[args].getMembers(); + for (std::set::const_iterator m = members.begin(); m != members.end(); m++) + { + std::map::iterator u = clients_.find(*m); + if (u != clients_.end()) + { + if (channels_[args].hasOperator(*m)) + namesList += "@"; + namesList += u->second.getNick() + " "; + } + } + client.send(namesList + "\r\n"); + client.send(":" SERVER_NAME " 366 " + client.getNick() + " " + args + " :End of /NAMES list\r\n"); } else { if (it->second.hasMember(client.getFd())) - client.send("You are already in this channel\r\n"); + client.send(":" SERVER_NAME " 443 " + client.getNick() + " " + args + " :is already on channel\r\n"); else { client.joinChannel(it->first); it->second.addMember(client.getFd()); + std::string joinMsg = ":" + client.getNick() + "!" + client.getUsername() + "@localhost JOIN " + args + "\r\n"; + channels_[args].broadcast(joinMsg, clients_, -1); + + + std::string namesList = ":" SERVER_NAME " 353 " + client.getNick() + " = " + args + " :"; + const std::set &members = channels_[args].getMembers(); + for (std::set::const_iterator m = members.begin(); m != members.end(); m++) + { + std::map::iterator u = clients_.find(*m); + if (u != clients_.end()) + { + if (channels_[args].hasOperator(*m)) + namesList += "@"; + namesList += u->second.getNick() + " "; + } + } + client.send(namesList + "\r\n"); + client.send(":" SERVER_NAME " 366 " + client.getNick() + " " + args + " :End of /NAMES list\r\n"); } } }