X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_alias.cpp;h=3e00db7656b854754ec114cef33a3f0947aaf5d0;hb=0a9c72335a3d3dea286382ad3e7635a05713d7cc;hp=935cb8259b2af57cdc309d32dbf106df0afbaa7b;hpb=be0c4f6a3c0e65435f211d817270073dce047396;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_alias.cpp b/src/modules/m_alias.cpp index 935cb8259..3e00db765 100644 --- a/src/modules/m_alias.cpp +++ b/src/modules/m_alias.cpp @@ -68,34 +68,46 @@ class ModuleAlias : public Module bool AllowBots; UserModeReference botmode; + // Whether we are actively executing an alias. + bool active; + 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(" is empty! at " + tag->getTagLocation()); + tag->readString("replace", a.ReplaceFormat, true); + if (a.ReplaceFormat.empty()) + throw ModuleException(" 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) { } @@ -177,6 +189,15 @@ class ModuleAlias : public Module return MOD_RES_PASSTHRU; } + ModResult OnUserPreMessage(User* user, const MessageTarget& target, MessageDetails& details) CXX11_OVERRIDE + { + // Don't echo anything which is caused by an alias. + if (active) + details.echo = false; + + return MOD_RES_PASSTHRU; + } + void OnUserPostMessage(User* user, const MessageTarget& target, const MessageDetails& details) CXX11_OVERRIDE { if ((target.type != MessageTarget::TYPE_CHANNEL) || (details.type != MSG_PRIVMSG)) @@ -351,7 +372,10 @@ class ModuleAlias : public Module { pars.push_back(token); } + + active = true; ServerInstance->Parser.CallHandler(command, pars, user); + active = false; } void Prioritize() CXX11_OVERRIDE