]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_alias.cpp
m_spanningtree Refuse topic changes that would result in desync
[user/henk/code/inspircd.git] / src / modules / m_alias.cpp
index 6bd59a78070a788eaf66b951fd84ea12dad841df..9184b10af407ba83af17366e94a9db83a317ccb3 100644 (file)
@@ -57,12 +57,12 @@ class Alias
 
 class ModuleAlias : public Module
 {
-       char fprefix;
+       std::string fprefix;
 
        /* We cant use a map, there may be multiple aliases with the same name.
         * We can, however, use a fancy invention: the multimap. Maps a key to one or more values.
         *              -- w00t
-     */
+        */
        typedef insp::flat_multimap<std::string, Alias, irc::insensitive_swo> AliasMap;
 
        AliasMap Aliases;
@@ -76,8 +76,8 @@ class ModuleAlias : public Module
        {
                ConfigTag* fantasy = ServerInstance->Config->ConfValue("fantasy");
                AllowBots = fantasy->getBool("allowbots", false);
-               std::string fpre = fantasy->getString("prefix", "!");
-               fprefix = fpre.empty() ? '!' : fpre[0];
+               std::string fpre = fantasy->getString("prefix");
+               fprefix = fpre.empty() ? "!" : fpre;
 
                Aliases.clear();
                ConfigTagList tags = ServerInstance->Config->ConfTags("alias");
@@ -193,26 +193,26 @@ class ModuleAlias : public Module
                irc::spacesepstream ss(text);
                ss.GetToken(scommand);
 
-               if (scommand.empty())
+               if (scommand.size() <= fprefix.size())
                {
                        return; // wtfbbq
                }
 
                // we don't want to touch non-fantasy stuff
-               if (*scommand.c_str() != fprefix)
+               if (scommand.compare(0, fprefix.size(), fprefix) != 0)
                {
                        return;
                }
 
                // nor do we give a shit about the prefix
-               scommand.erase(scommand.begin());
+               scommand.erase(0, fprefix.size());
 
                std::pair<AliasMap::iterator, AliasMap::iterator> iters = Aliases.equal_range(scommand);
                if (iters.first == iters.second)
                        return;
 
                /* The parameters for the command in their original form, with the command stripped off */
-               std::string compare(text, scommand.length() + 1);
+               std::string compare(text, scommand.length() + fprefix.size());
                while (*(compare.c_str()) == ' ')
                        compare.erase(compare.begin());
 
@@ -220,8 +220,8 @@ class ModuleAlias : public Module
                {
                        if (i->second.ChannelCommand)
                        {
-                               // We use substr(1) here to remove the fantasy prefix
-                               if (DoAlias(user, c, &(i->second), compare, text.substr(1)))
+                               // We use substr here to remove the fantasy prefix
+                               if (DoAlias(user, c, &(i->second), compare, text.substr(fprefix.size())))
                                        return;
                        }
                }
@@ -253,14 +253,14 @@ class ModuleAlias : public Module
                        User* u = ServerInstance->FindNick(a->RequiredNick);
                        if (!u)
                        {
-                               user->WriteNumeric(ERR_NOSUCHNICK, a->RequiredNick + " :is currently unavailable. Please try again later.");
+                               user->WriteNumeric(ERR_NOSUCHNICK, a->RequiredNick, "is currently unavailable. Please try again later.");
                                return 1;
                        }
 
                        if ((a->ULineOnly) && (!u->server->IsULine()))
                        {
                                ServerInstance->SNO->WriteToSnoMask('a', "NOTICE -- Service "+a->RequiredNick+" required by alias "+a->AliasedCommand+" is not on a u-lined server, possibly underhanded antics detected!");
-                               user->WriteNumeric(ERR_NOSUCHNICK, a->RequiredNick + " :is an imposter! Please inform an IRC operator as soon as possible.");
+                               user->WriteNumeric(ERR_NOSUCHNICK, a->RequiredNick, "is an imposter! Please inform an IRC operator as soon as possible.");
                                return 1;
                        }
                }