diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-06-06 16:09:23 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-06-06 16:09:23 +0000 |
commit | 715eba3932edef74b3983792be524192bb0fa102 (patch) | |
tree | 4e4fc4514a88dcfe43bbbfd060e91e998628ebf8 /src/modules/m_abbreviation.cpp | |
parent | 58857b594c596bc831fb100971c5d09eea3494c8 (diff) |
On ambiguous abbreviation, list all possibilities and eat the command (numeric 420, unused and as close as i could get it to numeric 421, unknown command)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9847 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_abbreviation.cpp')
-rw-r--r-- | src/modules/m_abbreviation.cpp | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/src/modules/m_abbreviation.cpp b/src/modules/m_abbreviation.cpp index f94f8a5cc..dbda047b5 100644 --- a/src/modules/m_abbreviation.cpp +++ b/src/modules/m_abbreviation.cpp @@ -44,6 +44,8 @@ class ModuleAbbreviation : public Module /* Look for any command that starts with the same characters, if it does, replace the command string with it */ size_t clen = command.length(); + std::string foundcommand, matchlist; + bool foundmatch = false; for (Commandtable::iterator n = ServerInstance->Parser->cmdlist.begin(); n != ServerInstance->Parser->cmdlist.end(); ++n) { if (n->first.length() < clen) @@ -51,14 +53,34 @@ class ModuleAbbreviation : public Module if (command == n->first.substr(0, clen)) { - /* Found the command */ - command = n->first; - return false; + if (!foundmatch) + { + /* Found the command */ + foundcommand = n->first; + foundmatch = true; + } + else + matchlist.append(" ").append(n->first); } } - /* No match, we have to put the . back again so that the invalid command numeric looks correct. */ - command += '.'; + /* Ambiguous command, list the matches */ + if (!matchlist.empty()) + { + user->WriteNumeric(420, "%s :Ambiguous abbreviation, posssible matches: %s%s", user->nick.c_str(), foundcommand.c_str(), matchlist.c_str()); + return true; + } + + if (foundcommand.empty()) + { + /* No match, we have to put the . back again so that the invalid command numeric looks correct. */ + command += '.'; + } + else + { + command = foundcommand; + } + return false; } }; |