]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/snomasks.h
Remove the Kiwi links from the readme.
[user/henk/code/inspircd.git] / include / snomasks.h
index c5d594eebadc18575dc055901e3e60d91d473ff0..e3859faba7c5787c175857feeaae785f196e204b 100644 (file)
@@ -1,10 +1,15 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
- *   Copyright (C) 2010 Daniel De Graaf <danieldg@inspircd.org>
+ *   Copyright (C) 2013-2014 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2013, 2017 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2012 Robby <robby@chatbelgie.be>
+ *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+ *   Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
+ *   Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
  *   Copyright (C) 2008 Robin Burchell <robin+git@viroteck.net>
  *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
- *   Copyright (C) 2006 Craig Edwards <craigedwards@brainbox.cc>
+ *   Copyright (C) 2006, 2010 Craig Edwards <brain@inspircd.org>
  *
  * This file is part of InspIRCd.  InspIRCd is free software: you can
  * redistribute it and/or modify it under the terms of the GNU General Public
 
 #pragma once
 
+class SnomaskManager;
 class Snomask
 {
- public:
+       /** Description of this snomask, e.g.: OPER, ANNOUNCEMENT, XLINE
+        */
        std::string Description;
+
+       /** Information about the last sent message,
+        * used for sending "last message repeated X times" messages
+        */
        std::string LastMessage;
-       int Count;
-       bool LastBlocked;
        char LastLetter;
+       unsigned int Count;
 
+       /** Log and send a message to all opers who have the given snomask set
+        * @param letter The target users of this message
+        * @param desc The description of this snomask, will be prepended to the message
+        * @param msg The message to send
+        */
+       static void Send(char letter, const std::string& desc, const std::string& msg);
+
+ public:
        /** Create a new Snomask
         */
-       Snomask() : Count(0), LastBlocked(false), LastLetter(0)
-       {
-       }
+       Snomask();
 
        /** Sends a message to all opers with this snomask.
+        * @param message The message to send
+        * @param letter The snomask character to send the message to.
         */
-       void SendMessage(const std::string &message, char letter);
+       void SendMessage(const std::stringmessage, char letter);
 
        /** Sends out the (last message repeated N times) message
         */
        void Flush();
+
+       /** Returns the description of this snomask
+        * @param letter The letter of this snomask. If uppercase, the description of the remote
+        * variant of this snomask will be returned (i.e.: "REMOTE" will be prepended to the description).
+        * @return The description of this snomask
+        */
+       std::string GetDescription(char letter) const;
+
+       friend class SnomaskManager;
 };
 
 /** Snomask manager handles routing of SNOMASK (usermode +s) messages to opers.
  * Modules and the core can enable and disable snomask characters. If they do,
  * then sending snomasks using these characters becomes possible.
  */
-class CoreExport SnomaskManager
+class CoreExport SnomaskManager : public fakederef<SnomaskManager>
 {
- public:
        Snomask masks[26];
 
+ public:
        /** Create a new SnomaskManager
         */
        SnomaskManager();
@@ -94,7 +121,6 @@ class CoreExport SnomaskManager
         */
        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
@@ -104,4 +130,12 @@ class CoreExport SnomaskManager
         * is not particularly significant, in order to keep notices going out.
         */
        void FlushSnotices();
+
+       /** Check whether a given character is an enabled (initialized) snomask.
+        * Valid snomask chars are lower- or uppercase letters and have a description.
+        * Snomasks are initialized with EnableSnomask().
+        * @param ch The character to check
+        * @return True if the given char is allowed to be set via +s.
+        */
+       bool IsSnomaskUsable(char ch) const;
 };