From f84492e17587f1c1ca392106a160e2801f4c3341 Mon Sep 17 00:00:00 2001 From: Raphael Date: Wed, 18 Jun 2025 12:57:32 +0200 Subject: [PATCH] fix(cmd/mode): now topic mode is for protect not edit --- include/channel.hpp | 5 ++++- sources/channel/channel.cpp | 11 +++++++++-- sources/commands/modes.cpp | 15 +++++++++++---- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/include/channel.hpp b/include/channel.hpp index edbbd29..c8dcd67 100644 --- a/include/channel.hpp +++ b/include/channel.hpp @@ -6,7 +6,7 @@ /* By: sben-tay +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/20 22:18:17 by rparodi #+# #+# */ -/* Updated: 2025/06/18 01:18:05 by sben-tay ### ########.fr */ +/* Updated: 2025/06/18 12:24:15 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -33,8 +33,10 @@ class Channel { bool isOperator(User *user) const; bool isUserInChannel(User *user) const; bool getNeedInvite() const; + bool getProtectTopic() const; // setters + void setProtectTopic(bool toSet); void setMaxUser(size_t args); void setNeedInvite(bool toSet); void setTopic(const std::string &topic); @@ -53,6 +55,7 @@ class Channel { std::string _password; size_t _maxUsers; bool _needInvite; + bool _protectTopic; std::string _topic; std::list _operators; std::list _users; diff --git a/sources/channel/channel.cpp b/sources/channel/channel.cpp index c9acd75..c746077 100644 --- a/sources/channel/channel.cpp +++ b/sources/channel/channel.cpp @@ -6,7 +6,7 @@ /* By: sben-tay +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/20 22:43:24 by rparodi #+# #+# */ -/* Updated: 2025/06/18 01:17:37 by sben-tay ### ########.fr */ +/* Updated: 2025/06/18 12:20:01 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -145,6 +145,13 @@ bool Channel::isUserInChannel(User *user) const { return false; } +bool Channel::getProtectTopic() const { + return this->_protectTopic; +} + +void Channel::setProtectTopic(bool toSet) { + this->_protectTopic = toSet; +} /** * @brief Setter for the topic of the channel * @@ -226,4 +233,4 @@ void Channel::sendAllClientInAChannel(const std::string toSend, User *sender) { } (*it)->appendToWriteBuffer(toSend); } -} \ No newline at end of file +} diff --git a/sources/commands/modes.cpp b/sources/commands/modes.cpp index eae6a72..5239739 100644 --- a/sources/commands/modes.cpp +++ b/sources/commands/modes.cpp @@ -98,9 +98,12 @@ e_code Mode::checkArgs() { const e_mode &ret = this->_mode[i].first; if (ret == ERROR_MODE) return ERR_UNKNOWNMODE; - if ((ret == CHAN_SET_KEY && this->_mode[i].second.add) || (ret == CHAN_SET_TOPIC && this->_mode[i].second.add) || (ret == CHAN_SET_LIMIT && this->_mode[i].second.add) || ret == CHAN_SET_OP) - if (this->_mode[i].second.arguments.empty()) + if ((ret == CHAN_SET_KEY && this->_mode[i].second.add) || (ret == CHAN_SET_LIMIT && this->_mode[i].second.add) || ret == CHAN_SET_OP) + if (this->_mode[i].second.arguments.empty()) { + std::string msg461 = ":localhost 461 " + this->_sender->getNickname() + " " + this->_command + " :Not enough parameters\r\n"; + this->_sender->appendToWriteBuffer(msg461); return ERR_NEEDMOREPARAMS; + } if (searchList(this->_cTarget->getOperators(), this->_sender->getName()) != NULL) { WARNING_MSG("You are not an operator in the channel for INVITE command"); return ERR_CHANOPRIVSNEEDED; @@ -172,9 +175,13 @@ void Mode::execute() { break; case CHAN_SET_TOPIC: if (this->_mode[i].second.add) { - this->_cTarget->setTopic(this->_mode[i].second.arguments); + if (this->_cTarget->getProtectTopic()) + DEBUG_MSG("Topic is already protected"); + this->_cTarget->setProtectTopic(true); } else if (this->_mode[i].second.remove) { - this->_cTarget->setTopic(""); + if (!this->_cTarget->getProtectTopic()) + DEBUG_MSG("Topic is already non-protected"); + this->_cTarget->setProtectTopic(false); } break; default: