From 8170cabf0f43622c86220ddbe527bc84637cc3c7 Mon Sep 17 00:00:00 2001 From: danieldg Date: Sun, 7 Feb 2010 00:36:31 +0000 Subject: Change PROP command format to accept multiple changes in one line git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@12390 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/m_namedmodes.cpp | 49 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 25 deletions(-) (limited to 'src/modules/m_namedmodes.cpp') diff --git a/src/modules/m_namedmodes.cpp b/src/modules/m_namedmodes.cpp index c113b502c..1ba39b54a 100644 --- a/src/modules/m_namedmodes.cpp +++ b/src/modules/m_namedmodes.cpp @@ -39,8 +39,7 @@ class CommandProp : public Command public: CommandProp(Module* parent) : Command(parent, "PROP", 1) { - syntax = " [{+|-}[=value]]"; - TRANSLATE3(TR_TEXT, TR_TEXT, TR_END); + syntax = " {[+-] []}*"; } CmdResult Handle(const std::vector ¶meters, User *src) @@ -52,34 +51,34 @@ class CommandProp : public Command DisplayList(src, chan); return CMD_SUCCESS; } - - std::string prop = parameters[1], value; - std::string::size_type eq = prop.find('='); - if (eq != std::string::npos) + unsigned int i = 1; + std::vector modes; + modes.push_back(parameters[0]); + modes.push_back(""); + while (i < parameters.size()) { - value = prop.substr(eq + 1); - prop = prop.substr(0, eq); - } - bool plus = prop[0] != '-'; - if (prop[0] == '+' || prop[0] == '-') - prop.erase(prop.begin()); + std::string prop = parameters[i++]; + bool plus = prop[0] != '-'; + if (prop[0] == '+' || prop[0] == '-') + prop.erase(prop.begin()); - for(char letter = 'A'; letter <= 'z'; letter++) - { - ModeHandler* mh = ServerInstance->Modes->FindMode(letter, MODETYPE_CHANNEL); - if (mh && mh->name == prop) + for(char letter = 'A'; letter <= 'z'; letter++) { - if (mh->GetNumParams(plus) && value.empty()) - return CMD_FAILURE; - std::vector modes; - modes.push_back(parameters[0]); - modes.push_back((plus ? "+" : "-") + std::string(1, letter)); - modes.push_back(value); - ServerInstance->SendGlobalMode(modes, src); - return CMD_SUCCESS; + ModeHandler* mh = ServerInstance->Modes->FindMode(letter, MODETYPE_CHANNEL); + if (mh && mh->name == prop) + { + modes[1].append((plus ? "+" : "-") + std::string(1, letter)); + if (mh->GetNumParams(plus)) + { + if (i == parameters.size()) + return CMD_FAILURE; + modes.push_back(parameters[i++]); + } + } } } - return CMD_FAILURE; + ServerInstance->SendGlobalMode(modes, src); + return CMD_SUCCESS; } }; -- cgit v1.2.3