class XLine;
-/** Used with OnAccessCheck() method of modules
- */
-enum AccessControlType {
- ACR_DEFAULT, // Do default action (act as if the module isnt even loaded)
- ACR_DENY, // deny the action
- ACR_ALLOW, // allow the action
- AC_KICK, // a user is being kicked
- AC_DEOP, // a user is being deopped
- AC_OP, // a user is being opped
- AC_VOICE, // a user is being voiced
- AC_DEVOICE, // a user is being devoiced
- AC_HALFOP, // a user is being halfopped
- AC_DEHALFOP, // a user is being dehalfopped
- AC_INVITE, // a user is being invited
- AC_GENERAL_MODE, // a channel mode is being changed
- AC_GENERAL_UMODE // a user mode is being changed
-};
-
/** Used to define a set of behavior bits for a module
*/
enum ModuleFlags {
I_OnUserMessage, I_OnUserNotice, I_OnMode, I_OnGetServerDescription, I_OnSyncUser,
I_OnSyncChannel, I_OnDecodeMetaData, I_OnWallops,
I_OnChangeHost, I_OnChangeName, I_OnAddLine, I_OnDelLine, I_OnExpireLine, I_OnCleanup,
- I_OnUserPostNick, I_OnAccessCheck, I_On005Numeric, I_OnKill, I_OnRemoteKill, I_OnLoadModule,
+ I_OnUserPostNick, I_OnPreMode, I_On005Numeric, I_OnKill, I_OnRemoteKill, I_OnLoadModule,
I_OnUnloadModule, I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnCheckInvite,
I_OnRawMode, I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnCheckExtBan, I_OnCheckStringExtBan,
I_OnStats, I_OnChangeLocalUserHost, I_OnChangeLocalUserGecos, I_OnPreTopicChange,
class CoreExport Module : public Extensible
{
public:
- /** Creator/owner pointer
- */
- InspIRCd* ServerInstance;
/** File that this module was loaded from
*/
std::string ModuleSourceFile;
/** Called when a user joins a channel.
* The details of the joining user are available to you in the parameter User *user,
* and the details of the channel they have joined is available in the variable Channel *channel
- * @param user The user who is joining
- * @param channel The channel being joined
- * @param silent Change this to true if you want to conceal the JOIN command from the other users
- * of the channel (useful for modules such as auditorium)
+ * @param memb The channel membership being created
* @param sync This is set to true if the JOIN is the result of a network sync and the remote user is being introduced
* to a channel due to the network sync.
* @param created This is true if the join created the channel
*/
- virtual void OnUserJoin(User* user, Channel* channel, bool sync, bool &silent, bool created);
+ virtual void OnUserJoin(Membership* memb, bool sync, bool created, CUList& except_list);
/** Called after a user joins a channel
* Identical to OnUserJoin, but called immediately afterwards, when any linking module has
* seen the join.
- * @param user The user who is joining
- * @param channel The channel being joined
+ * @param memb The channel membership created
*/
- virtual void OnPostJoin(User* user, Channel* channel);
+ virtual void OnPostJoin(Membership*);
/** Called when a user parts a channel.
* The details of the leaving user are available to you in the parameter User *user,
* and the details of the channel they have left is available in the variable Channel *channel
- * @param user The user who is parting
- * @param channel The channel being parted
+ * @param memb The channel membership being destroyed
* @param partmessage The part message, or an empty string (may be modified)
- * @param silent Change this to true if you want to conceal the PART command from the other users
- * of the channel (useful for modules such as auditorium)
*/
- virtual void OnUserPart(User* user, Channel* channel, std::string &partmessage, bool &silent);
+ virtual void OnUserPart(Membership* memb, std::string &partmessage, CUList& except_list);
/** Called on rehash.
* This method is called prior to a /REHASH or when a SIGHUP is received from the operating
* @param user The user joining the channel
* @param chan If the channel is a new channel, this will be NULL, otherwise it will be a pointer to the channel being joined
* @param cname The channel name being joined. For new channels this is valid where chan is not.
- * @param privs A string containing the users privilages when joining the channel. For new channels this will contain "@".
+ * @param privs A string containing the users privilages when joining the channel. For new channels this will contain "o".
* You may alter this string to alter the user's modes on the channel.
* @param keygiven The key given to join the channel, or an empty string if none was provided
* @return 1 To prevent the join, 0 to allow it.
* @param reason The kick reason
* @return 1 to prevent the kick, 0 to continue normally, -1 to explicitly allow the kick regardless of normal operation
*/
- virtual ModResult OnUserPreKick(User* source, User* user, Channel* chan, const std::string &reason);
+ virtual ModResult OnUserPreKick(User* source, Membership* memb, const std::string &reason);
/** Called whenever a user is kicked.
* If this method is called, the kick is already underway and cannot be prevented, so
* @param user The user being kicked
* @param chan The channel the user is being kicked from
* @param reason The kick reason
- * @param silent Change this to true if you want to conceal the PART command from the other users
- * of the channel (useful for modules such as auditorium)
*/
- virtual void OnUserKick(User* source, User* user, Channel* chan, const std::string &reason, bool &silent);
+ virtual void OnUserKick(User* source, Membership* memb, const std::string &reason, CUList& except_list);
/** Called whenever a user opers locally.
* The User will contain the oper mode 'o' as this function is called after any modifications
*/
virtual void OnUserPostNick(User* user, const std::string &oldnick);
- /** Called before an action which requires a channel privilage check.
- * This function is called before many functions which check a users status on a channel, for example
- * before opping a user, deopping a user, kicking a user, etc.
- * There are several values for access_type which indicate for what reason access is being checked.
- * These are:<br><br>
- * AC_KICK - A user is being kicked<br>
- * AC_DEOP - a user is being deopped<br>
- * AC_OP - a user is being opped<br>
- * AC_VOICE - a user is being voiced<br>
- * AC_DEVOICE - a user is being devoiced<br>
- * AC_HALFOP - a user is being halfopped<br>
- * AC_DEHALFOP - a user is being dehalfopped<br>
- * AC_INVITE - a user is being invited<br>
- * AC_GENERAL_MODE - a user channel mode is being changed<br><br>
- * Upon returning from your function you must return either ACR_DEFAULT, to indicate the module wishes
- * to do nothing, or ACR_DENY where approprate to deny the action, and ACR_ALLOW where appropriate to allow
- * the action. Please note that in the case of some access checks (such as AC_GENERAL_MODE) access may be
- * denied 'upstream' causing other checks such as AC_DEOP to not be reached. Be very careful with use of the
- * AC_GENERAL_MODE type, as it may inadvertently override the behaviour of other modules. When the access_type
- * is AC_GENERAL_MODE, the destination of the mode will be NULL (as it has not yet been determined).
- * @param source The source of the access check
- * @param dest The destination of the access check
- * @param channel The channel which is being checked
- * @param access_type See above
- */
- virtual ModResult OnAccessCheck(User* source,User* dest,Channel* channel,int access_type);
+ /** Called before any mode change, 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
+ * OnRawMode for each individual mode
+ *
+ * @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
+ */
+ virtual ModResult OnPreMode(User* source, User* dest, Channel* channel, const std::vector<std::string>& parameters);
/** Called when a 005 numeric is about to be output.
* The module should modify the 005 numeric if needed to indicate its features.
* 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.
*/
- virtual void OnNamesListItem(User* issuer, User* user, Channel* channel, std::string &prefixes, std::string &nick);
+ virtual void OnNamesListItem(User* issuer, Membership* item, std::string &prefixes, std::string &nick);
virtual ModResult OnNumeric(User* user, unsigned int numeric, const std::string &text);