]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/channels.h
FindNick, FindChan, ChanModes, UserList, CountInvisible, PurgeEmptyChannels, GetClass...
[user/henk/code/inspircd.git] / include / channels.h
index 444adf64fae150bee741c12f77d217457decdbcf..e9dcfb1336cf5f859ca565c59c68fb417420be61 100644 (file)
@@ -38,6 +38,7 @@ enum ChannelModes {
 };
 
 class userrec;
+class chanrec;
 
 /** Holds an entry for a ban list, exemption list, or invite list.
  * This class contains a single element in a channel list, such as a banlist.
@@ -45,8 +46,14 @@ class userrec;
 class HostItem : public classbase
 {
  public:
+       /** Time the item was added
+        */
        time_t set_time;
+       /** Who added the item
+        */
        char set_by[NICKMAX];
+       /** The actual item data
+        */
        char data[MAXBUF];
 
        HostItem() { /* stub */ }
@@ -90,22 +97,75 @@ typedef std::map<userrec*,userrec*> CUList;
 /** Shorthand for CUList::iterator
  */
 typedef CUList::iterator CUListIter;
+
+/** Shorthand for CUList::const_iterator
+ */
 typedef CUList::const_iterator CUListConstIter;
 
 /** A list of custom modes parameters on a channel
  */
 typedef std::map<char,char*> CustomModeList;
 
