summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/snomasks.h6
-rw-r--r--src/snomasks.cpp23
2 files changed, 19 insertions, 10 deletions
diff --git a/include/snomasks.h b/include/snomasks.h
index 6e3f75d7a..5bd4742c1 100644
--- a/include/snomasks.h
+++ b/include/snomasks.h
@@ -24,10 +24,11 @@ class Snomask : public Extensible
std::string Description;
std::string LastMessage;
unsigned int Count;
+ bool LocalOnly; // whether or not messages are netwide
/** Create a new Snomask
*/
- Snomask(InspIRCd* Instance, char snomask, const std::string &description) : ServerInstance(Instance), MySnomask(snomask), Description(description), LastMessage(""), Count(0)
+ Snomask(InspIRCd* Instance, char snomask, const std::string &description, bool local) : ServerInstance(Instance), MySnomask(snomask), Description(description), LastMessage(""), Count(0), LocalOnly(local)
{
}
@@ -77,10 +78,11 @@ class CoreExport SnomaskManager : public Extensible
* their list, and users may add this letter to their list.
* @param description The descriptive text sent along with any
* server notices, at the start of the notice, e.g. "GLOBOPS".
+ * @param local Whether or not messages should be locally broadcast only (default off)
* @return True if the snomask was enabled, false if it already
* exists.
*/
- bool EnableSnomask(char letter, const std::string &description);
+ bool EnableSnomask(char letter, const std::string &description, bool local = false);
/** Disable a snomask.
* @param letter The snomask letter to disable.
diff --git a/src/snomasks.cpp b/src/snomasks.cpp
index 08b98c002..de900623d 100644
--- a/src/snomasks.cpp
+++ b/src/snomasks.cpp
@@ -35,11 +35,11 @@ void SnomaskManager::FlushSnotices()
}
}
-bool SnomaskManager::EnableSnomask(char letter, const std::string &type)
+bool SnomaskManager::EnableSnomask(char letter, const std::string &type, bool local)
{
if (SnoMasks.find(letter) == SnoMasks.end())
{
- Snomask *s = new Snomask(ServerInstance, letter, type);
+ Snomask *s = new Snomask(ServerInstance, letter, type, local);
SnoMasks[letter] = s;
return true;
}
@@ -87,11 +87,11 @@ bool SnomaskManager::IsEnabled(char letter)
void SnomaskManager::SetupDefaults()
{
- this->EnableSnomask('c',"CONNECT"); /* Local connect notices */
+ this->EnableSnomask('c',"CONNECT", true); /* Local connect notices */
this->EnableSnomask('C',"REMOTECONNECT"); /* Remote connect notices */
- this->EnableSnomask('q',"QUIT"); /* Local quit notices */
+ this->EnableSnomask('q',"QUIT", true); /* Local quit notices */
this->EnableSnomask('Q',"REMOTEQUIT"); /* Remote quit notices */
- this->EnableSnomask('k',"KILL"); /* Kill notices */
+ this->EnableSnomask('k',"KILL", true); /* Kill notices */
this->EnableSnomask('K',"REMOTEKILL"); /* Remote kill notices */
this->EnableSnomask('l',"LINK"); /* Link notices */
this->EnableSnomask('o',"OPER"); /* Oper up/down notices */
@@ -137,9 +137,16 @@ void Snomask::Flush()
}
}
- ServerInstance->PI->SendSNONotice(MySnomask, this->Description + ": " + this->LastMessage);
- if (Count > 1)
- ServerInstance->PI->SendSNONotice(MySnomask, this->Description + ": (last message repeated " + Count + " times)");
+ if (!LocalOnly)
+ {
+ // XXX this is a bit ugly.
+ std::string sno;
+ sno[0] = MySnomask;
+
+ ServerInstance->PI->SendSNONotice(sno, this->Description + ": " + this->LastMessage);
+ if (Count > 1)
+ ServerInstance->PI->SendSNONotice(sno, this->Description + ": (last message repeated " + ConvToStr(Count) + " times)");
+ }
LastMessage = "";
Count = 1;