summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/snomasks.h18
-rw-r--r--src/snomasks.cpp19
2 files changed, 35 insertions, 2 deletions
diff --git a/include/snomasks.h b/include/snomasks.h
index a8e5c525c..e1af1a109 100644
--- a/include/snomasks.h
+++ b/include/snomasks.h
@@ -90,19 +90,33 @@ class CoreExport SnomaskManager : public Extensible
*/
bool DisableSnomask(char letter);
- /** Write to all users with a given snomask.
+ /** Write to all users with a given snomask (local server only)
* @param letter The snomask letter to write to
* @param text The text to send to the users
*/
void WriteToSnoMask(char letter, const std::string &text);
- /** Write to all users with a given snomask.
+ /** Write to all users with a given snomask (local server only)
* @param letter The snomask letter to write to
* @param text A format string containing text to send
* @param ... Format arguments
*/
void WriteToSnoMask(char letter, const char* text, ...) CUSTOM_PRINTF(3, 4);
+ /** Write to all users with a given snomask (sent globally)
+ * @param letter The snomask letter to write to
+ * @param text The text to send to the users
+ */
+ void WriteGlobalSno(char letter, const std::string &text);
+
+ /** Write to all users with a given snomask (sent globally)
+ * @param letter The snomask letter to write to
+ * @param text A format string containing text to send
+ * @param ... Format arguments
+ */
+ void WriteGlobalSno(char letter, const char* text, ...) CUSTOM_PRINTF(3, 4);
+
+
/** Called once per 5 seconds from the mainloop, this flushes any cached
* snotices. The way the caching works is as follows:
* Calls to WriteToSnoMask write to a cache, if the call is the same as it was
diff --git a/src/snomasks.cpp b/src/snomasks.cpp
index 2e682675d..e12f95d6b 100644
--- a/src/snomasks.cpp
+++ b/src/snomasks.cpp
@@ -73,6 +73,13 @@ void SnomaskManager::WriteToSnoMask(char letter, const std::string &text)
}
}
+void SnomaskManager::WriteGlobalSno(char letter, const std::string& text)
+{
+ WriteToSnoMask(letter, text);
+ letter = toupper(letter);
+ ServerInstance->PI->SendSNONotice(std::string(1, letter), text);
+}
+
void SnomaskManager::WriteToSnoMask(char letter, const char* text, ...)
{
char textbuffer[MAXBUF];
@@ -85,6 +92,18 @@ void SnomaskManager::WriteToSnoMask(char letter, const char* text, ...)
this->WriteToSnoMask(letter, std::string(textbuffer));
}
+void SnomaskManager::WriteGlobalSno(char letter, const char* text, ...)
+{
+ char textbuffer[MAXBUF];
+ va_list argsPtr;
+
+ va_start(argsPtr, text);
+ vsnprintf(textbuffer, MAXBUF, text, argsPtr);
+ va_end(argsPtr);
+
+ this->WriteGlobalSno(letter, std::string(textbuffer));
+}
+
bool SnomaskManager::IsEnabled(char letter)
{
return (SnoMasks.find(letter) != SnoMasks.end());