20 #include <znc/zncconfig.h> 49 #error This module only works when ZNC is compiled with OpenSSL support 55 #ifdef BUILD_WITH_CMAKE 56 #include <znc/znc_export_lib_export.h> 58 #define ZNC_EXPORT_LIB_EXPORT __attribute__((__visibility__("default"))) 60 #define ZNC_EXPORT_LIB_EXPORT 87 #define MODCOMMONDEFS(CLASS, DESCRIPTION, TYPE) \ 88 static void FillModInfo(CModInfo& Info) { \ 89 auto t_s = [&](const CString& sEnglish, \ 90 const CString& sContext = "") { \ 91 return sEnglish.empty() ? "" : Info.t_s(sEnglish, sContext); \ 94 Info.SetDescription(DESCRIPTION); \ 95 Info.SetDefaultType(TYPE); \ 97 Info.SetLoader(TModLoad<CLASS>); \ 98 TModInfo<CLASS>(Info); \ 103 ZNC_EXPORT_LIB_EXPORT const CModuleEntry* ZNCModuleEntry(); \ 104 ZNC_EXPORT_LIB_EXPORT const CModuleEntry* ZNCModuleEntry() { \ 105 static const CModuleEntry ThisModule = {VERSION_STR, VERSION_EXTRA, \ 106 ZNC_COMPILE_OPTIONS_STRING, \ 108 return &ThisModule; \ 127 #define MODCONSTRUCTOR(CLASS) \ 128 CLASS(ModHandle pDLL, CUser* pUser, CIRCNetwork* pNetwork, \ 129 const CString& sModName, const CString& sModPath, \ 130 CModInfo::EModuleType eType) \ 131 : CModule(pDLL, pUser, pNetwork, sModName, sModPath, eType) 135 #define USERMODULEDEFS(CLASS, DESCRIPTION) \ 136 MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::UserModule) 141 #define GLOBALMODULEDEFS(CLASS, DESCRIPTION) \ 142 MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::GlobalModule) 147 #define NETWORKMODULEDEFS(CLASS, DESCRIPTION) \ 148 MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::NetworkModule) 157 #define MODULEDEFS(CLASS, DESCRIPTION) NETWORKMODULEDEFS(CLASS, DESCRIPTION) 171 CTimer(
CModule* pModule,
unsigned int uInterval,
unsigned int uCycles,
181 void SetDescription(
const CString& s);
186 const CString& GetDescription()
const;
200 :
CTimer(pModule, uInterval, uCycles, sLabel, sDescription),
201 m_pFBCallback(nullptr) {}
210 m_pFBCallback(m_pModule,
this);
224 :
CJob(), m_pModule(pModule), m_sName(sName), m_sDescription(sDesc) {}
252 const CString& sModPath, EModuleType eType);
257 m_eDefaultType(eType),
264 m_fLoader(nullptr) {}
268 return (GetName() < Info.
GetName());
272 return m_seType.find(eType) != m_seType.end();
275 void AddType(EModuleType eType) { m_seType.insert(eType); }
308 void SetLoader(ModLoader fLoader) { m_fLoader = fLoader; }
334 return new M(p, pUser, pNetwork, sModName, sModPath, eType);
342 typedef std::function<void(const CString& sLine)>
CmdFunc;
372 static void InitHelp(
CTable& Table);
378 void AddHelp(
CTable& Table)
const;
450 void SetUser(
CUser* pUser);
452 void SetClient(
CClient* pClient);
469 virtual bool OnBoot();
484 virtual CString GetWebFilesPath();
493 virtual bool OnWebPreRequest(
CWebSock& WebSock,
const CString& sPageName);
510 virtual bool ValidateWebRequestCSRFCheck(
CWebSock& WebSock,
const CString& sPageName);
515 m_vSubPages.push_back(spSubPage);
533 virtual bool OnEmbeddedWebRequest(
CWebSock& WebSock,
538 virtual void OnPreRehash();
540 virtual void OnPostRehash();
542 virtual void OnIRCDisconnected();
544 virtual void OnIRCConnected();
555 virtual void OnIRCConnectionError(
CIRCSock* pIRCSock);
585 virtual void OnChanPermission2(
const CNick* pOpNick,
const CNick& Nick,
586 CChan& Channel,
unsigned char uMode,
587 bool bAdded,
bool bNoChange);
588 virtual void OnChanPermission(
const CNick& OpNick,
const CNick& Nick,
589 CChan& Channel,
unsigned char uMode,
590 bool bAdded,
bool bNoChange);
592 virtual void OnOp2(
const CNick* pOpNick,
const CNick& Nick,
CChan& Channel,
594 virtual void OnOp(
const CNick& OpNick,
const CNick& Nick,
CChan& Channel,
597 virtual void OnDeop2(
const CNick* pOpNick,
const CNick& Nick,
598 CChan& Channel,
bool bNoChange);
599 virtual void OnDeop(
const CNick& OpNick,
const CNick& Nick,
CChan& Channel,
602 virtual void OnVoice2(
const CNick* pOpNick,
const CNick& Nick,
603 CChan& Channel,
bool bNoChange);
604 virtual void OnVoice(
const CNick& OpNick,
const CNick& Nick,
CChan& Channel,
607 virtual void OnDevoice2(
const CNick* pOpNick,
const CNick& Nick,
608 CChan& Channel,
bool bNoChange);
609 virtual void OnDevoice(
const CNick& OpNick,
const CNick& Nick,
610 CChan& Channel,
bool bNoChange);
619 virtual void OnMode2(
const CNick* pOpNick,
CChan& Channel,
char uMode,
620 const CString& sArg,
bool bAdded,
bool bNoChange);
621 virtual void OnMode(
const CNick& OpNick,
CChan& Channel,
char uMode,
622 const CString& sArg,
bool bAdded,
bool bNoChange);
630 virtual void OnRawMode2(
const CNick* pOpNick,
CChan& Channel,
632 virtual void OnRawMode(
const CNick& OpNick,
CChan& Channel,
663 virtual void OnModCommand(
const CString& sCommand);
670 virtual void OnUnknownModCommand(
const CString& sCommand);
674 virtual void OnModNotice(
const CString& sMessage);
679 virtual void OnModCTCP(
const CString& sMessage);
687 const std::vector<CChan*>& vChans);
689 virtual void OnQuit(
const CNick& Nick,
const CString& sMessage,
690 const std::vector<CChan*>& vChans);
698 const std::vector<CChan*>& vChans);
700 virtual void OnNick(
const CNick& Nick,
const CString& sNewNick,
701 const std::vector<CChan*>& vChans);
709 virtual void OnKick(
const CNick& OpNick,
const CString& sKickedNick,
724 virtual void OnJoin(
const CNick& Nick,
CChan& Channel);
732 virtual void OnPart(
const CNick& Nick,
CChan& Channel,
764 CString& sLine,
const timeval& tv);
797 virtual void OnClientLogin();
799 virtual void OnClientDisconnect();
1001 virtual bool OnServerCapAvailable(
const CString& sCap);
1007 virtual void OnServerCapResult(
const CString& sCap,
bool bSuccess);
1056 virtual bool PutIRC(
const CString& sLine);
1064 virtual bool PutUser(
const CString& sLine);
1071 virtual bool PutStatus(
const CString& sLine);
1078 virtual bool PutModule(
const CString& sLine);
1084 virtual unsigned int PutModule(
const CTable& table);
1091 virtual bool PutModNotice(
const CString& sLine);
1108 bool AddTimer(
CTimer* pTimer);
1109 bool AddTimer(
FPTimer_t pFBCallback,
const CString& sLabel, u_int uInterval,
1110 u_int uCycles = 0,
const CString& sDescription =
"");
1111 bool RemTimer(
CTimer* pTimer);
1112 bool RemTimer(
const CString& sLabel);
1113 bool UnlinkTimer(
CTimer* pTimer);
1116 return m_sTimers.begin();
1119 return m_sTimers.end();
1121 virtual void ListTimers();
1125 bool AddSocket(
CSocket* pSocket);
1126 bool RemSocket(
CSocket* pSocket);
1127 bool RemSocket(
const CString& sSockName);
1128 bool UnlinkSocket(
CSocket* pSocket);
1131 return m_sSockets.begin();
1134 return m_sSockets.end();
1136 virtual void ListSockets();
1143 bool CancelJob(
const CString& sJobName);
1144 void CancelJobs(
const std::set<CModuleJob*>& sJobs);
1151 void AddHelpCommand();
1162 std::function<
void(
const CString& sLine)> func);
1164 bool RemCommand(
const CString& sCmd);
1174 bool HandleCommand(
const CString& sLine);
1178 void HandleHelpCommand(
const CString& sLine =
"");
1181 bool LoadRegistry();
1182 bool SaveRegistry()
const;
1183 bool MoveRegistry(
const CString& sPath);
1185 bool bWriteToDisk =
true);
1188 return m_mssRegistry.find(sName) != m_mssRegistry.end();
1190 bool DelNV(
const CString& sName,
bool bWriteToDisk =
true);
1192 return m_mssRegistry.find(sName);
1194 MCString::iterator
EndNV() {
return m_mssRegistry.end(); }
1195 MCString::iterator
BeginNV() {
return m_mssRegistry.begin(); }
1196 void DelNV(MCString::iterator it) { m_mssRegistry.erase(it); }
1197 bool ClearNV(
bool bWriteToDisk =
true);
1199 const CString& GetSavePath()
const;
1253 unsigned short uPort);
1260 virtual EModRet OnLoginAttempt(std::shared_ptr<CAuthBase> Auth);
1265 virtual void OnFailedLogin(
const CString& sUsername,
1288 virtual bool IsClientCapSupported(
CClient* pClient,
const CString& sCap,
1299 virtual void OnClientCapRequest(
CClient* pClient,
const CString& sCap,
1322 virtual EModRet OnModuleUnloading(
CModule* pModule,
bool& bSuccess,
1332 bool& bSuccess,
CString& sRetMsg);
1337 virtual void OnGetAvailableMods(std::set<CModInfo>& ssMods,
1345 const CString& sContext =
"")
const;
1347 int iNum,
const CString& sContext =
"")
const;
1349 const CString& sContext =
"")
const;
1376 std::map<CString, CModCommand> m_mCommands;
1398 bool OnPostRehash();
1399 bool OnIRCDisconnected();
1400 bool OnIRCConnected();
1401 bool OnIRCConnecting(
CIRCSock* pIRCSock);
1402 bool OnIRCConnectionError(
CIRCSock* pIRCSock);
1405 bool OnBroadcast(
CString& sMessage);
1407 bool OnChanPermission2(
const CNick* pOpNick,
const CNick& Nick,
1408 CChan& Channel,
unsigned char uMode,
bool bAdded,
1410 bool OnChanPermission(
const CNick& OpNick,
const CNick& Nick,
1411 CChan& Channel,
unsigned char uMode,
bool bAdded,
1421 bool OnVoice2(
const CNick* pOpNick,
const CNick& Nick,
CChan& Channel,
1425 bool OnDevoice2(
const CNick* pOpNick,
const CNick& Nick,
CChan& Channel,
1427 bool OnDevoice(
const CNick& OpNick,
const CNick& Nick,
CChan& Channel,
1433 bool OnMode2(
const CNick* pOpNick,
CChan& Channel,
char uMode,
1434 const CString& sArg,
bool bAdded,
bool bNoChange);
1435 bool OnMode(
const CNick& OpNick,
CChan& Channel,
char uMode,
1436 const CString& sArg,
bool bAdded,
bool bNoChange);
1439 bool OnRawMessage(
CMessage& Message);
1442 bool OnStatusCommand(
CString& sCommand);
1443 bool OnModCommand(
const CString& sCommand);
1444 bool OnModNotice(
const CString& sMessage);
1445 bool OnModCTCP(
const CString& sMessage);
1447 bool OnQuit(
const CNick& Nick,
const CString& sMessage,
1448 const std::vector<CChan*>& vChans);
1450 const std::vector<CChan*>& vChans);
1451 bool OnNick(
const CNick& Nick,
const CString& sNewNick,
1452 const std::vector<CChan*>& vChans);
1454 const std::vector<CChan*>& vChans);
1458 bool OnJoining(
CChan& Channel);
1459 bool OnJoin(
const CNick& Nick,
CChan& Channel);
1463 bool OnInvite(
const CNick& Nick,
const CString& sChan);
1465 bool OnChanBufferStarting(
CChan& Chan,
CClient& Client);
1475 bool OnChanBufferPlayMessage(
CMessage& Message);
1476 bool OnPrivBufferPlayMessage(
CMessage& Message);
1478 bool OnClientLogin();
1479 bool OnClientDisconnect();
1480 bool OnUserRaw(
CString& sLine);
1481 bool OnUserRawMessage(
CMessage& Message);
1498 bool OnUserTopicRequest(
CString& sChannel);
1499 bool OnUserQuit(
CString& sMessage);
1522 bool OnTimerAutoJoin(
CChan& Channel);
1528 bool OnSendToClientMessage(
CMessage& Message);
1529 bool OnSendToIRC(
CString& sLine);
1530 bool OnSendToIRCMessage(
CMessage& Message);
1532 bool OnServerCapAvailable(
const CString& sCap);
1533 bool OnServerCapResult(
const CString& sCap,
bool bSuccess);
1539 bool UnloadModule(
const CString& sModule);
1548 static void GetAvailableMods(
1549 std::set<CModInfo>& ssMods,
1551 static void GetDefaultMods(
1552 std::set<CModInfo>& ssMods,
1557 static bool FindModPath(
const CString& sModule,
CString& sModPath,
1562 static ModDirList GetModDirs();
1566 bool OnDeleteUser(
CUser& User);
1568 unsigned short uPort);
1569 bool OnLoginAttempt(std::shared_ptr<CAuthBase> Auth);
1570 bool OnFailedLogin(
const CString& sUsername,
const CString& sRemoteIP);
1572 bool OnUnknownUserRawMessage(
CMessage& Message);
1576 bool OnClientCapRequest(
CClient* pClient,
const CString& sCap,
bool bState);
1577 bool OnModuleLoading(
const CString& sModName,
const CString& sArgs,
1580 bool OnModuleUnloading(
CModule* pModule,
bool& bSuccess,
CString& sRetMsg);
1581 bool OnGetModInfo(
CModInfo& ModInfo,
const CString& sModule,
bool& bSuccess,
1583 bool OnGetAvailableMods(std::set<CModInfo>& ssMods,
1597 #endif // !ZNC_MODULES_H Definition: Message.h:266
Definition: Message.h:302
void SetArgs(const CString &s)
Definition: Modules.h:1207
CModInfo()
Definition: Modules.h:254
const CString & GetArgs() const
Definition: Modules.h:1213
void SetHasArgs(bool b=false)
Definition: Modules.h:307
CString m_sDescription
Definition: Modules.h:191
const char * pcVersionExtra
Definition: Modules.h:82
void SetNetwork(CIRCNetwork *pNetwork)
Definition: Modules.h:1388
CModInfo(const CString &sName, const CString &sPath, EModuleType eType)
Definition: Modules.h:255
CString m_sSavePath
Definition: Modules.h:1367
A job is a task which should run without blocking the main thread.
Definition: Threads.h:67
bool GetHasArgs() const
Definition: Modules.h:296
EModuleType m_eDefaultType
Definition: Modules.h:317
EModuleType
Definition: Modules.h:247
A CJob version which can be safely used in modules.
Definition: Modules.h:221
void SetUser(CUser *pUser)
Definition: Modules.h:1387
CString m_sWikiPage
Definition: Modules.h:321
std::queue< std::pair< CString, CString > > ModDirList
Definition: Modules.h:1561
MCString::iterator FindNV(const CString &sName)
Definition: Modules.h:1191
bool HasNV(const CString &sName) const
Definition: Modules.h:1187
void SetModPath(const CString &s)
Definition: Modules.h:1206
std::function< void(const CString &sLine)> CmdFunc
Definition: Modules.h:342
void SetFPCallback(FPTimer_t p)
Definition: Modules.h:205
std::set< CTimer * > m_sTimers
Definition: Modules.h:1355
CModInfo::EModuleType GetType() const
Definition: Modules.h:1211
const CString m_sDescription
Definition: Modules.h:239
CSockManager * GetManager() const
Definition: Modules.h:1230
std::set< CSocket * >::const_iterator BeginSockets() const
Definition: Modules.h:1130
Definition: Message.h:281
Definition: Message.h:259
CmdFunc GetFunction() const
Definition: Modules.h:381
CSockManager * m_pManager
Definition: Modules.h:1361
void(CModule::* ModCmdFunc)(const CString &sLine)
Type for the callback function that handles the actual command.
Definition: Modules.h:341
std::set< CSocket * > m_sSockets
Definition: Modules.h:1356
std::set< CModuleJob * > m_sJobs
Definition: Modules.h:1358
CClient * GetClient() const
Definition: Modules.h:1229
CString m_sArgsHelpText
Definition: Modules.h:322
Definition: Modules.h:1379
void SetDescription(const CString &s)
Definition: Modules.h:1205
CClient * m_pClient
Definition: Modules.h:1364
C-style entry point to the module.
Definition: Modules.h:80
void SetPath(const CString &s)
Definition: Modules.h:303
Definition: Translation.h:77
const CString & GetCommand() const
Definition: Modules.h:380
bool m_bHasArgs
Definition: Modules.h:323
CUser * GetUser() const
Definition: Modules.h:1221
std::vector< TWebSubPage > VWebSubPages
Definition: WebModules.h:33
CTranslationDomainRefHolder m_Translation
Definition: Modules.h:1370
std::set< CString > SCString
Definition: ZNCString.h:35
Definition: Modules.h:247
CClient * m_pClient
Definition: Modules.h:1594
const CString & GetPath() const
Definition: Modules.h:292
std::set< EModuleType > m_seType
Definition: Modules.h:316
EModuleType GetDefaultType() const
Definition: Modules.h:298
void RunJob() override
this is the method you should override
Definition: Modules.h:208
Base Csock implementation to be used by modules.
Definition: Socket.h:242
CString GetDescription() const
Definition: Modules.h:383
Definition: Modules.h:196
Definition: Message.h:228
Definition: Modules.h:169
void SetLoader(ModLoader fLoader)
Definition: Modules.h:308
const CString & GetModPath() const
Definition: Modules.h:1214
void * ModHandle
Definition: Modules.h:243
CModule * GetModule() const
Definition: Modules.h:231
Definition: Message.h:288
Definition: Message.h:217
Definition: Translation.h:63
std::shared_ptr< CWebSubPage > TWebSubPage
Definition: WebModules.h:30
Definition: Template.h:129
CIRCNetwork * GetNetwork() const
Definition: Modules.h:1391
Definition: Translation.h:54
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:474
void(* fpFillModInfo)(CModInfo &)
Definition: Modules.h:84
EModException
Definition: Modules.h:443
const char * pcVersion
Definition: Modules.h:81
const CString & GetWikiPage() const
Definition: Modules.h:294
~CModInfo()
Definition: Modules.h:265
void SetName(const CString &s)
Definition: Modules.h:302
CUser * m_pUser
Definition: Modules.h:1592
virtual ~CFPTimer()
Definition: Modules.h:203
String class that is used inside ZNC.
Definition: ZNCString.h:68
void Unload()
This function throws CModule::UNLOAD which causes this module to be unloaded.
Definition: Modules.h:456
const CString & GetName() const
Definition: Modules.h:232
EModRet
This enum is just used for return from module hooks.
Definition: Modules.h:423
void DelNV(MCString::iterator it)
Definition: Modules.h:1196
const CString & GetDescription() const
Definition: Modules.h:233
Definition: Modules.h:245
static CString ModuleTypeToString(EModuleType eType)
Definition: Modules.h:277
The base class for your own ZNC modules.
Definition: Modules.h:407
CModInfo::EModuleType m_eType
Definition: Modules.h:1353
const CString & GetModName() const
Definition: Modules.h:1094
CUser * m_pUser
Definition: Modules.h:1362
CUser * GetUser() const
Definition: Modules.h:1390
void SetDescription(const CString &s)
Definition: Modules.h:304
void AddType(EModuleType eType)
Definition: Modules.h:275
MCString::iterator EndNV()
Definition: Modules.h:1194
CModule * TModLoad(ModHandle p, CUser *pUser, CIRCNetwork *pNetwork, const CString &sModName, const CString &sModPath, CModInfo::EModuleType eType)
Definition: Modules.h:331
void TModInfo(CModInfo &Info)
Definition: Modules.h:328
Definition: WebModules.h:127
const CString & GetArgsHelpText() const
Definition: Modules.h:295
void SetType(CModInfo::EModuleType eType)
Definition: Modules.h:1204
this is the main cron job class
Definition: Csocket.h:377
virtual VWebSubPages & GetSubPages()
Returns a list of all registered SubPages.
Definition: Modules.h:523
CModule * m_pModule
Definition: Modules.h:237
Definition: Modules.h:247
const CString & GetDescription() const
Definition: Modules.h:293
void SetWikiPage(const CString &s)
Definition: Modules.h:305
CString m_sArgs
Definition: Modules.h:1368
Definition: Message.h:295
CString m_sModPath
Definition: Modules.h:1369
CString m_sDataDir
Definition: Modules.h:1366
CString m_sName
Definition: Modules.h:318
bool operator<(const CModInfo &Info) const
Definition: Modules.h:267
A dictionary for strings.
Definition: ZNCString.h:595
void SetArgsHelpText(const CString &s)
Definition: Modules.h:306
CString GetArgs() const
Definition: Modules.h:382
Definition: Message.h:251
CModuleJob(CModule *pModule, const CString &sName, const CString &sDesc)
Definition: Modules.h:223
std::set< CTimer * >::const_iterator EndTimers() const
Definition: Modules.h:1118
CIRCNetwork * m_pNetwork
Definition: Modules.h:1363
const CString & GetDescription() const
Definition: Modules.h:1212
CString m_sModName
Definition: Modules.h:1365
ModHandle GetDLL()
Definition: Modules.h:1049
ModLoader GetLoader() const
Definition: Modules.h:297
CIRCNetwork * GetNetwork() const
Definition: Modules.h:1225
const CString & GetName() const
Definition: Modules.h:291
std::set< CTimer * >::const_iterator BeginTimers() const
Definition: Modules.h:1115
CFPTimer(CModule *pModule, unsigned int uInterval, unsigned int uCycles, const CString &sLabel, const CString &sDescription)
Definition: Modules.h:198
virtual void AddSubPage(TWebSubPage spSubPage)
Registers a sub page for the sidebar.
Definition: Modules.h:514
CClient * GetClient() const
Definition: Modules.h:1392
CString m_sPath
Definition: Modules.h:319
virtual void ClearSubPages()
Removes all registered (AddSubPage'd) SubPages.
Definition: Modules.h:519
void Call(const CString &sLine) const
Definition: Modules.h:385
MCString::iterator BeginNV()
Definition: Modules.h:1195
ModHandle m_pDLL
Definition: Modules.h:1360
const CString m_sName
Definition: Modules.h:238
virtual bool WebRequiresAdmin()
Return true if this module should only be usable for admins on the web.
Definition: Modules.h:478
CIRCNetwork * m_pNetwork
Definition: Modules.h:1593
void SetDefaultType(EModuleType eType)
Definition: Modules.h:309
Definition: Message.h:238
CModule * m_pModule
Definition: Modules.h:190
CString m_sDescription
Definition: Modules.h:320
std::set< CSocket * >::const_iterator EndSockets() const
Definition: Modules.h:1133
virtual CString GetWebMenuTitle()
Return the title of the module's section in the web interface's side bar.
Definition: Modules.h:482
A helper class for handling commands in modules.
Definition: Modules.h:338
void SetClient(CClient *pClient)
Definition: Modules.h:1389
bool SupportsType(EModuleType eType) const
Definition: Modules.h:271
ModLoader m_fLoader
Definition: Modules.h:324
void(* FPTimer_t)(CModule *, CFPTimer *)
Definition: Modules.h:194
Definition: Message.h:272
Generate a grid-like output from a given input.
Definition: Utils.h:141
Here is a small explanation of how messages on IRC work, and how you can use this class to get useful...
Definition: Message.h:63
const CString & GetModDataDir() const
Get the module's data dir.
Definition: Modules.h:1105
CString m_sDescription
Definition: Modules.h:1354
const char * pcCompileOptions
Definition: Modules.h:83