From b9e99da4dafd836e995970216835cefe3716a01a Mon Sep 17 00:00:00 2001 From: brain Date: Tue, 29 Aug 2006 18:26:55 +0000 Subject: 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 --- src/snomasks.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'src/snomasks.cpp') 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 #include +#include #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::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()); +} + -- cgit v1.3.1-10-gc9f91