I_OnUnloadModule, I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnCheckInvite,
I_OnRawMode, I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnCheckChannelBan, I_OnExtBanCheck,
I_OnStats, I_OnChangeLocalUserHost, I_OnPreTopicChange,
- I_OnPostTopicChange, I_OnEvent, I_OnGlobalOper, I_OnPostConnect,
+ I_OnPostTopicChange, I_OnEvent, I_OnPostConnect,
I_OnChangeLocalUserGECOS, I_OnUserRegister, I_OnChannelPreDelete, I_OnChannelDelete,
I_OnPostOper, I_OnSyncNetwork, I_OnSetAway, I_OnPostCommand, I_OnPostJoin,
I_OnWhoisLine, I_OnBuildNeighborList, I_OnGarbageCollect, I_OnSetConnectClass,
- I_OnText, I_OnPassCompare, I_OnRunTestSuite, I_OnNamesListItem, I_OnNumeric, I_OnHookIO,
+ I_OnText, I_OnPassCompare, I_OnNamesListItem, I_OnNumeric,
I_OnPreRehash, I_OnModuleRehash, I_OnSendWhoLine, I_OnChangeIdent, I_OnSetUserIP,
I_END
};
*
* Set exceptions[user] = true to include, exceptions[user] = false to exclude
*/
- virtual void OnBuildNeighborList(User* source, UserChanList &include_c, std::map<User*,bool> &exceptions);
+ virtual void OnBuildNeighborList(User* source, IncludeChanList& include_c, std::map<User*, bool>& exceptions);
- /** Called before any nickchange, local or remote. This can be used to implement Q-lines etc.
- * Please note that although you can see remote nickchanges through this function, you should
- * NOT make any changes to the User if the user is a remote user as this may cause a desnyc.
- * check user->server before taking any action (including returning nonzero from the method).
+ /** Called before local nickname changes. This can be used to implement Q-lines etc.
* If your method returns nonzero, the nickchange is silently forbidden, and it is down to your
* module to generate some meaninful output.
* @param user The username changing their nick
* @param newnick Their new nickname
* @return 1 to deny the change, 0 to allow
*/
- virtual ModResult OnUserPreNick(User* user, const std::string &newnick);
+ virtual ModResult OnUserPreNick(LocalUser* user, const std::string& newnick);
/** Called after any PRIVMSG sent from a user.
* The dest variable contains a User* if target_type is TYPE_USER and a Channel*
/** Called after every MODE command sent from a user
* Either the usertarget or the chantarget variable contains the target of the modes,
* the actual target will have a non-NULL pointer.
- * The modes vector contains the remainder of the mode string after the target,
- * e.g.: "+wsi" or ["+ooo", "nick1", "nick2", "nick3"].
+ * All changed modes are available in the changelist object.
* @param user The user sending the MODEs
* @param usertarget The target user of the modes, NULL if the target is a channel
* @param chantarget The target channel of the modes, NULL if the target is a user
- * @param modes The actual modes and their parameters if any
- * @param translate The translation types of the mode parameters
+ * @param changelist The changed modes.
+ * @param processflags Flags passed to ModeParser::Process(), see ModeParser::ModeProcessFlags
+ * for the possible flags.
+ * @param output_mode Changed modes, including '+' and '-' characters, not including any parameters
*/
- virtual void OnMode(User* user, User* usertarget, Channel* chantarget, const std::vector<std::string>& modes, const std::vector<TranslateType>& translate);
+ virtual void OnMode(User* user, User* usertarget, Channel* chantarget, const Modes::ChangeList& changelist, ModeParser::ModeProcessFlag processflags, const std::string& output_mode);
/** Allows modules to synchronize data which relates to users during a netburst.
* When this function is called, it will be called from the module which implements
*/
virtual void OnUserPostNick(User* user, const std::string &oldnick);
- /** Called before any mode change, to allow a single access check for
+ /** Called before a mode change via the MODE command, to allow a single access check for
* a full mode change (use OnRawMode to check individual modes)
*
* Returning MOD_RES_ALLOW will skip prefix level checks, but can be overridden by
* @param source the user making the mode change
* @param dest the user destination of the umode change (NULL if a channel mode)
* @param channel the channel destination of the mode change
- * @param parameters raw mode parameters; parameters[0] is the user/channel being changed
+ * @param modes Modes being changed, can be edited
*/
- virtual ModResult OnPreMode(User* source, User* dest, Channel* channel, const std::vector<std::string>& parameters);
+ virtual ModResult OnPreMode(User* source, User* dest, Channel* channel, Modes::ChangeList& modes);
/** Called when a 005 numeric is about to be output.
* The module should modify the 005 numeric if needed to indicate its features.
* Return 1 from this function to block the mode character from being processed entirely.
* @param user The user who is sending the mode
* @param chan The channel the mode is being sent to (or NULL if a usermode)
- * @param mode The mode character being set
+ * @param mh The mode handler for the mode being changed
* @param param The parameter for the mode or an empty string
* @param adding true of the mode is being added, false if it is being removed
- * @param pcnt The parameter count for the mode (0 or 1)
* @return ACR_DENY to deny the mode, ACR_DEFAULT to do standard mode checking, and ACR_ALLOW
* to skip all permission checking. Please note that for remote mode changes, your return value
* will be ignored!
*/
- virtual ModResult OnRawMode(User* user, Channel* chan, const char mode, const std::string ¶m, bool adding, int pcnt);
+ virtual ModResult OnRawMode(User* user, Channel* chan, ModeHandler* mh, const std::string& param, bool adding);
/** Called whenever a user joins a channel, to determine if key checks should go ahead or not.
* This method will always be called for each join, wether or not the channel is actually +k, and
*/
virtual ModResult OnPassCompare(Extensible* ex, const std::string &password, const std::string &input, const std::string& hashtype);
- /** Called whenever a user is given usermode +o, anywhere on the network.
- * You cannot override this and prevent it from happening as it is already happened and
- * such a task must be performed by another server. You can however bounce modes by sending
- * servermodes out to reverse mode changes.
- * @param user The user who is opering
- */
- virtual void OnGlobalOper(User* user);
-
/** Called after a user has fully connected and all modules have executed OnUserConnect
* This event is informational only. You should not change any user information in this
* event. To do so, use the OnUserConnect method to change the state of local users.
*/
virtual void OnPostConnect(User* user);
- /** Called to install an I/O hook on an event handler
- * @param user The socket to possibly install the I/O hook on
- * @param via The port that the user connected on
- */
- virtual void OnHookIO(StreamSocket* user, ListenSocket* via);
-
/** Called when a port accepts a connection
* Return MOD_RES_ACCEPT if you have used the file descriptor.
* @param fd The file descriptor returned from accept()
*/
virtual ModResult OnSetConnectClass(LocalUser* user, ConnectClass* myclass);
+#ifdef INSPIRCD_ENABLE_TESTSUITE
/** Add test suite hooks here. These are used for testing functionality of a module
* via the --testsuite debugging parameter.
*/
virtual void OnRunTestSuite();
+#endif
/** Called for every item in a NAMES list, so that modules may reformat portions of it as they see fit.
- * For example NAMESX, channel mode +u and +I, and UHNAMES. If the nick is set to an empty string by any
- * module, then this will cause the nickname not to be displayed at all.
+ * For example NAMESX, channel mode +u and +I, and UHNAMES.
+ * @param issuer The user who is going to receive the NAMES list being built
+ * @param item The channel member being considered for inclusion
+ * @param prefixes The prefix character(s) to display, initially set to the prefix char of the most powerful
+ * prefix mode the member has, can be changed
+ * @param nick The nick to display, initially set to the member's nick, can be changed
+ * @return Return MOD_RES_PASSTHRU to allow the member to be displayed, MOD_RES_DENY to cause them to be
+ * excluded from this NAMES list
*/
- virtual void OnNamesListItem(User* issuer, Membership* item, std::string &prefixes, std::string &nick);
+ virtual ModResult OnNamesListItem(User* issuer, Membership* item, std::string& prefixes, std::string& nick);
virtual ModResult OnNumeric(User* user, unsigned int numeric, const std::string &text);
* @param source The user running the /WHO query
* @param params The parameters to the /WHO query
* @param user The user that this line of the query is about
+ * @param memb The member shown in this line, NULL if no channel is in this line
* @param line The raw line to send; modifiable, if empty no line will be returned.
*/
- virtual void OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, std::string& line);
+ virtual void OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, Membership* memb, std::string& line);
/** Called whenever a local user's IP is set for the first time, or when a local user's IP changes due to
* a module like m_cgiirc changing it.
/** ModuleManager takes care of all things module-related
* in the core.
*/
-class CoreExport ModuleManager
+class CoreExport ModuleManager : public fakederef<ModuleManager>
{
public:
typedef std::vector<ServiceProvider*> ServiceList;
{ \
return new y; \
} \
- extern "C" DllExport const char inspircd_src_version[] = VERSION " " REVISION;
+ extern "C" DllExport const char inspircd_src_version[] = INSPIRCD_VERSION " " INSPIRCD_REVISION;
#endif
#define COMMAND_INIT(c) MODULE_INIT(CommandModule<c>)