};
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.
*/
typedef std::map<char,char*> CustomModeList;
+
+/** 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.
+ */
+ 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 */ }
+};
+
+
/** 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:
+
+ /** Connect a chanrec to a userrec
+ */
+ static chanrec* ForceChan(chanrec* Ptr,ucrec *a,userrec* user, int created);
+
public:
/** The channels name.
*/
* @param mode The mode character to set or unset
* @param mode_on True if you want to set the mode or false if you want to remove it
*/
- void SetCustomMode(char mode,bool mode_on);
+ void SetMode(char mode,bool mode_on);
/** Sets or unsets the parameters for a custom mode in a channels info
* @param mode The mode character to set or unset
* @param parameter The parameter string to associate with this mode character
* @param mode_on True if you want to set the mode or false if you want to remove it
*/
- void SetCustomModeParam(char mode,char* parameter,bool mode_on);
+ void SetModeParam(char mode,const char* parameter,bool mode_on);
/** Returns true if a mode is set on a channel
* @param mode The mode character you wish to query
*/
chanrec();
- /** Destructor for chanrec
+ /** 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
+ * @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 */ }
-};
-
-/** 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.
+ 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!
*/
- 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.
+ long ServerKickUser(userrec* user, const char* reason, bool triggerevents);
+
+ /** 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!
*/
- chanrec *channel;
-
- /** Constructor for ucrec
+ 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.
*/
- ucrec() : uc_modes(0), channel(NULL) { /* stub */ }
+ static chanrec* JoinUser(userrec *user, const char* cn, bool override, const char* key = "");
- /** Destructor for ucrec
+ void WriteChannel(userrec* user, char* text, ...);
+ void WriteChannel(userrec* user, const std::string &text);
+ void WriteChannelWithServ(const char* ServName, const char* text, ...);
+ void WriteChannelWithServ(const char* ServName, const std::string &text);
+ void WriteAllExceptSender(userrec* user, char status, char* text, ...);
+ void WriteAllExceptSender(userrec* user, char status, const std::string& text);
+
+ /** Destructor for chanrec
*/
- virtual ~ucrec() { /* stub */ }
+ virtual ~chanrec() { /* stub */ }
};
-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);
-
#endif