20#include <znc/zncconfig.h>
50#error This module only works when ZNC is compiled with OpenSSL support
56#ifdef BUILD_WITH_CMAKE
57#include <znc/znc_export_lib_export.h>
59#define ZNC_EXPORT_LIB_EXPORT __attribute__((__visibility__("default")))
61#define ZNC_EXPORT_LIB_EXPORT
88#define MODCOMMONDEFS(CLASS, DESCRIPTION, TYPE) \
89 static void FillModInfo(CModInfo& Info) { \
90 auto t_s = [&](const CString& sEnglish, \
91 const CString& sContext = "") { \
92 return sEnglish.empty() ? "" : Info.t_s(sEnglish, sContext); \
95 Info.SetDescription(DESCRIPTION); \
96 Info.SetDefaultType(TYPE); \
98 Info.SetLoader(TModLoad<CLASS>); \
99 TModInfo<CLASS>(Info); \
104 ZNC_EXPORT_LIB_EXPORT const CModuleEntry* ZNCModuleEntry(); \
105 ZNC_EXPORT_LIB_EXPORT const CModuleEntry* ZNCModuleEntry() { \
106 static const CModuleEntry ThisModule = {VERSION_STR, VERSION_EXTRA, \
107 ZNC_COMPILE_OPTIONS_STRING, \
109 return &ThisModule; \
128#define MODCONSTRUCTOR(CLASS) \
129 CLASS(ModHandle pDLL, CUser* pUser, CIRCNetwork* pNetwork, \
130 const CString& sModName, const CString& sModPath, \
131 CModInfo::EModuleType eType) \
132 : CModule(pDLL, pUser, pNetwork, sModName, sModPath, eType)
136#define USERMODULEDEFS(CLASS, DESCRIPTION) \
137 MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::UserModule)
142#define GLOBALMODULEDEFS(CLASS, DESCRIPTION) \
143 MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::GlobalModule)
148#define NETWORKMODULEDEFS(CLASS, DESCRIPTION) \
149 MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::NetworkModule)
158#define MODULEDEFS(CLASS, DESCRIPTION) NETWORKMODULEDEFS(CLASS, DESCRIPTION)
214 :
CTimer(pModule, uInterval, uCycles, sLabel, sDescription),
215 m_pFBCallback(nullptr) {}
348 return new M(p, pUser, pNetwork, sModName, sModPath, eType);
529 m_vSubPages.push_back(spSubPage);
600 CChan& Channel,
char cMode,
601 bool bAdded,
bool bNoChange);
604 CChan& Channel,
unsigned char uMode,
605 bool bAdded,
bool bNoChange);
608 CChan& Channel,
unsigned char uMode,
609 bool bAdded,
bool bNoChange);
617 CChan& Channel,
bool bNoChange);
622 CChan& Channel,
bool bNoChange);
627 CChan& Channel,
bool bNoChange);
629 CChan& Channel,
bool bNoChange);
639 const CString& sArg,
bool bAdded,
bool bNoChange);
641 const CString& sArg,
bool bAdded,
bool bNoChange);
706 const std::vector<CChan*>& vChans);
709 const std::vector<CChan*>& vChans);
717 const std::vector<CChan*>& vChans);
720 const std::vector<CChan*>& vChans);
791 CString& sLine,
const timeval& tv);
1176 u_int uCycles = 0,
const CString& sDescription =
"");
1228 std::function<
void(
const CString& sLine)> func);
1251 bool bWriteToDisk =
true);
1254 return m_mssRegistry.find(sName) != m_mssRegistry.end();
1258 return m_mssRegistry.find(sName);
1260 MCString::iterator
EndNV() {
return m_mssRegistry.end(); }
1261 MCString::iterator
BeginNV() {
return m_mssRegistry.begin(); }
1262 void DelNV(MCString::iterator it) { m_mssRegistry.erase(it); }
1319 unsigned short uPort);
1465 bool& bSuccess,
CString& sRetMsg);
1478 const CString& sContext =
"")
const;
1480 int iNum,
const CString& sContext =
"")
const;
1482 const CString& sContext =
"")
const;
1530 std::map<CString, CModCommand> m_mCommands;
1562 CChan& Channel,
char cMode,
bool bAdded,
1565 CChan& Channel,
unsigned char uMode,
bool bAdded,
1568 CChan& Channel,
unsigned char uMode,
bool bAdded,
1591 const CString& sArg,
bool bAdded,
bool bNoChange);
1593 const CString& sArg,
bool bAdded,
bool bNoChange);
1605 const std::vector<CChan*>& vChans);
1607 const std::vector<CChan*>& vChans);
1609 const std::vector<CChan*>& vChans);
1611 const std::vector<CChan*>& vChans);
1712 std::set<CModInfo>& ssMods,
1715 std::set<CModInfo>& ssMods,
1731 unsigned short uPort);
1761 static bool ValidateModuleName(
const CString& sModule,
CString& sRetMsg);
void * ModHandle
Definition Modules.h:257
void(*) FPTimer_t(CModule *, CFPTimer *)
Definition Modules.h:208
CModule * TModLoad(ModHandle p, CUser *pUser, CIRCNetwork *pNetwork, const CString &sModName, const CString &sModPath, CModInfo::EModuleType eType)
Definition Modules.h:345
void TModInfo(CModInfo &Info)
Definition Modules.h:342
std::vector< TWebSubPage > VWebSubPages
Definition WebModules.h:33
std::shared_ptr< CWebSubPage > TWebSubPage
Definition WebModules.h:32
std::set< CString > SCString
Definition ZNCString.h:37
CModule * m_pModule
Definition Modules.h:180
virtual void OnClientChangedSupport(CClient *pClient, bool bState)
Definition Modules.h:174
CModule * GetModule()
Definition Modules.h:176
virtual void OnServerChangedSupport(CIRCNetwork *pNetwork, bool bState)
Definition Modules.h:173
void SetModule(CModule *p)
Definition Modules.h:177
virtual ~CCapability()=default
Definition Translation.h:103
Definition Translation.h:71
CFPTimer(CModule *pModule, unsigned int uInterval, unsigned int uCycles, const CString &sLabel, const CString &sDescription)
Definition Modules.h:212
virtual ~CFPTimer()
Definition Modules.h:217
void SetFPCallback(FPTimer_t p)
Definition Modules.h:219
void RunJob() override
this is the method you should override
Definition Modules.h:222
Definition IRCNetwork.h:40
CJob()
Definition Threads.h:73
Here is a small explanation of how messages on IRC work, and how you can use this class to get useful...
Definition Message.h:57
A helper class for handling commands in modules.
Definition Modules.h:352
CModCommand & operator=(const CModCommand &other)=default
Assignment operator, needed so that this can be saved in a std::map.
CModCommand(const CString &sCmd, CModule *pMod, ModCmdFunc func, const CString &sArgs, const CString &sDesc)
Construct a new CModCommand.
CString GetDescription() const
Definition Modules.h:397
CModCommand(const CString &sCmd, CmdFunc func, const COptionalTranslation &Args, const COptionalTranslation &Desc)
void AddHelp(CTable &Table) const
Add this command to the CTable instance.
void(CModule::*) ModCmdFunc(const CString &sLine)
Type for the callback function that handles the actual command.
Definition Modules.h:355
static void InitHelp(CTable &Table)
Initialize a CTable so that it can be used with AddHelp().
CModCommand()
Default constructor, needed so that this can be saved in a std::map.
CmdFunc GetFunction() const
Definition Modules.h:395
void Call(const CString &sLine) const
Definition Modules.h:399
std::function< void(const CString &sLine)> CmdFunc
Definition Modules.h:356
CModCommand(const CModCommand &other)=default
Copy constructor, needed so that this can be saved in a std::map.
CString GetArgs() const
Definition Modules.h:396
const CString & GetCommand() const
Definition Modules.h:394
const CString & GetPath() const
Definition Modules.h:306
void SetName(const CString &s)
Definition Modules.h:316
void SetHasArgs(bool b=false)
Definition Modules.h:321
CString m_sWikiPage
Definition Modules.h:335
void SetArgsHelpText(const CString &s)
Definition Modules.h:320
bool m_bHasArgs
Definition Modules.h:337
const CString & GetName() const
Definition Modules.h:305
void SetLoader(ModLoader fLoader)
Definition Modules.h:322
EModuleType m_eDefaultType
Definition Modules.h:331
CModule *(*) ModLoader(ModHandle p, CUser *pUser, CIRCNetwork *pNetwork, const CString &sModName, const CString &sModPath, EModuleType eType)
Definition Modules.h:263
EModuleType
Definition Modules.h:261
@ NetworkModule
Definition Modules.h:261
@ UserModule
Definition Modules.h:261
@ GlobalModule
Definition Modules.h:261
CString t_s(const CString &sEnglish, const CString &sContext="") const
CString m_sName
Definition Modules.h:332
bool operator<(const CModInfo &Info) const
Definition Modules.h:281
static CString ModuleTypeToString(EModuleType eType)
Definition Modules.h:291
bool GetHasArgs() const
Definition Modules.h:310
bool SupportsType(EModuleType eType) const
Definition Modules.h:285
~CModInfo()
Definition Modules.h:279
void SetPath(const CString &s)
Definition Modules.h:317
CString m_sDescription
Definition Modules.h:334
void SetWikiPage(const CString &s)
Definition Modules.h:319
std::set< EModuleType > m_seType
Definition Modules.h:330
void AddType(EModuleType eType)
Definition Modules.h:289
const CString & GetWikiPage() const
Definition Modules.h:308
const CString & GetArgsHelpText() const
Definition Modules.h:309
CModInfo(const CString &sName, const CString &sPath, EModuleType eType)
Definition Modules.h:269
CString m_sArgsHelpText
Definition Modules.h:336
ModLoader m_fLoader
Definition Modules.h:338
ModLoader GetLoader() const
Definition Modules.h:311
void SetDefaultType(EModuleType eType)
Definition Modules.h:323
const CString & GetDescription() const
Definition Modules.h:307
EModuleType GetDefaultType() const
Definition Modules.h:312
CString m_sPath
Definition Modules.h:333
CModInfo()
Definition Modules.h:268
void SetDescription(const CString &s)
Definition Modules.h:318
A CJob version which can be safely used in modules.
Definition Modules.h:235
const CString & GetDescription() const
Definition Modules.h:247
const CString m_sDescription
Definition Modules.h:253
const CString & GetName() const
Definition Modules.h:246
const CString m_sName
Definition Modules.h:252
CModule * m_pModule
Definition Modules.h:251
CModule * GetModule() const
Definition Modules.h:245
CModuleJob(const CModuleJob &)=delete
CModuleJob & operator=(const CModuleJob &)=delete
CModuleJob(CModule *pModule, const CString &sName, const CString &sDesc)
Definition Modules.h:237
The base class for your own ZNC modules.
Definition Modules.h:421
std::map< CString, std::unique_ptr< CCapability > > m_mServerDependentCaps
Definition Modules.h:1524
CModule(const CModule &)=delete
virtual EModRet OnIRCConnecting(CIRCSock *pIRCSock)
This module hook is called just before ZNC tries to establish a connection to an IRC server.
virtual void OnDevoice(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
virtual void OnDeop2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
Called when a nick is deopped on a channel.
bool UnlinkSocket(CSocket *pSocket)
virtual EModRet OnDeleteNetwork(CIRCNetwork &Network)
This module hook is called when a network is deleted.
bool AddTimer(FPTimer_t pFBCallback, const CString &sLabel, u_int uInterval, u_int uCycles=0, const CString &sDescription="")
virtual EModRet OnUserQuit(CString &sMessage)
CString m_sDescription
Definition Modules.h:1507
virtual void OnVoice2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
Called when a nick is voiced on a channel.
void SetType(CModInfo::EModuleType eType)
Definition Modules.h:1270
virtual EModRet OnBroadcast(CString &sMessage)
This module hook is called when a message is broadcasted to all users.
virtual EModRet OnTopicMessage(CTopicMessage &Message)
Called when we receive a channel topic change from IRC.
EModRet
This enum is just used for return from module hooks.
Definition Modules.h:437
@ HALTCORE
Continue calling other modules.
Definition Modules.h:454
@ HALT
This is the same as both CModule::HALTMODS and CModule::HALTCORE together.
Definition Modules.h:445
@ CONTINUE
ZNC will continue event processing normally.
Definition Modules.h:441
@ HALTMODS
Stop sending this even to other modules which were not called yet.
Definition Modules.h:449
bool MoveRegistry(const CString &sPath)
std::set< CTimer * > m_sTimers
Definition Modules.h:1508
virtual CString GetWebMenuTitle()
Return the title of the module's section in the web interface's side bar.
Definition Modules.h:496
void CancelJob(CModuleJob *pJob)
virtual void OnMode2(const CNick *pOpNick, CChan &Channel, char uMode, const CString &sArg, bool bAdded, bool bNoChange)
Called on an individual channel mode change.
const CString & GetModDataDir() const
Get the module's data dir.
Definition Modules.h:1171
virtual EModRet OnInviteMessage(CInviteMessage &Message)
Called when a user is invited to a channel.
const CString & GetSavePath() const
CSocket * FindSocket(const CString &sSockName)
virtual EModRet OnUserActionMessage(CActionMessage &Message)
Called when a client sends a CTCP ACTION request ("/me").
virtual EModRet OnChanBufferStarting(CChan &Chan, CClient &Client)
Called before a channel buffer is played back to a client.
CString m_sArgs
Definition Modules.h:1521
void InternalServerDependentCapsOnIRCConnected()
virtual void OnChanPermission(const CNick &OpNick, const CNick &Nick, CChan &Channel, unsigned char uMode, bool bAdded, bool bNoChange)
virtual EModRet OnPrivTextMessage(CTextMessage &Message)
Called when we receive a private PRIVMSG message from IRC.
virtual EModRet OnUserQuitMessage(CQuitMessage &Message)
This module hook is called when a client quits ZNC.
virtual EModRet OnUserJoinMessage(CJoinMessage &Message)
This hooks is called when a user sends a JOIN message.
virtual void OnJoin(const CNick &Nick, CChan &Channel)
virtual EModRet OnGetModInfo(CModInfo &ModInfo, const CString &sModule, bool &bSuccess, CString &sRetMsg)
Called when info about a module is needed.
void InternalServerDependentCapsOnIRCDisconnected()
virtual void OnMode(const CNick &OpNick, CChan &Channel, char uMode, const CString &sArg, bool bAdded, bool bNoChange)
virtual void ListTimers()
virtual void OnClientDetached()
Called upon disconnect, and also during JumpNetwork.
virtual EModRet OnModuleUnloading(CModule *pModule, bool &bSuccess, CString &sRetMsg)
Called when a module is going to be unloaded.
virtual void OnRawMode2(const CNick *pOpNick, CChan &Channel, const CString &sModes, const CString &sArgs)
Called on any channel mode change.
virtual EModRet OnPrivBufferStarting(CQuery &Query, CClient &Client)
Called before a query buffer is played back to a client.
ModHandle GetDLL()
Definition Modules.h:1109
CUser * m_pUser
Definition Modules.h:1515
virtual EModRet OnTimerAutoJoin(CChan &Channel)
This module hook is called just before ZNC tries to join a channel by itself because it's in the conf...
bool SaveRegistry() const
virtual EModRet OnChanActionMessage(CActionMessage &Message)
Called when we receive a channel CTCP ACTION ("/me" in a channel) from IRC.
virtual void OnClientGetSASLMechanisms(SCString &ssMechanisms)
Called when a client requests SASL authentication.
std::set< CSocket * > m_sSockets
Definition Modules.h:1509
virtual void OnRawMode(const CNick &OpNick, CChan &Channel, const CString &sModes, const CString &sArgs)
virtual bool OnBoot()
This module hook is called during ZNC startup.
virtual bool WebRequiresLogin()
Modules which can only be used with an active user session have to return true here.
Definition Modules.h:488
virtual EModRet OnJoining(CChan &Channel)
This module hook is called just before ZNC tries to join an IRC channel.
bool InternalServerDependentCapsIsClientCapSupported(CClient *pClient, const CString &sCap, bool bState)
virtual void OnQuitMessage(CQuitMessage &Message, const std::vector< CChan * > &vChans)
Called when a nick quit from IRC.
virtual EModRet OnUnknownUserRaw(CClient *pClient, CString &sLine)
This function behaves like CModule::OnUserRaw(), but is also called before the client successfully lo...
virtual void OnServerCapResult(const CString &sCap, bool bSuccess)
Called for every CAP accepted or rejected by server (with CAP ACK or CAP NAK after our CAP REQ).
virtual EModRet OnUserPart(CString &sChannel, CString &sMessage)
void SetDescription(const CString &s)
Definition Modules.h:1271
virtual void OnNick(const CNick &Nick, const CString &sNewNick, const std::vector< CChan * > &vChans)
virtual void OnChanPermission2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, unsigned char uMode, bool bAdded, bool bNoChange)
const CString & GetModPath() const
Definition Modules.h:1280
virtual EModRet OnUserTextMessage(CTextMessage &Message)
This module hook is called when a user sends a PRIVMSG message.
virtual void OnChanPermission3(const CNick *pOpNick, const CNick &Nick, CChan &Channel, char cMode, bool bAdded, bool bNoChange)
This module hook is called when a user mode on a channel changes.
MCString::iterator BeginNV()
Definition Modules.h:1261
virtual EModRet OnChanBufferPlayMessage(CMessage &Message)
Called for each message during a channel's buffer play back.
CModInfo::EModuleType m_eType
Definition Modules.h:1506
virtual EModRet OnClientSASLAuthenticate(const CString &sMechanism, const CString &sMessage)
Called when a client is sending us a SASL message after the mechanism was selected.
void SetArgs(const CString &s)
Definition Modules.h:1273
virtual EModRet OnUserCTCP(CString &sTarget, CString &sMessage)
bool UnlinkTimer(CTimer *pTimer)
virtual void OnKick(const CNick &OpNick, const CString &sKickedNick, CChan &Channel, const CString &sMessage)
virtual EModRet OnUserMsg(CString &sTarget, CString &sMessage)
CString m_sModPath
Definition Modules.h:1522
bool RemSocket(const CString &sSockName)
virtual void ClearSubPages()
Removes all registered (AddSubPage'd) SubPages.
Definition Modules.h:533
virtual CString GetWebFilesPath()
void SetUser(CUser *pUser)
virtual void OnModCTCP(const CString &sMessage)
Called when your module nick was sent a CTCP message.
virtual bool OnWebRequest(CWebSock &WebSock, const CString &sPageName, CTemplate &Tmpl)
If OnWebPreRequest returned false, and the RequiresAdmin/IsAdmin check has been passed,...
virtual EModRet OnChanNoticeMessage(CNoticeMessage &Message)
Called when we receive a channel NOTICE message from IRC.
void InternalServerDependentCapsOnClientAttached()
virtual EModRet OnChanBufferEnding(CChan &Chan, CClient &Client)
Called after a channel buffer was played back to a client.
virtual EModRet OnPrivBufferPlayLine2(CClient &Client, CString &sLine, const timeval &tv)
virtual EModRet OnPrivNotice(CNick &Nick, CString &sMessage)
bool AddCommand(const CString &sCmd, const COptionalTranslation &Args, const COptionalTranslation &Desc, std::function< void(const CString &sLine)> func)
virtual EModRet OnPrivBufferPlayLine(CClient &Client, CString &sLine)
virtual void OnDevoice2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
Called when a nick is devoiced on a channel.
void InternalServerDependentCapsOnClientCapLs(CClient *pClient, SCString &ssCaps)
void SetModPath(const CString &s)
Definition Modules.h:1272
virtual VWebSubPages & GetSubPages()
Returns a list of all registered SubPages.
Definition Modules.h:537
virtual void OnFailedLogin(const CString &sUsername, const CString &sRemoteIP)
Called after a client login was rejected.
virtual EModRet OnPrivBufferEnding(CQuery &Query, CClient &Client)
Called after a query buffer was played back to a client.
CModInfo::EModuleType GetType() const
Definition Modules.h:1277
virtual EModRet OnUserTopic(CString &sChannel, CString &sTopic)
const CModCommand * FindCommand(const CString &sCmd) const
bool RemCommand(const CString &sCmd)
virtual EModRet OnChanNotice(CNick &Nick, CChan &Channel, CString &sMessage)
virtual bool OnServerCapAvailable(const CString &sCap)
Called for every CAP received via CAP LS from server.
void SetClient(CClient *pClient)
virtual void OnClientAttached()
Called after login, and also during JumpNetwork.
virtual void OnKickMessage(CKickMessage &Message)
Called when a nick is kicked from a channel.
virtual bool PutStatus(const CString &sLine)
This function generates a query from *status.
virtual void OnClientLogin()
Called when a client successfully logged in to ZNC.
virtual EModRet OnPrivNoticeMessage(CNoticeMessage &Message)
Called when we receive a private NOTICE message from IRC.
virtual bool OnEmbeddedWebRequest(CWebSock &WebSock, const CString &sPageName, CTemplate &Tmpl)
Using this hook, module can embed web stuff directly to different places.
virtual EModRet OnAddNetwork(CIRCNetwork &Network, CString &sErrorRet)
This module hook is called when a network is being added.
virtual EModRet OnChanAction(CNick &Nick, CChan &Channel, CString &sMessage)
virtual EModRet OnPrivCTCPMessage(CCTCPMessage &Message)
Called when we receive a private CTCP request from IRC.
virtual EModRet OnChanBufferPlayLine(CChan &Chan, CClient &Client, CString &sLine)
virtual EModRet OnPrivCTCP(CNick &Nick, CString &sMessage)
bool AddCommand(const CModCommand &Command)
virtual EModRet OnSendToIRC(CString &sLine)
void InternalServerDependentCapsOnClientCapRequest(CClient *pClient, const CString &sCap, bool bState)
virtual bool OnWebPreRequest(CWebSock &WebSock, const CString &sPageName)
For WebMods: Called before the list of registered SubPages will be checked.
virtual EModRet OnUnknownUserRawMessage(CMessage &Message)
virtual EModRet OnPrivTagMessage(CTargetMessage &Message)
Called when we receive a private TAGMSG message from IRC.
const CString & GetModName() const
Definition Modules.h:1160
virtual EModRet OnStatusCommand(CString &sCommand)
Called when a command to *status is sent.
bool DelNV(const CString &sName, bool bWriteToDisk=true)
void HandleHelpCommand(const CString &sLine="")
Send a description of all registered commands via PutModule().
void CancelJobs(const std::set< CModuleJob * > &sJobs)
bool AddTimer(CTimer *pTimer)
virtual void OnClientSASLAborted()
Called when a client sent '*' to abort SASL, or aborted it for another reason.
CModule & operator=(const CModule &)=delete
bool AddCommand(const CString &sCmd, CModCommand::ModCmdFunc func, const CString &sArgs="", const CString &sDesc="")
CTimer * FindTimer(const CString &sLabel)
CModule(ModHandle pDLL, CUser *pUser, CIRCNetwork *pNetwork, const CString &sModName, const CString &sDataDir, CModInfo::EModuleType eType=CModInfo::NetworkModule)
CClient * m_pClient
Definition Modules.h:1517
virtual CString GetWebPath()
virtual EModRet OnModuleLoading(const CString &sModName, const CString &sArgs, CModInfo::EModuleType eType, bool &bSuccess, CString &sRetMsg)
Called when a module is going to be loaded.
std::set< CSocket * >::const_iterator BeginSockets() const
Definition Modules.h:1196
bool SetNV(const CString &sName, const CString &sValue, bool bWriteToDisk=true)
std::set< CTimer * >::const_iterator BeginTimers() const
Definition Modules.h:1181
virtual EModRet OnChanCTCP(CNick &Nick, CChan &Channel, CString &sMessage)
virtual EModRet OnUserTopicRequest(CString &sChannel)
This hook is called when a user requests a channel's topic.
virtual EModRet OnUserRawMessage(CMessage &Message)
This module hook is called when a client sends any message to ZNC.
CString m_sSavePath
Definition Modules.h:1520
virtual void OnOp(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool AddSocket(CSocket *pSocket)
CTranslationDomainRefHolder m_Translation
Definition Modules.h:1523
virtual bool OnServerCap302Available(const CString &sCap, const CString &sValue)
Called for every CAP received via CAP LS from server.
virtual EModRet OnDeleteUser(CUser &User)
This module hook is called when a user is deleted.
MCString::iterator EndNV()
Definition Modules.h:1260
virtual EModRet OnTopic(CNick &Nick, CChan &Channel, CString &sTopic)
virtual EModRet OnUserCTCPReply(CString &sTarget, CString &sMessage)
CSockManager * GetManager() const
Definition Modules.h:1296
virtual bool OnLoad(const CString &sArgsi, CString &sMessage)
This module hook is called when a module is loaded.
virtual EModRet OnUserPartMessage(CPartMessage &Message)
This hooks is called when a user sends a PART message.
ModHandle m_pDLL
Definition Modules.h:1513
virtual EModRet OnRaw(CString &sLine)
Called on any raw IRC line received from the IRC server.
CString GetModNick() const
virtual void OnJoinMessage(CJoinMessage &Message)
Called when a nick joins a channel.
void DelNV(MCString::iterator it)
Definition Modules.h:1262
virtual void OnDeop(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
virtual EModRet OnUserTopicMessage(CTopicMessage &Message)
This module hook is called when a user wants to change a channel topic.
virtual EModRet OnUserCTCPReplyMessage(CCTCPMessage &Message)
This module hook is called when a client sends a CTCP reply.
bool RemTimer(CTimer *pTimer)
virtual EModRet OnLoginAttempt(std::shared_ptr< CAuthBase > Auth)
This module hook is called when a client tries to login.
virtual void OnIRCDisconnected()
This module hook is called when a user gets disconnected from IRC.
virtual void OnModCommand(const CString &sCommand)
Called when a command to your module is sent, e.g.
virtual void OnClientCapLs(CClient *pClient, SCString &ssCaps)
Called when a client told us CAP LS.
CInlineFormatMessage t_p(const CString &sEnglish, const CString &sEnglishes, int iNum, const CString &sContext="") const
virtual void OnQuit(const CNick &Nick, const CString &sMessage, const std::vector< CChan * > &vChans)
virtual unsigned int PutModule(const CTable &table)
This function calls CModule::PutModule(const CString&, constCString&, const CString&) for each line i...
virtual bool PutModule(const CString &sLine)
This function sends a query from your module nick.
virtual EModRet OnUserNoticeMessage(CNoticeMessage &Message)
This module hook is called when a user sends a NOTICE message.
bool HasNV(const CString &sName) const
Definition Modules.h:1253
virtual EModRet OnPrivBufferPlayMessage(CMessage &Message)
Called for each message during a query's buffer play back.
const CString & GetArgs() const
Definition Modules.h:1279
void AddJob(CModuleJob *pJob)
virtual EModRet OnRawMessage(CMessage &Message)
Called on any raw message received from the IRC server.
virtual void OnPartMessage(CPartMessage &Message)
Called when a nick parts a channel.
virtual void OnClientCapRequest(CClient *pClient, const CString &sCap, bool bState)
Called when we actually need to turn a capability on or off for a client.
CString GetNV(const CString &sName) const
virtual void ListSockets()
virtual bool ValidateWebRequestCSRFCheck(CWebSock &WebSock, const CString &sPageName)
If ValidateWebRequestCSRFCheck returned false, a CSRF error will be printed.
EModException
Definition Modules.h:457
@ UNLOAD
Your module can throw this enum at any given time.
Definition Modules.h:461
virtual void OnNickMessage(CNickMessage &Message, const std::vector< CChan * > &vChans)
Called when a nickname change occurs.
bool UnlinkJob(CModuleJob *pJob)
virtual EModRet OnPrivAction(CNick &Nick, CString &sMessage)
virtual EModRet OnPrivMsg(CNick &Nick, CString &sMessage)
virtual void AddSubPage(TWebSubPage spSubPage)
Registers a sub page for the sidebar.
Definition Modules.h:528
CIRCNetwork * GetNetwork() const
Definition Modules.h:1291
void AddServerDependentCapability(const CString &sName, std::unique_ptr< CCapability > pCap)
Simple API to support client capabilities which depend on server to support that capability.
virtual EModRet OnPrivActionMessage(CActionMessage &Message)
Called when we receive a private CTCP ACTION ("/me" in query) from IRC.
virtual EModRet OnUserNotice(CString &sTarget, CString &sMessage)
virtual EModRet OnChanTagMessage(CTargetMessage &Message)
Called when we receive a channel TAGMSG message from IRC.
virtual EModRet OnChanTextMessage(CTextMessage &Message)
Called when we receive a channel PRIVMSG message from IRC.
virtual EModRet OnChanMsg(CNick &Nick, CChan &Channel, CString &sMessage)
virtual void OnClientConnect(CZNCSock *pSock, const CString &sHost, unsigned short uPort)
This module hook is called when there is an incoming connection on any of ZNC's listening sockets.
virtual EModRet OnAddUser(CUser &User, CString &sErrorRet)
This module hook is called when a user is being added.
virtual void OnIRCConnected()
This module hook is called after a successful login to IRC.
CInlineFormatMessage t_f(const CString &sEnglish, const CString &sContext="") const
virtual void OnClientDisconnect()
Called when a client disconnected from ZNC.
virtual EModRet OnChanCTCPMessage(CCTCPMessage &Message)
Called when we receive a channel CTCP request from IRC.
virtual EModRet OnSendToIRCMessage(CMessage &Message)
Called immediately before ZNC sends a raw traffic line to the IRC server.
virtual EModRet OnNumericMessage(CNumericMessage &Message)
Called when a numeric message is received from the IRC server.
virtual EModRet OnClientSASLServerInitialChallenge(const CString &sMechanism, CString &sResponse)
Called when a client has selected a SASL mechanism for SASL authentication.
virtual bool WebRequiresAdmin()
Return true if this module should only be usable for admins on the web.
Definition Modules.h:492
virtual EModRet OnUserCTCPMessage(CCTCPMessage &Message)
This module hook is called when a client sends a CTCP request.
CString t_s(const CString &sEnglish, const CString &sContext="") const
virtual EModRet OnIRCRegistration(CString &sPass, CString &sNick, CString &sIdent, CString &sRealName)
This module hook is called before loging in to the IRC server.
std::set< CSocket * >::const_iterator EndSockets() const
Definition Modules.h:1199
virtual bool PutIRC(const CMessage &Message)
This function sends a given IRC message to the IRC server, if we are connected to one.
virtual EModRet OnInvite(const CNick &Nick, const CString &sChan)
Called when user is invited into a channel.
bool CancelJob(const CString &sJobName)
virtual void OnPart(const CNick &Nick, CChan &Channel, const CString &sMessage)
void InternalServerDependentCapsOnServerCapResult(const CString &sCap, bool bSuccess)
virtual EModRet OnUserTagMessage(CTargetMessage &Message)
This module hook is called when a user sends a TAGMSG message.
virtual EModRet OnSendToClientMessage(CMessage &Message)
Called immediately before ZNC sends a raw traffic line to a client.
CUser * GetUser() const
Definition Modules.h:1287
void AddHelpCommand()
Register the "Help" command.
virtual void OnVoice(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool HandleCommand(const CString &sLine)
This function tries to dispatch the given command via the correct instance of CModCommand.
virtual EModRet OnUserAction(CString &sTarget, CString &sMessage)
const CString & GetDescription() const
Definition Modules.h:1278
virtual bool IsClientCapSupported(CClient *pClient, const CString &sCap, bool bState)
Called only to check if your module supports turning on/off named capability.
virtual void OnPostRehash()
This module hook is called after a successful rehash.
virtual EModRet OnUserRaw(CString &sLine)
This module hook is called when a client sends a raw traffic line to ZNC.
virtual EModRet OnSendToClient(CString &sLine, CClient &Client)
CSockManager * m_pManager
Definition Modules.h:1514
virtual EModRet OnChanBufferPlayLine2(CChan &Chan, CClient &Client, CString &sLine, const timeval &tv)
bool RemSocket(CSocket *pSocket)
virtual void OnUnknownModCommand(const CString &sCommand)
This is similar to OnModCommand(), but it is only called if HandleCommand didn't find any that wants ...
CIRCNetwork * m_pNetwork
Definition Modules.h:1516
virtual bool PutUser(const CString &sLine)
This function sends a given raw IRC line to a client.
virtual bool PutModNotice(const CString &sLine)
Send a notice from your module nick.
virtual EModRet OnCTCPReplyMessage(CCTCPMessage &Message)
Called when we receive a CTCP reply from IRC.
virtual void OnModNotice(const CString &sMessage)
Called when a your module nick was sent a notice.
virtual void OnIRCConnectionError(CIRCSock *pIRCSock)
This module hook is called when a CIRCSock fails to connect or a module returned HALTCORE from OnIRCC...
virtual EModRet OnUserJoin(CString &sChannel, CString &sKey)
void InternalServerDependentCapsOnClientDetached()
CString m_sDataDir
Definition Modules.h:1519
CDelayedTranslation t_d(const CString &sEnglish, const CString &sContext="") const
std::set< CTimer * >::const_iterator EndTimers() const
Definition Modules.h:1184
CString & ExpandString(const CString &sStr, CString &sRet) const
bool RemTimer(const CString &sLabel)
virtual EModRet OnCTCPReply(CNick &Nick, CString &sMessage)
std::set< CModuleJob * > m_sJobs
Definition Modules.h:1511
virtual void OnOp2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
Called when a nick is opped on a channel.
void SetNetwork(CIRCNetwork *pNetwork)
virtual bool PutIRC(const CString &sLine)
This function sends a given IRC line to the IRC server, if we are connected to one.
CClient * GetClient() const
Definition Modules.h:1295
bool InternalServerDependentCapsOnServerCap302Available(const CString &sCap, const CString &sValue)
virtual void OnPreRehash()
Called just before znc.conf is rehashed.
virtual void OnGetAvailableMods(std::set< CModInfo > &ssMods, CModInfo::EModuleType eType)
Called when list of available mods is requested.
CString ExpandString(const CString &sStr) const
CString m_sModName
Definition Modules.h:1518
MCString::iterator FindNV(const CString &sName)
Definition Modules.h:1257
bool ClearNV(bool bWriteToDisk=true)
void Unload()
This function throws CModule::UNLOAD which causes this module to be unloaded.
Definition Modules.h:470
static bool GetModInfo(CModInfo &ModInfo, const CString &sModule, CString &sRetMsg)
bool OnUserPartMessage(CPartMessage &Message)
bool OnServerCapResult(const CString &sCap, bool bSuccess)
bool OnModuleLoading(const CString &sModName, const CString &sArgs, CModInfo::EModuleType eType, bool &bSuccess, CString &sRetMsg)
bool OnUserAction(CString &sTarget, CString &sMessage)
bool OnUserCTCPMessage(CCTCPMessage &Message)
bool OnPrivBufferPlayLine(CClient &Client, CString &sLine)
bool OnJoin(const CNick &Nick, CChan &Channel)
bool OnBroadcast(CString &sMessage)
bool OnNumericMessage(CNumericMessage &Message)
bool OnMode2(const CNick *pOpNick, CChan &Channel, char uMode, const CString &sArg, bool bAdded, bool bNoChange)
bool OnDeleteUser(CUser &User)
bool OnPrivBufferEnding(CQuery &Query, CClient &Client)
std::queue< std::pair< CString, CString > > ModDirList
Definition Modules.h:1724
bool OnChanCTCP(CNick &Nick, CChan &Channel, CString &sMessage)
bool OnRawMessage(CMessage &Message)
bool OnTopic(CNick &Nick, CChan &Channel, CString &sTopic)
bool OnIRCConnectionError(CIRCSock *pIRCSock)
static void GetAvailableMods(std::set< CModInfo > &ssMods, CModInfo::EModuleType eType=CModInfo::UserModule)
bool OnPrivAction(CNick &Nick, CString &sMessage)
bool OnClientConnect(CZNCSock *pSock, const CString &sHost, unsigned short uPort)
bool OnPrivBufferPlayMessage(CMessage &Message)
bool OnModNotice(const CString &sMessage)
bool OnChanAction(CNick &Nick, CChan &Channel, CString &sMessage)
bool OnClientSASLServerInitialChallenge(const CString &sMechanism, CString &sResponse)
bool OnRaw(CString &sLine)
bool OnPartMessage(CPartMessage &Message)
bool OnLoginAttempt(std::shared_ptr< CAuthBase > Auth)
bool OnClientCapRequest(CClient *pClient, const CString &sCap, bool bState)
CModule * FindModule(const CString &sModule) const
bool OnInviteMessage(CInviteMessage &Message)
bool OnSendToIRCMessage(CMessage &Message)
bool OnUnknownUserRawMessage(CMessage &Message)
bool OnPrivTextMessage(CTextMessage &Message)
bool OnClientCapLs(CClient *pClient, SCString &ssCaps)
bool OnChanBufferEnding(CChan &Chan, CClient &Client)
bool OnServerCapAvailable(const CString &sCap, const CString &sValue)
bool OnQuitMessage(CQuitMessage &Message, const std::vector< CChan * > &vChans)
static ModDirList GetModDirs()
CClient * GetClient() const
Definition Modules.h:1546
bool OnIRCRegistration(CString &sPass, CString &sNick, CString &sIdent, CString &sRealName)
bool IsClientCapSupported(CClient *pClient, const CString &sCap, bool bState)
bool OnGetModInfo(CModInfo &ModInfo, const CString &sModule, bool &bSuccess, CString &sRetMsg)
bool OnUserCTCPReplyMessage(CCTCPMessage &Message)
bool OnUserJoin(CString &sChannel, CString &sKey)
bool OnInvite(const CNick &Nick, const CString &sChan)
bool OnCTCPReply(CNick &Nick, CString &sMessage)
bool OnUserTopicRequest(CString &sChannel)
CIRCNetwork * GetNetwork() const
Definition Modules.h:1545
bool OnQuit(const CNick &Nick, const CString &sMessage, const std::vector< CChan * > &vChans)
bool ReloadModule(const CString &sModule, const CString &sArgs, CUser *pUser, CIRCNetwork *pNetwork, CString &sRetMsg)
bool OnPrivTagMessage(CTargetMessage &Message)
bool OnUserNoticeMessage(CNoticeMessage &Message)
bool OnDeleteNetwork(CIRCNetwork &Network)
bool OnUserCTCP(CString &sTarget, CString &sMessage)
bool OnChanPermission3(const CNick *pOpNick, const CNick &Nick, CChan &Channel, char cMode, bool bAdded, bool bNoChange)
bool OnClientSASLAuthenticate(const CString &sMechanism, const CString &sBuffer)
bool OnUserCTCPReply(CString &sTarget, CString &sMessage)
bool OnUserRawMessage(CMessage &Message)
void SetClient(CClient *pClient)
Definition Modules.h:1543
bool OnChanBufferPlayLine(CChan &Chan, CClient &Client, CString &sLine)
bool OnChanNoticeMessage(CNoticeMessage &Message)
bool OnChanBufferStarting(CChan &Chan, CClient &Client)
bool OnJoinMessage(CJoinMessage &Message)
bool OnChanBufferPlayLine2(CChan &Chan, CClient &Client, CString &sLine, const timeval &tv)
static void GetDefaultMods(std::set< CModInfo > &ssMods, CModInfo::EModuleType eType=CModInfo::UserModule)
bool OnTopicMessage(CTopicMessage &Message)
bool LoadModule(const CString &sModule, const CString &sArgs, CModInfo::EModuleType eType, CUser *pUser, CIRCNetwork *pNetwork, CString &sRetMsg)
bool OnChanNotice(CNick &Nick, CChan &Channel, CString &sMessage)
bool OnKick(const CNick &Nick, const CString &sOpNick, CChan &Channel, const CString &sMessage)
bool OnOp2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool OnTimerAutoJoin(CChan &Channel)
bool OnChanTextMessage(CTextMessage &Message)
bool UnloadModule(const CString &sModule, CString &sRetMsg)
CModules & operator=(const CModules &)=default
bool OnModuleUnloading(CModule *pModule, bool &bSuccess, CString &sRetMsg)
bool OnUserTopic(CString &sChannel, CString &sTopic)
CModules(const CModules &)=default
bool OnGetAvailableMods(std::set< CModInfo > &ssMods, CModInfo::EModuleType eType)
bool OnNickMessage(CNickMessage &Message, const std::vector< CChan * > &vChans)
bool OnAddNetwork(CIRCNetwork &Network, CString &sErrorRet)
bool OnVoice2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool UnloadModule(const CString &sModule)
bool OnUserRaw(CString &sLine)
bool OnPrivNotice(CNick &Nick, CString &sMessage)
bool OnChanTagMessage(CTargetMessage &Message)
bool OnClientGetSASLMechanisms(SCString &ssMechanisms)
bool OnUserActionMessage(CActionMessage &Message)
bool OnChanMsg(CNick &Nick, CChan &Channel, CString &sMessage)
bool OnUserMsg(CString &sTarget, CString &sMessage)
bool OnOp(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool OnChanCTCPMessage(CCTCPMessage &Message)
bool OnModCommand(const CString &sCommand)
bool OnUserTagMessage(CTargetMessage &Message)
bool OnPrivMsg(CNick &Nick, CString &sMessage)
CClient * m_pClient
Definition Modules.h:1766
bool OnClientSASLAborted()
bool OnSendToClient(CString &sLine, CClient &Client)
CUser * GetUser() const
Definition Modules.h:1544
CIRCNetwork * m_pNetwork
Definition Modules.h:1765
bool OnRawMode2(const CNick *pOpNick, CChan &Channel, const CString &sModes, const CString &sArgs)
bool OnPrivNoticeMessage(CNoticeMessage &Message)
bool OnSendToIRC(CString &sLine)
bool OnDevoice2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool OnChanPermission2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, unsigned char uMode, bool bAdded, bool bNoChange)
bool OnUnknownUserRaw(CClient *pClient, CString &sLine)
bool OnDevoice(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool OnModCTCP(const CString &sMessage)
static bool GetModPathInfo(CModInfo &ModInfo, const CString &sModule, const CString &sModPath, CString &sRetMsg)
bool OnUserTextMessage(CTextMessage &Message)
bool OnPrivCTCPMessage(CCTCPMessage &Message)
bool OnCTCPReplyMessage(CCTCPMessage &Message)
static bool FindModPath(const CString &sModule, CString &sModPath, CString &sDataPath)
bool OnVoice(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool OnChanActionMessage(CActionMessage &Message)
bool OnUserQuit(CString &sMessage)
bool OnNick(const CNick &Nick, const CString &sNewNick, const std::vector< CChan * > &vChans)
bool OnPrivCTCP(CNick &Nick, CString &sMessage)
bool OnPrivBufferPlayLine2(CClient &Client, CString &sLine, const timeval &tv)
bool OnUserJoinMessage(CJoinMessage &Message)
bool OnPrivBufferStarting(CQuery &Query, CClient &Client)
bool OnStatusCommand(CString &sCommand)
bool OnKickMessage(CKickMessage &Message)
bool OnIRCConnecting(CIRCSock *pIRCSock)
CUser * m_pUser
Definition Modules.h:1764
bool OnUserNotice(CString &sTarget, CString &sMessage)
bool OnRawMode(const CNick &OpNick, CChan &Channel, const CString &sModes, const CString &sArgs)
bool OnJoining(CChan &Channel)
void SetUser(CUser *pUser)
Definition Modules.h:1541
bool OnDeop2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool OnUserPart(CString &sChannel, CString &sMessage)
void SetNetwork(CIRCNetwork *pNetwork)
Definition Modules.h:1542
bool OnMode(const CNick &OpNick, CChan &Channel, char uMode, const CString &sArg, bool bAdded, bool bNoChange)
bool OnFailedLogin(const CString &sUsername, const CString &sRemoteIP)
bool OnPart(const CNick &Nick, CChan &Channel, const CString &sMessage)
bool OnUserQuitMessage(CQuitMessage &Message)
bool OnChanBufferPlayMessage(CMessage &Message)
bool OnSendToClientMessage(CMessage &Message)
bool OnDeop(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool OnPrivActionMessage(CActionMessage &Message)
bool OnAddUser(CUser &User, CString &sErrorRet)
bool OnUserTopicMessage(CTopicMessage &Message)
bool OnChanPermission(const CNick &OpNick, const CNick &Nick, CChan &Channel, unsigned char uMode, bool bAdded, bool bNoChange)
bool OnClientDisconnect()
Definition Translation.h:85
Base Csock implementation to be used by modules.
Definition Socket.h:269
String class that is used inside ZNC.
Definition ZNCString.h:50
Generate a grid-like or list-like output from a given input.
Definition Utils.h:173
Definition Template.h:129
CModule * m_pModule
Definition Modules.h:204
CModule * GetModule() const
CTimer & operator=(const CTimer &)=delete
void SetModule(CModule *p)
CTimer(const CTimer &)=delete
CString m_sDescription
Definition Modules.h:205
CTimer(CModule *pModule, unsigned int uInterval, unsigned int uCycles, const CString &sLabel, const CString &sDescription)
void SetDescription(const CString &s)
const CString & GetDescription() const
Definition WebModules.h:127
A dictionary for strings.
Definition ZNCString.h:577
C-style entry point to the module.
Definition Modules.h:81
const char * pcVersion
Definition Modules.h:82
void(*) fpFillModInfo(CModInfo &)
Definition Modules.h:85
const char * pcCompileOptions
Definition Modules.h:84
const char * pcVersionExtra
Definition Modules.h:83
Definition Translation.h:62