+ bool HasUser(User* user);
+
+ /** 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 Channel immediately!
+ */
+ long KickUser(User *src, User *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 Channel immediately!
+ */
+ long ServerKickUser(User* user, const char* reason, bool triggerevents, const char* servername = 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 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 Channel immediately!
+ */
+ 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, const char* text, ...) CUSTOM_PRINTF(3, 4);
+
+ /** 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, ...) CUSTOM_PRINTF(3, 4);
+
+ /** 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, const char* text, ...) CUSTOM_PRINTF(5, 6);
+
+ /** 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