+
+/** used to hold a channel and a users modes on that channel, e.g. +v, +h, +o
+ */
+enum UserChannelModes {
+       UCMODE_OP      = 1,
+       UCMODE_VOICE   = 2,
+       UCMODE_HOP     = 4
+};
+
+/** Holds a user's modes on a channel
+ * This class associates a users privilages with a channel by creating a pointer link between
+ * a userrec and chanrec class. The uc_modes member holds a bitmask of which privilages the user
+ * has on the channel, such as op, voice, etc.
+ */
+class ucrec : public classbase
+{
+ public:
+       /** Contains a bitmask of the UCMODE_OP ... UCMODE_FOUNDER values.
+        * If this value is zero, the user has no privilages upon the channel.
+        */
+       char uc_modes;
+
+       /** Points to the channel record where the given modes apply.
+        * If the record is not in use, this value will be NULL.
+        */
+       chanrec *channel;
+
+       /** Constructor for ucrec
+        */
+       ucrec() : uc_modes(0), channel(NULL) { /* stub */ }
+
+       /** Destructor for ucrec
+        */
+       virtual ~ucrec() { /* stub */ }
+};
+
+class InspIRCd;
+
+
 /** Holds all relevent information for a channel.
  * This class represents a channel, and contains its name, modes, time created, topic, topic set time,
  * etc, and an instance of the BanList type.
  */
 class chanrec : public Extensible
 {
+ private:
+
+       /** Pointer to creator object
+        */
+       InspIRCd* ServerInstance;
+
+       /** Connect a chanrec to a userrec
+        */
+       static chanrec* ForceChan(InspIRCd* Instance, chanrec* Ptr,ucrec *a,userrec* user, int created);
+
  public:
        /** The channels name.
         */
-       char name[CHANMAX]; /* channel name */
+       char name[CHANMAX];
+
        /** Modes for the channel.
         * This is not a null terminated string! It is a hash where
         * each item in it represents if a mode is set. For example
@@ -120,8 +180,17 @@ class chanrec : public Extensible
         * the halfops and another for the voices.
         */
        CUList internal_userlist;
+
+       /** Opped users
+        */
        CUList internal_op_userlist;
+
+       /** Halfopped users
+        */
        CUList internal_halfop_userlist;
+
+       /** Voiced users
+        */
        CUList internal_voice_userlist;
 
        /** Parameters for custom modes
@@ -153,11 +222,7 @@ class chanrec : public Extensible
         * If this value is an empty string, there is no channel key in place.
         */
        char key[32];
-       
-       /** Contains a bitmask of the CM_* builtin (RFC) binary mode symbols
-        */
-       //char binarymodes;
-       
+
        /** The list of all bans set on the channel.
         */
        BanList bans;
@@ -210,17 +275,41 @@ class chanrec : public Extensible
         * as this is a very fast 32 or 64 bit integer comparison.
         */
        void AddUser(userrec* user);
+
+       /** Add a user pointer to the internal reference list of opped users
+        * @param user The user to add
+        */
        void AddOppedUser(userrec* user);
+
+       /** Add a user pointer to the internal reference list of halfopped users
+        * @param user The user to add
+        */
        void AddHalfoppedUser(userrec* user);
+
+       /** Add a user pointer to the internal reference list of voiced users
+        * @param user The user to add
+        */
        void AddVoicedUser(userrec* user);
 
         /** Delete a user pointer to the internal reference list
         * @param user The user to delete
-        * @return number of users left on the channel
+        * @return number of users left on the channel after deletion of the user
          */
        unsigned long DelUser(userrec* user);
+
+       /** Delete a user pointer to the internal reference list of opped users
+        * @param user The user to delete
+        */
        void DelOppedUser(userrec* user);
+
+       /** Delete a user pointer to the internal reference list of halfopped users
+        * @param user The user to delete
+        */
        void DelHalfoppedUser(userrec* user);
+
+       /** Delete a user pointer to the internal reference list of voiced users
+        * @param user The user to delete
+        */
        void DelVoicedUser(userrec* user);
 
        /** Obtain the internal reference list
@@ -233,19 +322,34 @@ class chanrec : public Extensible
         * @return This function returns pointer to a map of userrec pointers (CUList*).
         */
        CUList* GetUsers();
+
+       /** Obtain the internal reference list of opped users
+        * @return This function returns pointer to a map of userrec pointers (CUList*).
+        */
        CUList* GetOppedUsers();
+
+       /** Obtain the internal reference list of halfopped users
+        * @return This function returns pointer to a map of userrec pointers (CUList*).
+        */
        CUList* GetHalfoppedUsers();
+
+       /** Obtain the internal reference list of voiced users
+        * @return This function returns pointer to a map of userrec pointers (CUList*).
+        */
        CUList* GetVoicedUsers();
 
        /** Returns true if the user given is on the given channel.
+        * @param The user to look for
+        * @return True if the user is on this channel
         */
        bool HasUser(userrec* user);
 
        /** Creates a channel record and initialises it with default values
+        * @throw Nothing at present.
         */
-       chanrec();
+       chanrec(InspIRCd* Instance);
 
-       /* Make src kick user from this channel with the given reason.
+       /** Make src kick user from this channel with the given reason.
         * @param src The source of the kick
         * @param user The user being kicked (must be on this channel)
         * @param reason The reason for the kick
@@ -254,58 +358,87 @@ class chanrec : public Extensible
         */
        long KickUser(userrec *src, userrec *user, const char* reason);
 
-       /* Make the server kick user from this channel with the given reason.
-        *  @param user The user being kicked (must be on this channel)
-        *  @param reason The reason for the kick
-        *  @param triggerevents True if you wish this kick to trigger module events
-        *  @return The number of users left on the channel. If this is zero
-        *  when the method returns, you MUST delete the chanrec immediately!
+       /** Make the server kick user from this channel with the given reason.
+        * @param user The user being kicked (must be on this channel)
+        * @param reason The reason for the kick
+        * @param triggerevents True if you wish this kick to trigger module events
+        * @return The number of users left on the channel. If this is zero
+        * when the method returns, you MUST delete the chanrec immediately!
         */
        long ServerKickUser(userrec* user, const char* reason, bool triggerevents);
 
-       /** Destructor for chanrec
+       /** Part a user from this channel with the given reason.
+        * If the reason field is NULL, no reason will be sent.
+        * @param user The user who is parting (must be on this channel)
+        * @param reason The (optional) part reason
+        * @return The number of users left on the channel. If this is zero
+        * when the method returns, you MUST delete the chanrec immediately!
         */
-       virtual ~chanrec() { /* stub */ }
-};
+       long PartUser(userrec *user, const char* reason = NULL);
+
+       /* Join a user to a channel. May be a channel that doesnt exist yet.
+        * @param user The user to join to the channel.
+        * @param cn The channel name to join to. Does not have to exist.
+        * @param key The key of the channel, if given
+        * @param override If true, override all join restrictions such as +bkil
+        * @return A pointer to the chanrec the user was joined to. A new chanrec may have
+        * been created if the channel did not exist before the user was joined to it.
+        * If the user could not be joined to a channel, the return value may be NULL.
+        */
+       static chanrec* JoinUser(InspIRCd* ServerInstance, userrec *user, const char* cn, bool override, const char* key = "");
 
