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) 185 CTimer(
CModule* pModule,
unsigned int uInterval,
unsigned int uCycles,
214 :
CTimer(pModule, uInterval, uCycles, sLabel, sDescription),
215 m_pFBCallback(nullptr) {}
348 return new M(p, pUser, pNetwork, sModName, sModPath, eType);
356 typedef std::function<void(const CString& sLine)>
CmdFunc;
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);
783 CString& sLine,
const timeval& tv);
1149 u_int uCycles = 0,
const CString& sDescription =
"");
1183 void CancelJobs(
const std::set<CModuleJob*>& sJobs);
1201 std::function<
void(
const CString& sLine)> func);
1224 bool bWriteToDisk =
true);
1227 return m_mssRegistry.find(sName) != m_mssRegistry.end();
1229 bool DelNV(
const CString& sName,
bool bWriteToDisk =
true);
1231 return m_mssRegistry.find(sName);
1233 MCString::iterator
EndNV() {
return m_mssRegistry.end(); }
1234 MCString::iterator
BeginNV() {
return m_mssRegistry.begin(); }
1235 void DelNV(MCString::iterator it) { m_mssRegistry.erase(it); }
1236 bool ClearNV(
bool bWriteToDisk =
true);
1292 unsigned short uPort);
1397 bool& bSuccess,
CString& sRetMsg);
1410 const CString& sContext =
"")
const;
1412 int iNum,
const CString& sContext =
"")
const;
1414 const CString& sContext =
"")
const;
1462 std::map<CString, CModCommand> m_mCommands;
1494 CChan& Channel,
char cMode,
bool bAdded,
1497 CChan& Channel,
unsigned char uMode,
bool bAdded,
1500 CChan& Channel,
unsigned char uMode,
bool bAdded,
1523 const CString& sArg,
bool bAdded,
bool bNoChange);
1525 const CString& sArg,
bool bAdded,
bool bNoChange);
1537 const std::vector<CChan*>& vChans);
1539 const std::vector<CChan*>& vChans);
1541 const std::vector<CChan*>& vChans);
1543 const std::vector<CChan*>& vChans);
1640 std::set<CModInfo>& ssMods,
1643 std::set<CModInfo>& ssMods,
1659 unsigned short uPort);
1681 static bool ValidateModuleName(
const CString& sModule,
CString& sRetMsg);
1689 #endif // !ZNC_MODULES_H virtual EModRet OnAddUser(CUser &User, CString &sErrorRet)
This module hook is called when a user is being added.
Definition: Message.h:285
virtual void OnOp(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
const CModCommand * FindCommand(const CString &sCmd) const
bool UnlinkSocket(CSocket *pSocket)
bool HasNV(const CString &sName) const
Definition: Modules.h:1226
std::set< CSocket * >::const_iterator EndSockets() const
Definition: Modules.h:1172
Definition: Message.h:327
void SetDescription(const CString &s)
CDelayedTranslation t_d(const CString &sEnglish, const CString &sContext="") const
virtual bool OnBoot()
This module hook is called during ZNC startup.
void CancelJobs(const std::set< CModuleJob *> &sJobs)
virtual void OnOp2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
Called when a nick is opped on a channel.
void SetArgs(const CString &s)
Definition: Modules.h:1246
virtual EModRet OnChanActionMessage(CActionMessage &Message)
Called when we receive a channel CTCP ACTION ("/me" in a channel) from IRC.
virtual EModRet OnUserCTCP(CString &sTarget, CString &sMessage)
CModInfo()
Definition: Modules.h:268
CModule * GetModule() const
virtual void OnClientAttached()
Called after login, and also during JumpNetwork.
bool OnPrivNoticeMessage(CNoticeMessage &Message)
CModule(ModHandle pDLL, CUser *pUser, CIRCNetwork *pNetwork, const CString &sModName, const CString &sDataDir, CModInfo::EModuleType eType=CModInfo::NetworkModule)
virtual EModRet OnPrivNoticeMessage(CNoticeMessage &Message)
Called when we receive a private NOTICE message from IRC.
virtual EModRet OnChanCTCPMessage(CCTCPMessage &Message)
Called when we receive a channel CTCP request from IRC.
bool OnChanAction(CNick &Nick, CChan &Channel, CString &sMessage)
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.
bool OnChanNoticeMessage(CNoticeMessage &Message)
static bool GetModPathInfo(CModInfo &ModInfo, const CString &sModule, const CString &sModPath, CString &sRetMsg)
virtual EModRet OnTopic(CNick &Nick, CChan &Channel, CString &sTopic)
bool OnUserRawMessage(CMessage &Message)
bool OnAddNetwork(CIRCNetwork &Network, CString &sErrorRet)
void SetHasArgs(bool b=false)
Definition: Modules.h:321
CModCommand & operator=(const CModCommand &other)=default
Assignment operator, needed so that this can be saved in a std::map.
static void InitHelp(CTable &Table)
Initialize a CTable so that it can be used with AddHelp().
bool UnlinkJob(CModuleJob *pJob)
virtual CString GetWebPath()
virtual ~CCapability()=default
CString m_sDescription
Definition: Modules.h:205
bool OnKick(const CNick &Nick, const CString &sOpNick, CChan &Channel, const CString &sMessage)
virtual EModRet OnInvite(const CNick &Nick, const CString &sChan)
Called when user is invited into a channel.
bool AddSocket(CSocket *pSocket)
const char * pcVersionExtra
Definition: Modules.h:83
bool OnPrivBufferPlayLine(CClient &Client, CString &sLine)
void SetNetwork(CIRCNetwork *pNetwork)
Definition: Modules.h:1474
std::set< CTimer * >::const_iterator BeginTimers() const
Definition: Modules.h:1154
CClient * GetClient() const
Definition: Modules.h:1478
bool OnDeop(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool OnIRCConnecting(CIRCSock *pIRCSock)
virtual EModRet OnUserQuit(CString &sMessage)
CString GetNV(const CString &sName) const
virtual EModRet OnChanNoticeMessage(CNoticeMessage &Message)
Called when we receive a channel NOTICE message from IRC.
CString t_s(const CString &sEnglish, const CString &sContext="") const
void AddServerDependentCapability(const CString &sName, std::unique_ptr< CCapability > pCap)
Simple API to support client capabilities which depend on server to support that capability.
CModInfo(const CString &sName, const CString &sPath, EModuleType eType)
Definition: Modules.h:269
virtual void OnModNotice(const CString &sMessage)
Called when a your module nick was sent a notice.
bool OnUserActionMessage(CActionMessage &Message)
CString m_sSavePath
Definition: Modules.h:1452
ZNC will continue event processing normally.
Definition: Modules.h:441
A job is a task which should run without blocking the main thread.
Definition: Threads.h:67
virtual EModRet OnUnknownUserRaw(CClient *pClient, CString &sLine)
This function behaves like CModule::OnUserRaw(), but is also called before the client successfully lo...
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.
EModuleType m_eDefaultType
Definition: Modules.h:331
virtual EModRet OnChanNotice(CNick &Nick, CChan &Channel, CString &sMessage)
EModuleType
Definition: Modules.h:261
virtual void OnUnknownModCommand(const CString &sCommand)
This is similar to OnModCommand(), but it is only called if HandleCommand didn't find any that wants ...
A CJob version which can be safely used in modules.
Definition: Modules.h:235
bool OnServerCapAvailable(const CString &sCap, const CString &sValue)
virtual bool PutUser(const CString &sLine)
This function sends a given raw IRC line to a client.
void SetUser(CUser *pUser)
Definition: Modules.h:1473
virtual void OnDeop(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
CModuleJob & operator=(const CModuleJob &)=delete
virtual EModRet OnTopicMessage(CTopicMessage &Message)
Called when we receive a channel topic change from IRC.
CString m_sWikiPage
Definition: Modules.h:335
void InternalServerDependentCapsOnClientAttached()
virtual EModRet OnUserCTCPReplyMessage(CCTCPMessage &Message)
This module hook is called when a client sends a CTCP reply.
bool OnGetModInfo(CModInfo &ModInfo, const CString &sModule, bool &bSuccess, CString &sRetMsg)
virtual EModRet OnPrivBufferPlayMessage(CMessage &Message)
Called for each message during a query's buffer play back.
virtual void OnFailedLogin(const CString &sUsername, const CString &sRemoteIP)
Called after a client login was rejected.
std::queue< std::pair< CString, CString > > ModDirList
Definition: Modules.h:1652
bool OnUserJoin(CString &sChannel, CString &sKey)
void InternalServerDependentCapsOnIRCDisconnected()
virtual void OnChanPermission(const CNick &OpNick, const CNick &Nick, CChan &Channel, unsigned char uMode, bool bAdded, bool bNoChange)
void AddHelpCommand()
Register the "Help" command.
MCString::iterator FindNV(const CString &sName)
Definition: Modules.h:1230
virtual void OnPostRehash()
This module hook is called after a successful rehash.
static void GetAvailableMods(std::set< CModInfo > &ssMods, CModInfo::EModuleType eType=CModInfo::UserModule)
CIRCNetwork * GetNetwork() const
Definition: Modules.h:1264
CTimer * FindTimer(const CString &sLabel)
virtual EModRet OnUserActionMessage(CActionMessage &Message)
Called when a client sends a CTCP ACTION request ("/me").
void SetModPath(const CString &s)
Definition: Modules.h:1245
std::function< void(const CString &sLine)> CmdFunc
Definition: Modules.h:356
bool OnTopicMessage(CTopicMessage &Message)
bool OnSendToIRC(CString &sLine)
bool OnChanNotice(CNick &Nick, CChan &Channel, CString &sMessage)
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...
void SetFPCallback(FPTimer_t p)
Definition: Modules.h:219
virtual void OnMode2(const CNick *pOpNick, CChan &Channel, char uMode, const CString &sArg, bool bAdded, bool bNoChange)
Called on an individual channel mode change.
bool OnSendToClient(CString &sLine, CClient &Client)
virtual void OnClientCapLs(CClient *pClient, SCString &ssCaps)
Called when a client told us CAP LS.
std::set< CTimer * > m_sTimers
Definition: Modules.h:1440
EModuleType GetDefaultType() const
Definition: Modules.h:312
bool OnPrivCTCP(CNick &Nick, CString &sMessage)
bool OnUserRaw(CString &sLine)
const CString m_sDescription
Definition: Modules.h:253
bool OnUserTopicMessage(CTopicMessage &Message)
bool OnNumericMessage(CNumericMessage &Message)
bool OnMode2(const CNick *pOpNick, CChan &Channel, char uMode, const CString &sArg, bool bAdded, bool bNoChange)
virtual void OnModCTCP(const CString &sMessage)
Called when your module nick was sent a CTCP message.
const CString & GetModPath() const
Definition: Modules.h:1253
bool MoveRegistry(const CString &sPath)
bool OnClientDisconnect()
Definition: Message.h:302
bool OnKickMessage(CKickMessage &Message)
Definition: Message.h:278
void SetModule(CModule *p)
const CString & GetModName() const
Definition: Modules.h:1133
bool OnClientCapLs(CClient *pClient, SCString &ssCaps)
virtual void OnPartMessage(CPartMessage &Message)
Called when a nick parts a channel.
bool OnNick(const CNick &Nick, const CString &sNewNick, const std::vector< CChan *> &vChans)
CSockManager * m_pManager
Definition: Modules.h:1446
bool OnPrivActionMessage(CActionMessage &Message)
bool DelNV(const CString &sName, bool bWriteToDisk=true)
CModCommand()
Default constructor, needed so that this can be saved in a std::map.
virtual EModRet OnIRCConnecting(CIRCSock *pIRCSock)
This module hook is called just before ZNC tries to establish a connection to an IRC server...
const CString & GetDescription() const
Definition: Modules.h:1251
bool OnServerCapResult(const CString &sCap, bool bSuccess)
This is the same as both CModule::HALTMODS and CModule::HALTCORE together.
Definition: Modules.h:445
void(CModule::* ModCmdFunc)(const CString &sLine)
Type for the callback function that handles the actual command.
Definition: Modules.h:355
std::set< CSocket * > m_sSockets
Definition: Modules.h:1441
bool OnUserTextMessage(CTextMessage &Message)
bool OnChanPermission(const CNick &OpNick, const CNick &Nick, CChan &Channel, unsigned char uMode, bool bAdded, bool bNoChange)
bool UnloadModule(const CString &sModule)
bool OnTopic(CNick &Nick, CChan &Channel, CString &sTopic)
bool OnUserQuitMessage(CQuitMessage &Message)
std::set< CModuleJob * > m_sJobs
Definition: Modules.h:1443
CString t_s(const CString &sEnglish, const CString &sContext="") const
const CString & GetSavePath() const
virtual EModRet OnUserCTCPMessage(CCTCPMessage &Message)
This module hook is called when a client sends a CTCP request.
CString m_sArgsHelpText
Definition: Modules.h:336
Definition: Modules.h:1465
bool OnUserJoinMessage(CJoinMessage &Message)
bool OnModuleUnloading(CModule *pModule, bool &bSuccess, CString &sRetMsg)
CModule * FindModule(const CString &sModule) const
bool IsClientCapSupported(CClient *pClient, const CString &sCap, bool bState)
virtual bool OnEmbeddedWebRequest(CWebSock &WebSock, const CString &sPageName, CTemplate &Tmpl)
Using this hook, module can embed web stuff directly to different places.
void SetDescription(const CString &s)
Definition: Modules.h:1244
CClient * m_pClient
Definition: Modules.h:1449
C-style entry point to the module.
Definition: Modules.h:81
CModule & operator=(const CModule &)=delete
virtual EModRet OnUserNotice(CString &sTarget, CString &sMessage)
virtual void OnDevoice(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
void SetPath(const CString &s)
Definition: Modules.h:317
bool OnQuitMessage(CQuitMessage &Message, const std::vector< CChan *> &vChans)
virtual void OnClientLogin()
Called when a client successfully logged in to ZNC.
virtual void OnClientChangedSupport(CClient *pClient, bool bState)
Definition: Modules.h:174
bool OnPrivMsg(CNick &Nick, CString &sMessage)
const CString & GetDescription() const
Definition: Modules.h:247
bool ClearNV(bool bWriteToDisk=true)
Definition: Translation.h:85
bool OnSendToClientMessage(CMessage &Message)
bool m_bHasArgs
Definition: Modules.h:337
CString Resolve() const
Definition: Translation.h:90
void AddJob(CModuleJob *pJob)
std::vector< TWebSubPage > VWebSubPages
Definition: WebModules.h:33
virtual EModRet OnPrivBufferStarting(CQuery &Query, CClient &Client)
Called before a query buffer is played back to a client.
virtual void OnKick(const CNick &OpNick, const CString &sKickedNick, CChan &Channel, const CString &sMessage)
CTranslationDomainRefHolder m_Translation
Definition: Modules.h:1455
std::set< CString > SCString
Definition: ZNCString.h:35
const CString & GetWikiPage() const
Definition: Modules.h:308
bool InternalServerDependentCapsOnServerCap302Available(const CString &sCap, const CString &sValue)
Definition: Modules.h:261
virtual EModRet OnGetModInfo(CModInfo &ModInfo, const CString &sModule, bool &bSuccess, CString &sRetMsg)
Called when info about a module is needed.
virtual EModRet OnUserJoinMessage(CJoinMessage &Message)
This hooks is called when a user sends a JOIN message.
CClient * m_pClient
Definition: Modules.h:1686
void SetClient(CClient *pClient)
CInlineFormatMessage t_p(const CString &sEnglish, const CString &sEnglishes, int iNum, const CString &sContext="") const
bool OnIRCConnectionError(CIRCSock *pIRCSock)
std::set< EModuleType > m_seType
Definition: Modules.h:330
bool OnRawMessage(CMessage &Message)
void RunJob() override
this is the method you should override
Definition: Modules.h:222
bool OnPrivCTCPMessage(CCTCPMessage &Message)
Base Csock implementation to be used by modules.
Definition: Socket.h:247
bool OnBroadcast(CString &sMessage)
void HandleHelpCommand(const CString &sLine="")
Send a description of all registered commands via PutModule().
bool OnOp(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
virtual void OnClientDisconnect()
Called when a client disconnected from ZNC.
void SetNetwork(CIRCNetwork *pNetwork)
Definition: Modules.h:210
CModule * GetModule()
Definition: Modules.h:176
Definition: Message.h:240
virtual bool OnServerCap302Available(const CString &sCap, const CString &sValue)
Called for every CAP received via CAP LS from server.
virtual bool OnWebRequest(CWebSock &WebSock, const CString &sPageName, CTemplate &Tmpl)
If OnWebPreRequest returned false, and the RequiresAdmin/IsAdmin check has been passed, this method will be called with the page name.
bool OnChanBufferPlayLine2(CChan &Chan, CClient &Client, CString &sLine, const timeval &tv)
Definition: Modules.h:183
void SetLoader(ModLoader fLoader)
Definition: Modules.h:322
virtual EModRet OnChanCTCP(CNick &Nick, CChan &Channel, CString &sMessage)
bool AddCommand(const CModCommand &Command)
virtual EModRet OnUserAction(CString &sTarget, CString &sMessage)
const CString & GetName() const
Definition: Modules.h:305
virtual EModRet OnUnknownUserRawMessage(CMessage &Message)
bool OnRawMode(const CNick &OpNick, CChan &Channel, const CString &sModes, const CString &sArgs)
CUser * GetUser() const
Definition: Modules.h:1260
bool InternalServerDependentCapsIsClientCapSupported(CClient *pClient, const CString &sCap, bool bState)
virtual EModRet OnSendToClientMessage(CMessage &Message)
Called immediately before ZNC sends a raw traffic line to a client.
virtual void OnDevoice2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
Called when a nick is devoiced on a channel.
void * ModHandle
Definition: Modules.h:257
bool AddTimer(CTimer *pTimer)
bool OnIRCRegistration(CString &sPass, CString &sNick, CString &sIdent, CString &sRealName)
virtual EModRet OnUserTopicRequest(CString &sChannel)
This hook is called when a user requests a channel's topic.
bool SaveRegistry() const
void InternalServerDependentCapsOnClientCapRequest(CClient *pClient, const CString &sCap, bool bState)
Definition: Message.h:311
virtual EModRet OnPrivCTCP(CNick &Nick, CString &sMessage)
bool OnSendToIRCMessage(CMessage &Message)
std::set< CSocket * >::const_iterator BeginSockets() const
Definition: Modules.h:1169
std::set< CTimer * >::const_iterator EndTimers() const
Definition: Modules.h:1157
virtual bool PutModule(const CString &sLine)
This function sends a query from your module nick.
virtual void OnIRCConnectionError(CIRCSock *pIRCSock)
This module hook is called when a CIRCSock fails to connect or a module returned HALTCORE from OnIRCC...
Definition: Message.h:229
bool OnPrivBufferPlayMessage(CMessage &Message)
bool operator<(const CModInfo &Info) const
Definition: Modules.h:281
Definition: Translation.h:71
bool OnTimerAutoJoin(CChan &Channel)
std::shared_ptr< CWebSubPage > TWebSubPage
Definition: WebModules.h:30
Definition: Template.h:129
void InternalServerDependentCapsOnClientCapLs(CClient *pClient, SCString &ssCaps)
bool GetHasArgs() const
Definition: Modules.h:310
bool OnChanPermission3(const CNick *pOpNick, const CNick &Nick, CChan &Channel, char cMode, bool bAdded, bool bNoChange)
bool OnModNotice(const CString &sMessage)
virtual EModRet OnUserPart(CString &sChannel, CString &sMessage)
virtual bool IsClientCapSupported(CClient *pClient, const CString &sCap, bool bState)
Called only to check if your module supports turning on/off named capability.
Definition: Translation.h:62
Definition: IRCNetwork.h:40
virtual bool WebRequiresLogin()
Modules which can only be used with an active user session have to return true here.
Definition: Modules.h:488
bool OnChanBufferPlayLine(CChan &Chan, CClient &Client, CString &sLine)
void(* fpFillModInfo)(CModInfo &)
Definition: Modules.h:85
virtual void OnNick(const CNick &Nick, const CString &sNewNick, const std::vector< CChan *> &vChans)
bool OnVoice2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
EModException
Definition: Modules.h:457
bool OnChanActionMessage(CActionMessage &Message)
virtual void OnQuitMessage(CQuitMessage &Message, const std::vector< CChan *> &vChans)
Called when a nick quit from IRC.
bool OnUserCTCPMessage(CCTCPMessage &Message)
const char * pcVersion
Definition: Modules.h:82
CIRCNetwork * GetNetwork() const
Definition: Modules.h:1477
bool LoadModule(const CString &sModule, const CString &sArgs, CModInfo::EModuleType eType, CUser *pUser, CIRCNetwork *pNetwork, CString &sRetMsg)
~CModInfo()
Definition: Modules.h:279
virtual void OnModCommand(const CString &sCommand)
Called when a command to your module is sent, e.g.
void SetName(const CString &s)
Definition: Modules.h:316
CUser * m_pUser
Definition: Modules.h:1684
virtual EModRet OnAddNetwork(CIRCNetwork &Network, CString &sErrorRet)
This module hook is called when a network is being added.
bool OnUserTopic(CString &sChannel, CString &sTopic)
bool UnlinkTimer(CTimer *pTimer)
virtual ~CFPTimer()
Definition: Modules.h:217
String class that is used inside ZNC.
Definition: ZNCString.h:68
virtual EModRet OnBroadcast(CString &sMessage)
This module hook is called when a message is broadcasted to all users.
CModules & operator=(const CModules &)=default
static void GetDefaultMods(std::set< CModInfo > &ssMods, CModInfo::EModuleType eType=CModInfo::UserModule)
bool OnDeop2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
virtual EModRet OnSendToIRC(CString &sLine)
virtual void OnRawMode(const CNick &OpNick, CChan &Channel, const CString &sModes, const CString &sArgs)
Continue calling other modules.
Definition: Modules.h:454
virtual bool OnServerCapAvailable(const CString &sCap)
Called for every CAP received via CAP LS from server.
bool OnPrivBufferStarting(CQuery &Query, CClient &Client)
virtual EModRet OnSendToClient(CString &sLine, CClient &Client)
CTimer & operator=(const CTimer &)=delete
virtual void OnPart(const CNick &Nick, CChan &Channel, const CString &sMessage)
bool OnJoin(const CNick &Nick, CChan &Channel)
virtual EModRet OnUserRawMessage(CMessage &Message)
This module hook is called when a client sends any message to ZNC.
void Unload()
This function throws CModule::UNLOAD which causes this module to be unloaded.
Definition: Modules.h:470
CSockManager * GetManager() const
Definition: Modules.h:1269
virtual EModRet OnUserPartMessage(CPartMessage &Message)
This hooks is called when a user sends a PART message.
virtual void OnGetAvailableMods(std::set< CModInfo > &ssMods, CModInfo::EModuleType eType)
Called when list of available mods is requested.
bool OnUserQuit(CString &sMessage)
virtual void OnServerChangedSupport(CIRCNetwork *pNetwork, bool bState)
Definition: Modules.h:173
EModRet
This enum is just used for return from module hooks.
Definition: Modules.h:437
Definition: Modules.h:261
void DelNV(MCString::iterator it)
Definition: Modules.h:1235
virtual bool OnWebPreRequest(CWebSock &WebSock, const CString &sPageName)
For WebMods: Called before the list of registered SubPages will be checked.
void Call(const CString &sLine) const
Definition: Modules.h:399
bool RemSocket(CSocket *pSocket)
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)...
bool OnUnknownUserRaw(CClient *pClient, CString &sLine)
virtual bool PutStatus(const CString &sLine)
This function generates a query from *status.
bool OnPrivNotice(CNick &Nick, CString &sMessage)
Definition: Modules.h:259
bool OnChanCTCP(CNick &Nick, CChan &Channel, CString &sMessage)
const CString & GetModDataDir() const
Get the module's data dir.
Definition: Modules.h:1144
static CString ModuleTypeToString(EModuleType eType)
Definition: Modules.h:291
The base class for your own ZNC modules.
Definition: Modules.h:421
bool OnStatusCommand(CString &sCommand)
bool OnUserNotice(CString &sTarget, CString &sMessage)
CModInfo::EModuleType m_eType
Definition: Modules.h:1438
const CString & GetPath() const
Definition: Modules.h:306
virtual EModRet OnUserJoin(CString &sChannel, CString &sKey)
bool OnChanBufferEnding(CChan &Chan, CClient &Client)
static ModDirList GetModDirs()
bool OnModuleLoading(const CString &sModName, const CString &sArgs, CModInfo::EModuleType eType, bool &bSuccess, CString &sRetMsg)
virtual EModRet OnChanAction(CNick &Nick, CChan &Channel, CString &sMessage)
CUser * m_pUser
Definition: Modules.h:1447
bool RemTimer(CTimer *pTimer)
virtual EModRet OnModuleUnloading(CModule *pModule, bool &bSuccess, CString &sRetMsg)
Called when a module is going to be unloaded.
bool OnPart(const CNick &Nick, CChan &Channel, const CString &sMessage)
virtual EModRet OnSendToIRCMessage(CMessage &Message)
Called immediately before ZNC sends a raw traffic line to the IRC server.
void SetDescription(const CString &s)
Definition: Modules.h:318
virtual CString GetWebFilesPath()
void AddType(EModuleType eType)
Definition: Modules.h:289
virtual void ListTimers()
virtual void OnVoice(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
virtual void OnClientDetached()
Called upon disconnect, and also during JumpNetwork.
MCString::iterator EndNV()
Definition: Modules.h:1233
bool OnChanBufferPlayMessage(CMessage &Message)
virtual EModRet OnDeleteNetwork(CIRCNetwork &Network)
This module hook is called when a network is deleted.
bool OnUserPart(CString &sChannel, CString &sMessage)
bool OnVoice(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
virtual void OnIRCConnected()
This module hook is called after a successful login to IRC.
void CancelJob(CModuleJob *pJob)
Definition: Modules.h:170
const CString & GetArgsHelpText() const
Definition: Modules.h:309
CModule * TModLoad(ModHandle p, CUser *pUser, CIRCNetwork *pNetwork, const CString &sModName, const CString &sModPath, CModInfo::EModuleType eType)
Definition: Modules.h:345
virtual EModRet OnPrivTextMessage(CTextMessage &Message)
Called when we receive a private PRIVMSG message from IRC.
bool OnPrivTextMessage(CTextMessage &Message)
void TModInfo(CModInfo &Info)
Definition: Modules.h:342
bool OnUserNoticeMessage(CNoticeMessage &Message)
virtual EModRet OnCTCPReplyMessage(CCTCPMessage &Message)
Called when we receive a CTCP reply from IRC.
Definition: WebModules.h:127
void SetType(CModInfo::EModuleType eType)
Definition: Modules.h:1243
virtual EModRet OnChanBufferPlayLine(CChan &Chan, CClient &Client, CString &sLine)
this is the main cron job class
Definition: Csocket.h:392
bool OnChanTextMessage(CTextMessage &Message)
bool OnNickMessage(CNickMessage &Message, const std::vector< CChan *> &vChans)
bool OnCTCPReply(CNick &Nick, CString &sMessage)
virtual void ListSockets()
virtual VWebSubPages & GetSubPages()
Returns a list of all registered SubPages.
Definition: Modules.h:537
virtual EModRet OnChanBufferEnding(CChan &Chan, CClient &Client)
Called after a channel buffer was played back to a client.
bool OnUserCTCPReply(CString &sTarget, CString &sMessage)
bool OnChanCTCPMessage(CCTCPMessage &Message)
virtual EModRet OnChanBufferPlayLine2(CChan &Chan, CClient &Client, CString &sLine, const timeval &tv)
virtual void OnIRCDisconnected()
This module hook is called when a user gets disconnected from IRC.
bool HandleCommand(const CString &sLine)
This function tries to dispatch the given command via the correct instance of CModCommand.
CModule * m_pModule
Definition: Modules.h:251
virtual EModRet OnCTCPReply(CNick &Nick, CString &sMessage)
virtual EModRet OnChanTextMessage(CTextMessage &Message)
Called when we receive a channel PRIVMSG message from IRC.
const CString & GetCommand() const
Definition: Modules.h:394
Definition: Modules.h:261
virtual EModRet OnUserMsg(CString &sTarget, CString &sMessage)
virtual bool OnLoad(const CString &sArgsi, CString &sMessage)
This module hook is called when a module is loaded.
virtual EModRet OnUserTopic(CString &sChannel, CString &sTopic)
bool OnCTCPReplyMessage(CCTCPMessage &Message)
virtual EModRet OnChanBufferPlayMessage(CMessage &Message)
Called for each message during a channel's buffer play back.
void AddHelp(CTable &Table) const
Add this command to the CTable instance.
virtual EModRet OnRaw(CString &sLine)
Called on any raw IRC line received from the IRC server.
CString ExpandString(const CString &sStr) const
void SetWikiPage(const CString &s)
Definition: Modules.h:319
const CString & GetArgs() const
Definition: Modules.h:1252
virtual EModRet OnUserRaw(CString &sLine)
This module hook is called when a client sends a raw traffic line to ZNC.
CString m_sArgs
Definition: Modules.h:1453
Definition: Message.h:320
CString m_sModPath
Definition: Modules.h:1454
virtual void OnMode(const CNick &OpNick, CChan &Channel, char uMode, const CString &sArg, bool bAdded, bool bNoChange)
bool OnUserCTCPReplyMessage(CCTCPMessage &Message)
virtual EModRet OnNumericMessage(CNumericMessage &Message)
Called when a numeric message is received from the IRC server.
CUser * GetUser() const
Definition: Modules.h:1476
CString m_sDataDir
Definition: Modules.h:1451
CString m_sName
Definition: Modules.h:332
A dictionary for strings.
Definition: ZNCString.h:595
CString GetArgs() const
Definition: Modules.h:396
bool OnModCommand(const CString &sCommand)
bool OnUserMsg(CString &sTarget, CString &sMessage)
void SetArgsHelpText(const CString &s)
Definition: Modules.h:320
bool OnDevoice2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
virtual void OnPreRehash()
Called just before znc.conf is rehashed.
CModule * GetModule() const
Definition: Modules.h:245
bool OnDevoice(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool OnQuit(const CNick &Nick, const CString &sMessage, const std::vector< CChan *> &vChans)
Definition: Message.h:270
CModuleJob(CModule *pModule, const CString &sName, const CString &sDesc)
Definition: Modules.h:237
bool OnUserTopicRequest(CString &sChannel)
bool RemCommand(const CString &sCmd)
virtual EModRet OnUserCTCPReply(CString &sTarget, CString &sMessage)
virtual bool PutModNotice(const CString &sLine)
Send a notice from your module nick.
CTimer(CModule *pModule, unsigned int uInterval, unsigned int uCycles, const CString &sLabel, const CString &sDescription)
virtual void OnKickMessage(CKickMessage &Message)
Called when a nick is kicked from a channel.
virtual void OnNickMessage(CNickMessage &Message, const std::vector< CChan *> &vChans)
Called when a nickname change occurs.
bool OnGetAvailableMods(std::set< CModInfo > &ssMods, CModInfo::EModuleType eType)
CModInfo::EModuleType GetType() const
Definition: Modules.h:1250
bool OnMode(const CNick &OpNick, CChan &Channel, char uMode, const CString &sArg, bool bAdded, bool bNoChange)
bool OnUserPartMessage(CPartMessage &Message)
bool OnClientCapRequest(CClient *pClient, const CString &sCap, bool bState)
CIRCNetwork * m_pNetwork
Definition: Modules.h:1448
CInlineFormatMessage t_f(const CString &sEnglish, const CString &sContext="") const
CClient * GetClient() const
Definition: Modules.h:1268
CString m_sModName
Definition: Modules.h:1450
virtual void OnRawMode2(const CNick *pOpNick, CChan &Channel, const CString &sModes, const CString &sArgs)
Called on any channel mode change.
bool OnInvite(const CNick &Nick, const CString &sChan)
const CString & GetName() const
Definition: Modules.h:246
virtual bool PutIRC(const CString &sLine)
This function sends a given IRC line to the IRC server, if we are connected to one.
bool OnOp2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
ModHandle GetDLL()
Definition: Modules.h:1082
bool OnUnknownUserRawMessage(CMessage &Message)
bool OnRawMode2(const CNick *pOpNick, CChan &Channel, const CString &sModes, const CString &sArgs)
bool OnPartMessage(CPartMessage &Message)
ModLoader GetLoader() const
Definition: Modules.h:311
bool OnLoginAttempt(std::shared_ptr< CAuthBase > Auth)
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.
virtual EModRet OnDeleteUser(CUser &User)
This module hook is called when a user is deleted.
virtual EModRet OnUserQuitMessage(CQuitMessage &Message)
This module hook is called when a client quits ZNC.
CFPTimer(CModule *pModule, unsigned int uInterval, unsigned int uCycles, const CString &sLabel, const CString &sDescription)
Definition: Modules.h:212
bool OnChanMsg(CNick &Nick, CChan &Channel, CString &sMessage)
void SetModule(CModule *p)
Definition: Modules.h:177
bool OnPrivBufferPlayLine2(CClient &Client, CString &sLine, const timeval &tv)
virtual void AddSubPage(TWebSubPage spSubPage)
Registers a sub page for the sidebar.
Definition: Modules.h:528
virtual EModRet OnChanMsg(CNick &Nick, CChan &Channel, CString &sMessage)
CString m_sPath
Definition: Modules.h:333
bool OnUserCTCP(CString &sTarget, CString &sMessage)
virtual void ClearSubPages()
Removes all registered (AddSubPage'd) SubPages.
Definition: Modules.h:533
virtual EModRet OnLoginAttempt(std::shared_ptr< CAuthBase > Auth)
This module hook is called when a client tries to login.
bool OnUserAction(CString &sTarget, CString &sMessage)
CString GetModNick() const
bool OnDeleteUser(CUser &User)
bool OnChanBufferStarting(CChan &Chan, CClient &Client)
MCString::iterator BeginNV()
Definition: Modules.h:1234
ModHandle m_pDLL
Definition: Modules.h:1445
virtual void OnJoinMessage(CJoinMessage &Message)
Called when a nick joins a channel.
bool OnFailedLogin(const CString &sUsername, const CString &sRemoteIP)
bool OnPrivBufferEnding(CQuery &Query, CClient &Client)
const CString m_sName
Definition: Modules.h:252
virtual bool WebRequiresAdmin()
Return true if this module should only be usable for admins on the web.
Definition: Modules.h:492
bool OnModCTCP(const CString &sMessage)
virtual EModRet OnJoining(CChan &Channel)
This module hook is called just before ZNC tries to join an IRC channel.
virtual void OnDeop2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
Called when a nick is deopped on a channel.
void InternalServerDependentCapsOnIRCConnected()
bool OnJoinMessage(CJoinMessage &Message)
bool ReloadModule(const CString &sModule, const CString &sArgs, CUser *pUser, CIRCNetwork *pNetwork, CString &sRetMsg)
CIRCNetwork * m_pNetwork
Definition: Modules.h:1685
CString GetDescription() const
Definition: Modules.h:397
CModule * m_pModule
Definition: Modules.h:180
void SetDefaultType(EModuleType eType)
Definition: Modules.h:323
Definition: Message.h:250
void SetUser(CUser *pUser)
virtual void OnVoice2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
Called when a nick is voiced on a channel.
CModule * m_pModule
Definition: Modules.h:204
bool OnAddUser(CUser &User, CString &sErrorRet)
CmdFunc GetFunction() const
Definition: Modules.h:395
bool OnPrivAction(CNick &Nick, CString &sMessage)
virtual EModRet OnPrivActionMessage(CActionMessage &Message)
Called when we receive a private CTCP ACTION ("/me" in query) from IRC.
virtual EModRet OnPrivAction(CNick &Nick, CString &sMessage)
static bool GetModInfo(CModInfo &ModInfo, const CString &sModule, CString &sRetMsg)
Your module can throw this enum at any given time.
Definition: Modules.h:461
bool SupportsType(EModuleType eType) const
Definition: Modules.h:285
CString m_sDescription
Definition: Modules.h:334
bool SetNV(const CString &sName, const CString &sValue, bool bWriteToDisk=true)
virtual CString GetWebMenuTitle()
Return the title of the module's section in the web interface's side bar.
Definition: Modules.h:496
virtual void OnChanPermission2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, unsigned char uMode, bool bAdded, bool bNoChange)
bool OnJoining(CChan &Channel)
A helper class for handling commands in modules.
Definition: Modules.h:352
virtual void OnJoin(const CNick &Nick, CChan &Channel)
virtual EModRet OnPrivNotice(CNick &Nick, CString &sMessage)
virtual EModRet OnUserNoticeMessage(CNoticeMessage &Message)
This module hook is called when a user sends a NOTICE message.
void SetClient(CClient *pClient)
Definition: Modules.h:1475
bool OnRaw(CString &sLine)
virtual EModRet OnPrivMsg(CNick &Nick, CString &sMessage)
virtual bool ValidateWebRequestCSRFCheck(CWebSock &WebSock, const CString &sPageName)
If ValidateWebRequestCSRFCheck returned false, a CSRF error will be printed.
const CString & GetDescription() const
Definition: Modules.h:307
std::map< CString, std::unique_ptr< CCapability > > m_mServerDependentCaps
Definition: Modules.h:1456
Stop sending this even to other modules which were not called yet.
Definition: Modules.h:449
virtual EModRet OnPrivBufferPlayLine(CClient &Client, CString &sLine)
void InternalServerDependentCapsOnServerCapResult(const CString &sCap, bool bSuccess)
virtual EModRet OnUserTextMessage(CTextMessage &Message)
This module hook is called when a user sends a PRIVMSG message.
ModLoader m_fLoader
Definition: Modules.h:338
void(* FPTimer_t)(CModule *, CFPTimer *)
Definition: Modules.h:208
virtual EModRet OnPrivCTCPMessage(CCTCPMessage &Message)
Called when we receive a private CTCP request from IRC.
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...
const CString & GetDescription() const
virtual EModRet OnStatusCommand(CString &sCommand)
Called when a command to *status is sent.
Definition: Message.h:291
virtual EModRet OnPrivBufferEnding(CQuery &Query, CClient &Client)
Called after a query buffer was played back to a client.
Generate a grid-like or list-like output from a given input.
Definition: Utils.h:172
virtual EModRet OnUserTopicMessage(CTopicMessage &Message)
This module hook is called when a user wants to change a channel topic.
bool OnDeleteNetwork(CIRCNetwork &Network)
virtual EModRet OnRawMessage(CMessage &Message)
Called on any raw message received from the IRC server.
static bool FindModPath(const CString &sModule, CString &sModPath, CString &sDataPath)
virtual EModRet OnPrivBufferPlayLine2(CClient &Client, CString &sLine, const timeval &tv)
bool OnClientConnect(CZNCSock *pSock, const CString &sHost, unsigned short uPort)
CSocket * FindSocket(const CString &sSockName)
CModule *(* ModLoader)(ModHandle p, CUser *pUser, CIRCNetwork *pNetwork, const CString &sModName, const CString &sModPath, EModuleType eType)
Definition: Modules.h:263
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
virtual EModRet OnChanBufferStarting(CChan &Chan, CClient &Client)
Called before a channel buffer is played back to a client.
virtual void OnQuit(const CNick &Nick, const CString &sMessage, const std::vector< CChan *> &vChans)
bool OnChanPermission2(const CNick *pOpNick, const CNick &Nick, CChan &Channel, unsigned char uMode, bool bAdded, bool bNoChange)
virtual EModRet OnIRCRegistration(CString &sPass, CString &sNick, CString &sIdent, CString &sRealName)
This module hook is called before loging in to the IRC server.
CString m_sDescription
Definition: Modules.h:1439
const char * pcCompileOptions
Definition: Modules.h:84
Definition: Translation.h:103
void InternalServerDependentCapsOnClientDetached()