+ long PartUser(User *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 Channel the user was joined to. A new Channel 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 Channel* JoinUser(InspIRCd* ServerInstance, User *user, const char* cn, bool override, const char* key, bool bursting, time_t TS = 0);
+
+ /** 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
+ */
+ void WriteChannel(User* 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
+ */
+ void WriteChannel(User* user, const std::string &text);
+
+ /** 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 prefix
+ * @param ... Zero or more POD type
+ */
+ void WriteChannelWithServ(const char* ServName, const char* text, ...);
+
+ /** 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
+ */
+ 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.
+ * Internally, this calls WriteAllExcept().
+ * @param user User whos details to prefix the line with, and to omit from receipt of the message
+ * @param serversource If this parameter is true, use the local server name as the source of the text, otherwise,
+ * use the nick!user@host of the user.
+ * @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 prefix
+ * @param ... Zero or more POD type
+ */
+ void WriteAllExceptSender(User* user, bool serversource, char status, char* text, ...);
+
+ /** Write to all users on a channel except a list of users, using va_args for text
+ * @param user User whos details to prefix the line with, and to omit from receipt of the message
+ * @param serversource If this parameter is true, use the local server name as the source of the text, otherwise,
+ * use the nick!user@host of the user.
+ * @param status The status of the users to write to, e.g. '@' or '%'. Use a value of 0 to write to everyone
+ * @param except_list A list of users NOT to send the text to
+ * @param text A printf-style format string which builds the output line without prefix
+ * @param ... Zero or more POD type
+ */
+ void WriteAllExcept(User* user, bool serversource, char status, CUList &except_list, char* text, ...);
+
+ /** Write to all users on a channel except a specific user, using std::string for text.
+ * Internally, this calls WriteAllExcept().
+ * @param user User whos details to prefix the line with, and to omit from receipt of the message
+ * @param serversource If this parameter is true, use the local server name as the source of the text, otherwise,
+ * use the nick!user@host of the user.
+ * @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(User* user, bool serversource, char status, const std::string& text);
+
+ /** Write to all users on a channel except a list of users, using std::string for text
+ * @param user User whos details to prefix the line with, and to omit from receipt of the message
+ * @param serversource If this parameter is true, use the local server name as the source of the text, otherwise,
+ * use the nick!user@host of the user.
+ * @param status The status of the users to write to, e.g. '@' or '%'. Use a value of 0 to write to everyone
+ * @param except_list A list of users NOT to send the text to
+ * @param text A std::string containing the output line without prefix
+ */
+ void WriteAllExcept(User* user, bool serversource, char status, CUList &except_list, const std::string& text);
+
+ /** Returns the maximum number of bans allowed to be set on this channel
+ * @return The maximum number of bans allowed
+ */
+ long GetMaxBans();
+
+ /** Return the channel's modes with parameters.
+ * @param showkey If this is set to true, the actual key is shown,
+ * otherwise it is replaced with '<KEY>'
+ * @return The channel mode string
+ */
+ char* ChanModes(bool showkey);
+
+ /** Spool the NAMES list for this channel to the given user
+ * @param user The user to spool the NAMES list to
+ * @param ulist The user list to send, NULL to use the
+ * channel's default names list of everyone
+ */
+ void UserList(User *user, CUList* ulist = NULL);
+
+ /** Get the number of invisible users on this channel
+ * @return Number of invisible users
+ */
+ int CountInvisible();
+
+ /** Get a users status on this channel
+ * @param user The user to look up
+ * @return One of STATUS_OP, STATUS_HOP, STATUS_VOICE, or zero.