enum TargetTypeFlags {
TYPE_USER = 1,
TYPE_CHANNEL,
- TYPE_SERVER
+ TYPE_SERVER,
+ TYPE_OTHER
};
#include "dynamic.h"
I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnStats, I_OnChangeLocalUserHost, I_OnChangeLocalUserGecos, I_OnLocalTopicChange,
I_OnPostLocalTopicChange, I_OnEvent, I_OnRequest, I_OnOperCompre, I_OnGlobalOper, I_OnGlobalConnect, I_OnAddBan, I_OnDelBan,
I_OnRawSocketAccept, I_OnRawSocketClose, I_OnRawSocketWrite, I_OnRawSocketRead, I_OnChangeLocalUserGECOS, I_OnUserRegister,
- I_OnOperCompare, I_OnChannelDelete };
+ I_OnOperCompare, I_OnChannelDelete, I_OnPostOper, I_OnSyncOtherMetaData, I_OnSetAway, I_OnCancelAway };
/** Base class for all InspIRCd modules
* This class is the base class for InspIRCd modules. All modules must inherit from this class,
* @param user The user being kicked
* @param chan The channel the user is being kicked from
* @param reason The kick reason
- * @return 1 to prevent the kick, 0 to allow it
+ * @return 1 to prevent the kick, 0 to continue normally, -1 to explicitly allow the kick regardless of normal operation
*/
virtual int OnUserPreKick(userrec* source, userrec* user, chanrec* chan, std::string reason);
* @param opertype The opers type name
*/
virtual void OnOper(userrec* user, std::string opertype);
+
+ /** Called after a user opers locally.
+ * This is identical to Module::OnOper(), except it is called after OnOper so that other modules
+ * can be gauranteed to already have processed the oper-up, for example m_spanningtree has sent
+ * out the OPERTYPE, etc.
+ * @param user The user who is opering up
+ * @param opertype The opers type name
+ */
+ virtual void OnPostOper(userrec* user, std::string opertype);
/** Called whenever a user types /INFO.
* The userrec will contain the information of the user who typed the command. Modules may use this
* @param dest The target of the message (chanrec* or userrec*)
* @param target_type The type of target (TYPE_USER or TYPE_CHANNEL)
* @param text Changeable text being sent by the user
+ * @param status The status being used, e.g. PRIVMSG @#chan has status== '@', 0 to send to everyone.
* @return 1 to deny the NOTICE, 0 to allow it
*/
- virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text);
+ virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text,char status);
/** Called whenever a user is about to NOTICE A user or a channel, before any processing is done.
* Returning any nonzero value from this function stops the process immediately, causing no
* @param dest The target of the message (chanrec* or userrec*)
* @param target_type The type of target (TYPE_USER or TYPE_CHANNEL)
* @param text Changeable text being sent by the user
+ * @param status The status being used, e.g. PRIVMSG @#chan has status== '@', 0 to send to everyone.
* @return 1 to deny the NOTICE, 0 to allow it
*/
- virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text);
+ virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text,char status);
/** 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
* @param dest The target of the message
* @param target_type The type of target (TYPE_USER or TYPE_CHANNEL)
* @param text the text being sent by the user
+ * @param status The status being used, e.g. PRIVMSG @#chan has status== '@', 0 to send to everyone.
*/
- virtual void OnUserMessage(userrec* user, void* dest, int target_type, std::string text);
+ virtual void OnUserMessage(userrec* user, void* dest, int target_type, std::string text, char status);
/** Called after any NOTICE sent from a user.
* The dest variable contains a userrec* if target_type is TYPE_USER and a chanrec*
* @param dest The target of the message
* @param target_type The type of target (TYPE_USER or TYPE_CHANNEL)
* @param text the text being sent by the user
+ * @param status The status being used, e.g. NOTICE @#chan has status== '@', 0 to send to everyone.
*/
- virtual void OnUserNotice(userrec* user, void* dest, int target_type, std::string text);
+ virtual void OnUserNotice(userrec* user, void* dest, int target_type, std::string text, char status);
/** Called after every MODE command sent from a user
* The dest variable contains a userrec* if target_type is TYPE_USER and a chanrec*
*/
virtual void OnSyncUserMetaData(userrec* user, Module* proto,void* opaque, std::string extname);
+ /* Allows modules to syncronize metadata not related to users or channels, over the network during a netburst.
+ * Whenever the linking module wants to send out data, but doesnt know what the data
+ * represents (e.g. it is Extensible metadata, added to a userrec or chanrec by a module) then
+ * this method is called. You should use the ProtoSendMetaData function after you've
+ * correctly decided how the data should be represented, to send the metadata on its way if
+ * if it belongs to your module.
+ * @param proto A pointer to the module handling network protocol
+ * @param opaque An opaque pointer set by the protocol module, should not be modified!
+ */
+ virtual void OnSyncOtherMetaData(Module* proto, void* opaque);
+
/** Allows module data, sent via ProtoSendMetaData, to be decoded again by a receiving module.
* Please see src/modules/m_swhois.cpp for a working example of how to use this method call.
* @param target_type The type of item to decode data for, TYPE_USER or TYPE_CHANNEL
* @return nonzero if the event was handled, in which case readresult must be valid on exit
*/
virtual int OnRawSocketRead(int fd, char* buffer, unsigned int count, int &readresult);
+
+ virtual void OnSetAway(userrec* user);
+
+ virtual void OnCancelAway(userrec* user);
};