*/
CustomModeList custom_mode_params;
+ /** Remove the given membership from the channel's internal map of
+ * memberships and destroy the Membership object.
+ * This function does not remove the channel from User::chanlist.
+ * Since the parameter is an iterator to the target, the complexity
+ * of this function is constant.
+ * @param membiter The UserMembIter to remove, must be valid
+ */
+ void DelUser(const UserMembIter& membiter);
+
public:
/** Creates a channel record and initialises it with default values
- * @throw Nothing at present.
+ * @param name The name of the channel
+ * @param ts The creation time of the channel
+ * @throw CoreException if this channel name is in use
*/
Channel(const std::string &name, time_t ts);
+ /** Checks whether the channel should be destroyed, and if yes, begins
+ * the teardown procedure.
+ *
+ * If there are users on the channel or a module vetoes the deletion
+ * (OnPreChannelDelete hook) then nothing else happens.
+ * Otherwise, first the OnChannelDelete event is fired, then the channel is
+ * removed from the channel list. All pending invites are destroyed and
+ * finally the channel is added to the cull list.
+ */
+ void CheckDestroy();
+
/** The channel's name.
*/
std::string name;
* @param value True if you want to set the mode or false if you want to remove it
*/
void SetMode(ModeHandler* mode, bool value);
- void SetMode(char mode,bool mode_on);
/** Sets or unsets a custom mode in the channels info
* @param mode The mode character to set or unset
* If it is empty, the mode is unset; if it is nonempty, the mode is set.
*/
void SetModeParam(ModeHandler* mode, const std::string& parameter);
- void SetModeParam(char mode, const std::string& parameter);
/** Returns true if a mode is set on a channel
* @param mode The mode character you wish to query
* @return True if the custom mode is set, false if otherwise
*/
- inline bool IsModeSet(char mode) { return modes[mode-'A']; }
inline bool IsModeSet(ModeHandler* mode) { return modes[mode->GetModeChar()-'A']; }
-
+ bool IsModeSet(ModeHandler& mode) { return IsModeSet(&mode); }
+ bool IsModeSet(ChanModeReference& mode);
/** Returns the parameter for a custom mode on a channel.
* @param mode The mode character you wish to query
*
* @return The parameter for this mode is returned, or an empty string
*/
- std::string GetModeParameter(char mode);
std::string GetModeParameter(ModeHandler* mode);
+ std::string GetModeParameter(ChanModeReference& mode);
/** Sets the channel topic.
- * @param u The user setting the topic
- * @param t The topic to set it to. Non-const, as it may be modified by a hook.
- * @param forceset If set to true then all access checks will be bypassed.
+ * @param user The user setting the topic.
+ * @param topic The topic to set it to.
*/
- int SetTopic(User *u, std::string &t, bool forceset = false);
+ void SetTopic(User* user, const std::string& topic);
/** Obtain the channel "user counter"
* This returns the number of users on this channel
* @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
+ * @param srcmemb The membership of the user who does the kick, can be NULL
*/
- void KickUser(User *src, User *user, const std::string& reason);
+ void KickUser(User* src, User* user, const std::string& reason, Membership* srcmemb = NULL);
/** 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 to join to the channel
* @param privs Priviliges (prefix mode letters) to give to this user, may be NULL
* @param bursting True if this join is the result of a netburst (passed to modules in the OnUserJoin hook)
- * @param created True if this channel was just created by a local user (passed to modules in the OnUserJoin hook)
+ * @param created_by_local True if this channel was just created by a local user (passed to modules in the OnUserJoin hook)
*/
void ForceJoin(User* user, const std::string* privs = NULL, bool bursting = false, bool created_by_local = false);
*/
void UserList(User *user);
- /** Get the number of invisible users on this channel
- * @return Number of invisible users
- */
- int CountInvisible();
-
/** Get a users prefix on this channel in a string.
* @param user The user to look up
* @return A character array containing the prefix string.
*/
unsigned int GetPrefixValue(User* user);
- /** This method removes all prefix characters from a user.
- * It will not inform the user or the channel of the removal of prefixes,
- * and should be used when the user parts or quits.
- * @param user The user to remove all prefixes from
- */
- void RemoveAllPrefixes(User* user);
-
/** Add a prefix character to a user.
* Only the core should call this method, usually from
* within the mode parser or when the first user joins
{
return (userlist.find(user) != userlist.end());
}
+
+inline std::string Channel::GetModeParameter(ChanModeReference& mode)
+{
+ if (!mode)
+ return "";
+ return GetModeParameter(*mode);
+}
+
+inline bool Channel::IsModeSet(ChanModeReference& mode)
+{
+ if (!mode)
+ return false;
+ return IsModeSet(*mode);
+}