]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_alias.cpp
Sync helpop chmodes s and p with docs
[user/henk/code/inspircd.git] / src / modules / m_alias.cpp
index f6aa5bd0229e8640ad0a07c04546146149689575..7fc0f3bb038f360e3e0f69782abeee5f516c4c2d 100644 (file)
@@ -1,10 +1,15 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
- *   Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
- *   Copyright (C) 2005, 2009 Robin Burchell <robin+git@viroteck.net>
- *   Copyright (C) 2004-2007, 2009 Craig Edwards <craigedwards@brainbox.cc>
- *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ *   Copyright (C) 2018-2019 linuxdaemon <linuxdaemon.irc@gmail.com>
+ *   Copyright (C) 2013, 2015-2019, 2021 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2012-2015, 2018 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
+ *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+ *   Copyright (C) 2009 Matt Smith <dz@inspircd.org>
+ *   Copyright (C) 2008-2009 Robin Burchell <robin+git@viroteck.net>
+ *   Copyright (C) 2007-2008 Dennis Friis <peavey@inspircd.org>
+ *   Copyright (C) 2004, 2006-2009 Craig Edwards <brain@inspircd.org>
  *
  * This file is part of InspIRCd.  InspIRCd is free software: you can
  * redistribute it and/or modify it under the terms of the GNU General Public
@@ -50,6 +55,9 @@ class Alias
 
        /** Format that must be matched for use */
        std::string format;
+
+       /** Strip color codes before match? */
+       bool StripColor;
 };
 
 class ModuleAlias : public Module
@@ -94,6 +102,7 @@ class ModuleAlias : public Module
                        a.UserCommand = tag->getBool("usercommand", true);
                        a.OperOnly = tag->getBool("operonly");
                        a.format = tag->getString("format");
+                       a.StripColor = tag->getBool("stripcolor");
 
                        std::transform(a.AliasedCommand.begin(), a.AliasedCommand.end(), a.AliasedCommand.begin(), ::toupper);
                        newAliases.insert(std::make_pair(a.AliasedCommand, a));
@@ -113,7 +122,7 @@ class ModuleAlias : public Module
 
        Version GetVersion() CXX11_OVERRIDE
        {
-               return Version("Provides aliases of commands", VF_VENDOR);
+               return Version("Allows the server administrator to define custom channel commands (e.g. !kick) and server commands (e.g. /OPERSERV).", VF_VENDOR);
        }
 
        std::string GetVar(std::string varname, const std::string &original_line)
@@ -157,7 +166,7 @@ class ModuleAlias : public Module
 
        ModResult OnPreCommand(std::string& command, CommandBase::Params& parameters, LocalUser* user, bool validated) CXX11_OVERRIDE
        {
-               /* If theyre not registered yet, we dont want
+               /* If they're not registered yet, we dont want
                 * to know.
                 */
                if (user->registered != REG_ALL)
@@ -261,10 +270,14 @@ class ModuleAlias : public Module
 
        int DoAlias(User *user, Channel *c, Alias *a, const std::string& compare, const std::string& safe)
        {
+               std::string stripped(compare);
+               if (a->StripColor)
+                       InspIRCd::StripColor(stripped);
+
                /* Does it match the pattern? */
                if (!a->format.empty())
                {
-                       if (!InspIRCd::Match(compare, a->format))
+                       if (!InspIRCd::Match(stripped, a->format))
                                return 0;
                }
 
@@ -273,17 +286,18 @@ class ModuleAlias : public Module
 
                if (!a->RequiredNick.empty())
                {
-                       User* u = ServerInstance->FindNick(a->RequiredNick);
+                       int numeric = a->ULineOnly ? ERR_NOSUCHSERVICE : ERR_NOSUCHNICK;
+                       User* u = ServerInstance->FindNickOnly(a->RequiredNick);
                        if (!u)
                        {
-                               user->WriteNumeric(ERR_NOSUCHNICK, a->RequiredNick, "is currently unavailable. Please try again later.");
+                               user->WriteNumeric(numeric, 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 a server operator as soon as possible.");
+                               user->WriteNumeric(numeric, a->RequiredNick, "is not a network service! Please inform a server operator as soon as possible.");
                                return 1;
                        }
                }