#ifndef __MODULES_H
#define __MODULES_H
-#include "globals.h"
#include "dynamic.h"
#include "base.h"
#include "ctables.h"
class CoreExport Version : public classbase
{
public:
- /** Version numbers, build number, flags and API version
- */
- const int Major, Minor, Revision, Build, Flags, API;
+ /** Version information.
+ */
+ std::string version;
+
+ /** Flags and API version
+ */
+ const int Flags, API;
- /** Initialize version class
- */
- Version(int major, int minor, int revision, int build, int flags, int api_ver);
+ /** Initialize version class
+ */
+ Version(const std::string &sversion, int flags, int api_ver);
};
/** The ModuleMessage class is the base class of Request and Event
enum Implementation
{
I_BEGIN,
- I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUserJoin, I_OnUserPart, I_OnRehash, I_OnServerRaw,
+ I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUserJoin, I_OnUserPart, I_OnRehash, I_OnServerRaw, I_OnSendSnotice,
I_OnUserPreJoin, I_OnUserPreKick, I_OnUserKick, I_OnOper, I_OnInfo, I_OnWhois, I_OnUserPreInvite,
I_OnUserInvite, I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserPreNick, I_OnUserMessage, I_OnUserNotice, I_OnMode,
I_OnGetServerDescription, I_OnSyncUser, I_OnSyncChannel, I_OnSyncChannelMetaData, I_OnSyncUserMetaData,
I_OnRawSocketAccept, I_OnRawSocketClose, I_OnRawSocketWrite, I_OnRawSocketRead, I_OnChangeLocalUserGECOS, I_OnUserRegister,
I_OnChannelPreDelete, I_OnChannelDelete, I_OnPostOper, I_OnSyncOtherMetaData, I_OnSetAway, I_OnUserList,
I_OnPostCommand, I_OnPostJoin, I_OnWhoisLine, I_OnBuildExemptList, I_OnRawSocketConnect, I_OnGarbageCollect, I_OnBufferFlushed,
- I_OnText, I_OnPassCompare, I_OnRunTestSuite, I_OnNamesListItem, I_OnNumeric, I_OnHookUserIO,
+ I_OnText, I_OnPassCompare, I_OnRunTestSuite, I_OnNamesListItem, I_OnNumeric, I_OnHookUserIO, I_OnHostCycle,
I_END
};
*/
virtual void OnServerRaw(std::string &raw, bool inbound, User* user);
+ /** Called whenever a snotice is about to be sent to a snomask.
+ * snomask and type may both be modified; the message may not.
+ * @param snomask The snomask the message is going to (e.g. 'A')
+ * @param type The textual description the snomask will go to (e.g. 'OPER')
+ * @param message The text message to be sent via snotice
+ * @return 1 to block the snotice from being sent entirely, 0 else.
+ */
+ virtual int OnSendSnotice(char &snomask, std::string &type, const std::string &message);
+
/** Called whenever a user is about to join a channel, before any processing is done.
* Returning a value of 1 from this function stops the process immediately, causing no
* output to be sent to the user by the core. If you do this you must produce your own numerics,
* @param dest The user being invited
* @param channel The channel the user is being invited to
* @param timeout The time the invite will expire (0 == never)
- * @return 1 to deny the invite, 0 to allow
+ * @return 1 to deny the invite, 0 to check whether or not the user has permission to invite, -1 to explicitly allow the invite
*/
virtual int OnUserPreInvite(User* source,User* dest,Channel* channel, time_t timeout);
* @param target The Channel* or User* that modes should be sent for
* @param modeline The modes and parameters to be sent
*/
- virtual void ProtoSendMode(void* opaque, int target_type, void* target, const std::string &modeline);
+ virtual void ProtoSendMode(void* opaque, TargetTypeFlags target_type, void* target, const std::string &modeline);
/** Implemented by modules which provide the ability to link servers.
* These modules will implement this method, which allows metadata (extra data added to
* @param extname The extension name to send metadata for
* @param extdata Encoded data for this extension name, which will be encoded at the oppsite end by an identical module using OnDecodeMetaData
*/
- virtual void ProtoSendMetaData(void* opaque, int target_type, void* target, const std::string &extname, const std::string &extdata);
+ virtual void ProtoSendMetaData(void* opaque, TargetTypeFlags target_type, void* target, const std::string &extname, const std::string &extdata);
/** Called after every WALLOPS command.
* @param user The user sending the WALLOPS
virtual int OnChangeLocalUserGECOS(User* user, const std::string &newhost);
/** Called whenever a topic is changed by a local user.
- * Return 1 to deny the topic change, or 0 to allow it.
+ * Return 1 to deny the topic change, 0 to check details on the change, -1 to let it through with no checks
* @param user The user changing the topic
* @param chan The channels who's topic is being changed
* @param topic The actual topic text
virtual void OnNamesListItem(User* issuer, User* user, Channel* channel, std::string &prefixes, std::string &nick);
virtual int OnNumeric(User* user, unsigned int numeric, const std::string &text);
+
+ /** Called for every time the user's host or ident changes, to indicate wether or not the 'Changing host'
+ * message should be sent, if enabled. Certain modules such as auditorium may opt to hide this message
+ * even if it is enabled.
+ */
+ virtual bool OnHostCycle(User* user);
};