]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_alias.cpp
Various improvements to UNIX socket support.
[user/henk/code/inspircd.git] / src / modules / m_alias.cpp
index 6f27ecc095ec0947f236542f845d293cebca49d1..f6aa5bd0229e8640ad0a07c04546146149689575 100644 (file)
@@ -74,37 +74,46 @@ class ModuleAlias : public Module
  public:
        void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
        {
-               ConfigTag* fantasy = ServerInstance->Config->ConfValue("fantasy");
-               AllowBots = fantasy->getBool("allowbots", false);
-               fprefix = fantasy->getString("prefix", "!", 1, ServerInstance->Config->Limits.MaxLine);
-
-               Aliases.clear();
+               AliasMap newAliases;
                ConfigTagList tags = ServerInstance->Config->ConfTags("alias");
                for(ConfigIter i = tags.first; i != tags.second; ++i)
                {
                        ConfigTag* tag = i->second;
                        Alias a;
                        a.AliasedCommand = tag->getString("text");
-                       std::transform(a.AliasedCommand.begin(), a.AliasedCommand.end(), a.AliasedCommand.begin(), ::toupper);
+                       if (a.AliasedCommand.empty())
+                               throw ModuleException("<alias:text> is empty! at " + tag->getTagLocation());
+
                        tag->readString("replace", a.ReplaceFormat, true);
+                       if (a.ReplaceFormat.empty())
+                               throw ModuleException("<alias:replace> is empty! at " + tag->getTagLocation());
+
                        a.RequiredNick = tag->getString("requires");
                        a.ULineOnly = tag->getBool("uline");
                        a.ChannelCommand = tag->getBool("channelcommand", false);
                        a.UserCommand = tag->getBool("usercommand", true);
                        a.OperOnly = tag->getBool("operonly");
                        a.format = tag->getString("format");
-                       Aliases.insert(std::make_pair(a.AliasedCommand, a));
+
+                       std::transform(a.AliasedCommand.begin(), a.AliasedCommand.end(), a.AliasedCommand.begin(), ::toupper);
+                       newAliases.insert(std::make_pair(a.AliasedCommand, a));
                }
+
+               ConfigTag* fantasy = ServerInstance->Config->ConfValue("fantasy");
+               AllowBots = fantasy->getBool("allowbots", false);
+               fprefix = fantasy->getString("prefix", "!", 1, ServerInstance->Config->Limits.MaxLine);
+               Aliases.swap(newAliases);
        }
 
        ModuleAlias()
                : botmode(this, "bot")
+               , active(false)
        {
        }
 
        Version GetVersion() CXX11_OVERRIDE
        {
-               return Version("Provides aliases of commands.", VF_VENDOR);
+               return Version("Provides aliases of commands", VF_VENDOR);
        }
 
        std::string GetVar(std::string varname, const std::string &original_line)
@@ -273,8 +282,8 @@ class ModuleAlias : public Module
 
                        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.");
+                               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 a server operator as soon as possible.");
                                return 1;
                        }
                }