-/** used to hold a channel and a users modes on that channel, e.g. +v, +h, +o
- * needs to come AFTER struct chanrec */
-enum UserChannelModes {
-       UCMODE_OP      = 1,
-       UCMODE_VOICE   = 2,
-       UCMODE_HOP     = 4
-};
-/** Holds a user's modes on a channel
- * This class associates a users privilages with a channel by creating a pointer link between
- * a userrec and chanrec class. The uc_modes member holds a bitmask of which privilages the user
- * has on the channel, such as op, voice, etc.
- */
-class ucrec : public classbase
-{
- public:
-       /** Contains a bitmask of the UCMODE_OP ... UCMODE_FOUNDER values.
-        * If this value is zero, the user has no privilages upon the channel.
+       /** Write to a channel, from a user, using va_args for text
+        * @param user User whos details to prefix the line with
+        * @param text A printf-style format string which builds the output line without prefix
+        * @param ... Zero or more POD types
         */
-       char uc_modes;
-       
-       /** Points to the channel record where the given modes apply.
-        * If the record is not in use, this value will be NULL.
+       void WriteChannel(userrec* user, char* text, ...);
+
+       /** Write to a channel, from a user, using std::string for text
+        * @param user User whos details to prefix the line with
+        * @param text A std::string containing the output line without prefix
         */
-       chanrec *channel;
+       void WriteChannel(userrec* user, const std::string &text);
 
-       /** Constructor for ucrec
+       /** Write to a channel, from a server, using va_args for text
+        * @param ServName Server name to prefix the line with
+        * @param text A printf-style format string which builds the output line without prefi
+        * @param ... Zero or more POD type
         */
-       ucrec() : uc_modes(0), channel(NULL) { /* stub */ }
+       void WriteChannelWithServ(const char* ServName, const char* text, ...);
 
-       /** Destructor for ucrec
+       /** Write to a channel, from a server, using std::string for text
+        * @param ServName Server name to prefix the line with
+        * @param text A std::string containing the output line without prefix
         */
-       virtual ~ucrec() { /* stub */ }
-};
+       void WriteChannelWithServ(const char* ServName, const std::string &text);
+
+       /** Write to all users on a channel except a specific user, using va_args for text
+        * @param user User whos details to prefix the line with, and to omit from receipt of the message
+        * @param status The status of the users to write to, e.g. '@' or '%'. Use a value of 0 to write to everyone
+        * @param text A printf-style format string which builds the output line without prefi
+        * @param ... Zero or more POD type
+        */
+       void WriteAllExceptSender(userrec* user, char status, char* text, ...);
+
+       /** Write to all users on a channel except a specific user, using std::string for text
+        * @param user User whos details to prefix the line with, and to omit from receipt of the message
+        * @param status The status of the users to write to, e.g. '@' or '%'. Use a value of 0 to write to everyone
+        * @param text A std::string containing the output line without prefix
+        */
+       void WriteAllExceptSender(userrec* user, char status, const std::string& text);
 
-chanrec* add_channel(userrec *user, const char* cn, const char* key, bool override);
-chanrec* del_channel(userrec *user, const char* cname, const char* reason, bool local);
-//void kick_channel(userrec *src,userrec *user, chanrec *Ptr, char* reason);
-//void server_kick_channel(userrec* user, chanrec* Ptr, char* reason, bool triggerevents);
+       long GetMaxBans();
+
+       char* ChanModes(bool showkey);
+
+       void UserList(userrec *user);
+
+       int CountInvisible();
+
+       /** Destructor for chanrec
+        */
+       virtual ~chanrec() { /* stub */ }
+};
 
 #endif