diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-08-29 18:26:55 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-08-29 18:26:55 +0000 |
commit | b9e99da4dafd836e995970216835cefe3716a01a (patch) | |
tree | 3e1a53384d20e350adf6a23ac964b9429e735e6b /src/snomasks.cpp | |
parent | e7aac9ee56d7bfff83287e3068ac18f60d43a1f9 (diff) |
Snomask support cometh! and it leave a sticky white mess all over the floor :(
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5062 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/snomasks.cpp')
-rw-r--r-- | src/snomasks.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/snomasks.cpp b/src/snomasks.cpp index 6750ebcc6..650403a53 100644 --- a/src/snomasks.cpp +++ b/src/snomasks.cpp @@ -16,6 +16,7 @@ #include <string> #include <vector> +#include <stdarg.h> #include "configreader.h" #include "users.h" #include "modules.h" @@ -25,9 +26,67 @@ SnomaskManager::SnomaskManager(InspIRCd* Instance) : ServerInstance(Instance) { + SnoMasks.clear(); } SnomaskManager::~SnomaskManager() { } +bool SnomaskManager::EnableSnomask(char letter, const std::string &type) +{ + if (SnoMasks.find(letter) == SnoMasks.end()) + { + SnoMasks[letter] = type; + return true; + } + return false; +} + +bool SnomaskManager::DisableSnomask(char letter) +{ + SnoList::iterator n = SnoMasks.find(letter); + if (n != SnoMasks.end()) + { + SnoMasks.erase(n); + return true; + } + return false; +} + +void SnomaskManager::WriteToSnoMask(char letter, const std::string &text) +{ + /* Only send to snomask chars which are enabled */ + SnoList::iterator n = SnoMasks.find(letter); + if (n != SnoMasks.end()) + { + /* Only opers can receive snotices, so we iterate the oper list */ + for (std::vector<userrec*>::iterator i = ServerInstance->all_opers.begin(); i != ServerInstance->all_opers.end(); i++) + { + userrec* a = *i; + if (IS_LOCAL(a) && a->modes[UM_SERVERNOTICE] && a->modes[UM_SNOMASK] && a->IsNoticeMaskSet(n->first)) + { + /* send server notices to all with +ns */ + a->WriteServ("NOTICE %s :*** %s: %s",a->nick, n->second.c_str(), text.c_str()); + } + } + } +} + +void SnomaskManager::WriteToSnoMask(char letter, const char* text, ...) +{ + char textbuffer[MAXBUF]; + va_list argsPtr; + + va_start(argsPtr, text); + vsnprintf(textbuffer, MAXBUF, text, argsPtr); + va_end(argsPtr); + + this->WriteToSnoMask(letter, std::string(textbuffer)); +} + +bool SnomaskManager::IsEnabled(char letter) +{ + return (SnoMasks.find(letter) != SnoMasks.end()); +} + |