ZNC trunk
Loading...
Searching...
No Matches
Modules.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2004-2024 ZNC, see the NOTICE file for details.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ZNC_MODULES_H
18#define ZNC_MODULES_H
19
20#include <znc/zncconfig.h>
21#include <znc/WebModules.h>
22#include <znc/Utils.h>
23#include <znc/Threads.h>
24#include <znc/Message.h>
25#include <znc/main.h>
26#include <znc/Translation.h>
27#include <functional>
28#include <memory>
29#include <set>
30#include <queue>
31#include <sys/time.h>
32
33// Forward Declarations
34class CAuthBase;
35class CChan;
36class CQuery;
37class CIRCNetwork;
38class CClient;
39class CWebSock;
40class CTemplate;
41class CIRCSock;
42class CModule;
43class CModInfo;
44// !Forward Declarations
45
46#ifdef REQUIRESSL
47#ifndef HAVE_LIBSSL
48#error -
49#error -
50#error This module only works when ZNC is compiled with OpenSSL support
51#error -
52#error -
53#endif
54#endif
55
56#ifdef BUILD_WITH_CMAKE
57#include <znc/znc_export_lib_export.h>
58#elif HAVE_VISIBILITY
59#define ZNC_EXPORT_LIB_EXPORT __attribute__((__visibility__("default")))
60#else
61#define ZNC_EXPORT_LIB_EXPORT
62#endif
63
82 const char* pcVersion;
83 const char* pcVersionExtra;
84 const char* pcCompileOptions;
86};
87
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); \
93 }; \
94 t_s(CString()); /* Don't warn about unused t_s */ \
95 Info.SetDescription(DESCRIPTION); \
96 Info.SetDefaultType(TYPE); \
97 Info.AddType(TYPE); \
98 Info.SetLoader(TModLoad<CLASS>); \
99 TModInfo<CLASS>(Info); \
100 } \
101 extern "C" { \
102 /* A global variable leads to ODR violation when several modules are \
103 * loaded. But a static variable inside a function works. */ \
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, \
108 FillModInfo}; \
109 return &ThisModule; \
110 } \
111 }
112
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)
133
134// User Module Macros
136#define USERMODULEDEFS(CLASS, DESCRIPTION) \
137 MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::UserModule)
138// !User Module Macros
139
140// Global Module Macros
142#define GLOBALMODULEDEFS(CLASS, DESCRIPTION) \
143 MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::GlobalModule)
144// !Global Module Macros
145
146// Network Module Macros
148#define NETWORKMODULEDEFS(CLASS, DESCRIPTION) \
149 MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::NetworkModule)
150// !Network Module Macros
151
158#define MODULEDEFS(CLASS, DESCRIPTION) NETWORKMODULEDEFS(CLASS, DESCRIPTION)
159
160// Forward Declarations
161class CZNC;
162class CUser;
163class CNick;
164class CChan;
165class CModule;
166class CFPTimer;
167class CSockManager;
168// !Forward Declarations
170class CCapability {
171 public:
172 virtual ~CCapability() = default;
173 virtual void OnServerChangedSupport(CIRCNetwork* pNetwork, bool bState) {}
174 virtual void OnClientChangedSupport(CClient* pClient, bool bState) {}
177 void SetModule(CModule* p) { m_pModule = p; }
178
179 protected:
180 CModule* m_pModule = nullptr;
181};
183class CTimer : public CCron {
184 public:
185 CTimer(CModule* pModule, unsigned int uInterval, unsigned int uCycles,
186 const CString& sLabel, const CString& sDescription);
188 virtual ~CTimer();
190 CTimer(const CTimer&) = delete;
191 CTimer& operator=(const CTimer&) = delete;
192
193 // Setters
195 void SetDescription(const CString& s);
196 // !Setters
197
198 // Getters
200 const CString& GetDescription() const;
201 // !Getters
202 private:
203 protected:
206};
208typedef void (*FPTimer_t)(CModule*, CFPTimer*);
210class CFPTimer : public CTimer {
211 public:
212 CFPTimer(CModule* pModule, unsigned int uInterval, unsigned int uCycles,
213 const CString& sLabel, const CString& sDescription)
214 : CTimer(pModule, uInterval, uCycles, sLabel, sDescription),
215 m_pFBCallback(nullptr) {}
217 virtual ~CFPTimer() {}
219 void SetFPCallback(FPTimer_t p) { m_pFBCallback = p; }
220
221 protected:
222 void RunJob() override {
223 if (m_pFBCallback) {
224 m_pFBCallback(m_pModule, this);
225 }
226 }
227
228 private:
229 FPTimer_t m_pFBCallback;
230};
231
232#ifdef HAVE_PTHREAD
235class CModuleJob : public CJob {
236 public:
237 CModuleJob(CModule* pModule, const CString& sName, const CString& sDesc)
238 : CJob(), m_pModule(pModule), m_sName(sName), m_sDescription(sDesc) {}
239 virtual ~CModuleJob();
241 CModuleJob(const CModuleJob&) = delete;
242 CModuleJob& operator=(const CModuleJob&) = delete;
243
244 // Getters
245 CModule* GetModule() const { return m_pModule; }
246 const CString& GetName() const { return m_sName; }
247 const CString& GetDescription() const { return m_sDescription; }
248 // !Getters
249
250 protected:
254};
255#endif
257typedef void* ModHandle;
259class CModInfo {
260 public:
263 typedef CModule* (*ModLoader)(ModHandle p, CUser* pUser,
264 CIRCNetwork* pNetwork,
265 const CString& sModName,
266 const CString& sModPath, EModuleType eType);
269 CModInfo(const CString& sName, const CString& sPath, EModuleType eType)
270 : m_seType(),
271 m_eDefaultType(eType),
272 m_sName(sName),
273 m_sPath(sPath),
274 m_sDescription(""),
275 m_sWikiPage(""),
276 m_sArgsHelpText(""),
277 m_bHasArgs(false),
278 m_fLoader(nullptr) {}
279 ~CModInfo() {}
281 bool operator<(const CModInfo& Info) const {
282 return (GetName() < Info.GetName());
283 }
285 bool SupportsType(EModuleType eType) const {
286 return m_seType.find(eType) != m_seType.end();
287 }
289 void AddType(EModuleType eType) { m_seType.insert(eType); }
292 switch (eType) {
293 case GlobalModule:
294 return "Global";
295 case UserModule:
296 return "User";
297 case NetworkModule:
298 return "Network";
299 default:
300 return "UNKNOWN";
301 }
302 }
303
304 // Getters
305 const CString& GetName() const { return m_sName; }
306 const CString& GetPath() const { return m_sPath; }
307 const CString& GetDescription() const { return m_sDescription; }
308 const CString& GetWikiPage() const { return m_sWikiPage; }
309 const CString& GetArgsHelpText() const { return m_sArgsHelpText; }
310 bool GetHasArgs() const { return m_bHasArgs; }
311 ModLoader GetLoader() const { return m_fLoader; }
312 EModuleType GetDefaultType() const { return m_eDefaultType; }
313 // !Getters
314
315 // Setters
316 void SetName(const CString& s) { m_sName = s; }
317 void SetPath(const CString& s) { m_sPath = s; }
318 void SetDescription(const CString& s) { m_sDescription = s; }
319 void SetWikiPage(const CString& s) { m_sWikiPage = s; }
321 void SetHasArgs(bool b = false) { m_bHasArgs = b; }
322 void SetLoader(ModLoader fLoader) { m_fLoader = fLoader; }
323 void SetDefaultType(EModuleType eType) { m_eDefaultType = eType; }
324 // !Setters
326 CString t_s(const CString& sEnglish, const CString& sContext = "") const;
327
328 private:
329 protected:
330 std::set<EModuleType> m_seType;
339};
340
341template <class M>
342void TModInfo(CModInfo& Info) {}
343
344template <class M>
345CModule* TModLoad(ModHandle p, CUser* pUser, CIRCNetwork* pNetwork,
346 const CString& sModName, const CString& sModPath,
347 CModInfo::EModuleType eType) {
348 return new M(p, pUser, pNetwork, sModName, sModPath, eType);
349}
350
352class CModCommand : private CCoreTranslationMixin {
353 public:
355 typedef void (CModule::*ModCmdFunc)(const CString& sLine);
356 typedef std::function<void(const CString& sLine)> CmdFunc;
357
359 CModCommand();
360
367 CModCommand(const CString& sCmd, CModule* pMod, ModCmdFunc func,
368 const CString& sArgs, const CString& sDesc);
369 CModCommand(const CString& sCmd, CmdFunc func,
370 const COptionalTranslation& Args,
371 const COptionalTranslation& Desc);
372
376 CModCommand(const CModCommand& other) = default;
377
381 CModCommand& operator=(const CModCommand& other) = default;
382
386 static void InitHelp(CTable& Table);
387
392 void AddHelp(CTable& Table) const;
394 const CString& GetCommand() const { return m_sCmd; }
395 CmdFunc GetFunction() const { return m_pFunc; }
396 CString GetArgs() const { return m_Args.Resolve(); }
397 CString GetDescription() const { return m_Desc.Resolve(); }
399 void Call(const CString& sLine) const { m_pFunc(sLine); }
400
401 private:
402 CString m_sCmd;
403 CmdFunc m_pFunc;
406};
407
421class CModule {
422 public:
423 CModule(
424 ModHandle pDLL, CUser* pUser, CIRCNetwork* pNetwork,
425 const CString& sModName, const CString& sDataDir,
427 CModInfo::NetworkModule); // TODO: remove default value in ZNC 2.x
428 virtual ~CModule();
430 CModule(const CModule&) = delete;
431 CModule& operator=(const CModule&) = delete;
432
437 typedef enum {
441 CONTINUE = 1,
445 HALT = 2,
449 HALTMODS = 3,
455 } EModRet;
457 typedef enum {
464 void SetUser(CUser* pUser);
465 void SetNetwork(CIRCNetwork* pNetwork);
466 void SetClient(CClient* pClient);
467
470 void Unload() { throw UNLOAD; }
471
478 virtual bool OnLoad(const CString& sArgsi, CString& sMessage);
483 virtual bool OnBoot();
484
488 virtual bool WebRequiresLogin() { return true; }
492 virtual bool WebRequiresAdmin() { return false; }
496 virtual CString GetWebMenuTitle() { return ""; }
498 virtual CString GetWebFilesPath();
507 virtual bool OnWebPreRequest(CWebSock& WebSock, const CString& sPageName);
517 virtual bool OnWebRequest(CWebSock& WebSock, const CString& sPageName,
518 CTemplate& Tmpl);
524 virtual bool ValidateWebRequestCSRFCheck(CWebSock& WebSock, const CString& sPageName);
528 virtual void AddSubPage(TWebSubPage spSubPage) {
529 m_vSubPages.push_back(spSubPage);
530 }
533 virtual void ClearSubPages() { m_vSubPages.clear(); }
537 virtual VWebSubPages& GetSubPages() { return m_vSubPages; }
547 virtual bool OnEmbeddedWebRequest(CWebSock& WebSock,
548 const CString& sPageName,
549 CTemplate& Tmpl);
550
552 virtual void OnPreRehash();
554 virtual void OnPostRehash();
556 virtual void OnIRCDisconnected();
558 virtual void OnIRCConnected();
564 virtual EModRet OnIRCConnecting(CIRCSock* pIRCSock);
569 virtual void OnIRCConnectionError(CIRCSock* pIRCSock);
580 virtual EModRet OnIRCRegistration(CString& sPass, CString& sNick,
581 CString& sIdent, CString& sRealName);
586 virtual EModRet OnBroadcast(CString& sMessage);
587
599 virtual void OnChanPermission3(const CNick* pOpNick, const CNick& Nick,
600 CChan& Channel, char cMode,
601 bool bAdded, bool bNoChange);
603 virtual void OnChanPermission2(const CNick* pOpNick, const CNick& Nick,
604 CChan& Channel, unsigned char uMode,
605 bool bAdded, bool bNoChange);
607 virtual void OnChanPermission(const CNick& OpNick, const CNick& Nick,
608 CChan& Channel, unsigned char uMode,
609 bool bAdded, bool bNoChange);
611 virtual void OnOp2(const CNick* pOpNick, const CNick& Nick, CChan& Channel,
612 bool bNoChange);
613 virtual void OnOp(const CNick& OpNick, const CNick& Nick, CChan& Channel,
614 bool bNoChange);
616 virtual void OnDeop2(const CNick* pOpNick, const CNick& Nick,
617 CChan& Channel, bool bNoChange);
618 virtual void OnDeop(const CNick& OpNick, const CNick& Nick, CChan& Channel,
619 bool bNoChange);
621 virtual void OnVoice2(const CNick* pOpNick, const CNick& Nick,
622 CChan& Channel, bool bNoChange);
623 virtual void OnVoice(const CNick& OpNick, const CNick& Nick, CChan& Channel,
624 bool bNoChange);
626 virtual void OnDevoice2(const CNick* pOpNick, const CNick& Nick,
627 CChan& Channel, bool bNoChange);
628 virtual void OnDevoice(const CNick& OpNick, const CNick& Nick,
629 CChan& Channel, bool bNoChange);
638 virtual void OnMode2(const CNick* pOpNick, CChan& Channel, char uMode,
639 const CString& sArg, bool bAdded, bool bNoChange);
640 virtual void OnMode(const CNick& OpNick, CChan& Channel, char uMode,
641 const CString& sArg, bool bAdded, bool bNoChange);
649 virtual void OnRawMode2(const CNick* pOpNick, CChan& Channel,
650 const CString& sModes, const CString& sArgs);
651 virtual void OnRawMode(const CNick& OpNick, CChan& Channel,
652 const CString& sModes, const CString& sArgs);
653
659 virtual EModRet OnRaw(CString& sLine);
665 virtual EModRet OnRawMessage(CMessage& Message);
666
672 virtual EModRet OnNumericMessage(CNumericMessage& Message);
673
678 virtual EModRet OnStatusCommand(CString& sCommand);
682 virtual void OnModCommand(const CString& sCommand);
689 virtual void OnUnknownModCommand(const CString& sCommand);
693 virtual void OnModNotice(const CString& sMessage);
698 virtual void OnModCTCP(const CString& sMessage);
699
705 virtual void OnQuitMessage(CQuitMessage& Message,
706 const std::vector<CChan*>& vChans);
708 virtual void OnQuit(const CNick& Nick, const CString& sMessage,
709 const std::vector<CChan*>& vChans);
710
716 virtual void OnNickMessage(CNickMessage& Message,
717 const std::vector<CChan*>& vChans);
719 virtual void OnNick(const CNick& Nick, const CString& sNewNick,
720 const std::vector<CChan*>& vChans);
721
726 virtual void OnKickMessage(CKickMessage& Message);
728 virtual void OnKick(const CNick& OpNick, const CString& sKickedNick,
729 CChan& Channel, const CString& sMessage);
730
735 virtual EModRet OnJoining(CChan& Channel);
736
741 virtual void OnJoinMessage(CJoinMessage& Message);
743 virtual void OnJoin(const CNick& Nick, CChan& Channel);
744
749 virtual void OnPartMessage(CPartMessage& Message);
751 virtual void OnPart(const CNick& Nick, CChan& Channel,
752 const CString& sMessage);
753
760 virtual EModRet OnInvite(const CNick& Nick, const CString& sChan);
761
767 virtual EModRet OnChanBufferStarting(CChan& Chan, CClient& Client);
773 virtual EModRet OnChanBufferEnding(CChan& Chan, CClient& Client);
774
780 virtual EModRet OnChanBufferPlayMessage(CMessage& Message);
782 virtual EModRet OnChanBufferPlayLine2(CChan& Chan, CClient& Client,
783 CString& sLine, const timeval& tv);
785 virtual EModRet OnChanBufferPlayLine(CChan& Chan, CClient& Client,
786 CString& sLine);
787
794 virtual EModRet OnPrivBufferStarting(CQuery& Query, CClient& Client);
801 virtual EModRet OnPrivBufferEnding(CQuery& Query, CClient& Client);
802
808 virtual EModRet OnPrivBufferPlayMessage(CMessage& Message);
810 virtual EModRet OnPrivBufferPlayLine2(CClient& Client, CString& sLine,
811 const timeval& tv);
813 virtual EModRet OnPrivBufferPlayLine(CClient& Client, CString& sLine);
814
816 virtual void OnClientLogin();
818 virtual void OnClientDisconnect();
819
824 virtual EModRet OnUserRaw(CString& sLine);
830 virtual EModRet OnUserRawMessage(CMessage& Message);
831
839 virtual EModRet OnUserCTCPReply(CString& sTarget, CString& sMessage);
840
848 virtual EModRet OnUserCTCPMessage(CCTCPMessage& Message);
850 virtual EModRet OnUserCTCP(CString& sTarget, CString& sMessage);
851
860 virtual EModRet OnUserAction(CString& sTarget, CString& sMessage);
861
867 virtual EModRet OnUserTextMessage(CTextMessage& Message);
869 virtual EModRet OnUserMsg(CString& sTarget, CString& sMessage);
870
878 virtual EModRet OnUserNotice(CString& sTarget, CString& sMessage);
879
885 virtual EModRet OnUserJoinMessage(CJoinMessage& Message);
887 virtual EModRet OnUserJoin(CString& sChannel, CString& sKey);
888
894 virtual EModRet OnUserPartMessage(CPartMessage& Message);
896 virtual EModRet OnUserPart(CString& sChannel, CString& sMessage);
897
903 virtual EModRet OnUserTopicMessage(CTopicMessage& Message);
905 virtual EModRet OnUserTopic(CString& sChannel, CString& sTopic);
906
911 virtual EModRet OnUserTopicRequest(CString& sChannel);
912
918 virtual EModRet OnUserQuitMessage(CQuitMessage& Message);
920 virtual EModRet OnUserQuit(CString& sMessage);
921
927 virtual EModRet OnCTCPReplyMessage(CCTCPMessage& Message);
929 virtual EModRet OnCTCPReply(CNick& Nick, CString& sMessage);
930
936 virtual EModRet OnPrivCTCPMessage(CCTCPMessage& Message);
938 virtual EModRet OnPrivCTCP(CNick& Nick, CString& sMessage);
939
945 virtual EModRet OnChanCTCPMessage(CCTCPMessage& Message);
947 virtual EModRet OnChanCTCP(CNick& Nick, CChan& Channel, CString& sMessage);
948
956 virtual EModRet OnPrivAction(CNick& Nick, CString& sMessage);
957
965 virtual EModRet OnChanAction(CNick& Nick, CChan& Channel,
966 CString& sMessage);
967
973 virtual EModRet OnPrivTextMessage(CTextMessage& Message);
975 virtual EModRet OnPrivMsg(CNick& Nick, CString& sMessage);
976
982 virtual EModRet OnChanTextMessage(CTextMessage& Message);
984 virtual EModRet OnChanMsg(CNick& Nick, CChan& Channel, CString& sMessage);
985
993 virtual EModRet OnPrivNotice(CNick& Nick, CString& sMessage);
994
1000 virtual EModRet OnChanNoticeMessage(CNoticeMessage& Message);
1002 virtual EModRet OnChanNotice(CNick& Nick, CChan& Channel,
1003 CString& sMessage);
1004
1010 virtual EModRet OnTopicMessage(CTopicMessage& Message);
1012 virtual EModRet OnTopic(CNick& Nick, CChan& Channel, CString& sTopic);
1013
1021 virtual bool OnServerCapAvailable(const CString& sCap);
1032 virtual bool OnServerCap302Available(const CString& sCap, const CString& sValue);
1040 virtual void OnServerCapResult(const CString& sCap, bool bSuccess);
1041
1047 virtual EModRet OnTimerAutoJoin(CChan& Channel);
1048
1055 virtual EModRet OnAddNetwork(CIRCNetwork& Network, CString& sErrorRet);
1060 virtual EModRet OnDeleteNetwork(CIRCNetwork& Network);
1061
1068 virtual EModRet OnSendToClientMessage(CMessage& Message);
1070 virtual EModRet OnSendToClient(CString& sLine, CClient& Client);
1071
1078 virtual EModRet OnSendToIRCMessage(CMessage& Message);
1080 virtual EModRet OnSendToIRC(CString& sLine);
1082 ModHandle GetDLL() { return m_pDLL; }
1083
1089 virtual bool PutIRC(const CString& sLine);
1095 virtual bool PutIRC(const CMessage& Message);
1103 virtual bool PutUser(const CString& sLine);
1110 virtual bool PutStatus(const CString& sLine);
1117 virtual bool PutModule(const CString& sLine);
1123 virtual unsigned int PutModule(const CTable& table);
1130 virtual bool PutModNotice(const CString& sLine);
1131
1133 const CString& GetModName() const { return m_sModName; }
1134
1138 CString GetModNick() const;
1139
1144 const CString& GetModDataDir() const { return m_sDataDir; }
1145
1146 // Timer stuff
1147 bool AddTimer(CTimer* pTimer);
1148 bool AddTimer(FPTimer_t pFBCallback, const CString& sLabel, u_int uInterval,
1149 u_int uCycles = 0, const CString& sDescription = "");
1150 bool RemTimer(CTimer* pTimer);
1151 bool RemTimer(const CString& sLabel);
1152 bool UnlinkTimer(CTimer* pTimer);
1153 CTimer* FindTimer(const CString& sLabel);
1154 std::set<CTimer*>::const_iterator BeginTimers() const {
1155 return m_sTimers.begin();
1157 std::set<CTimer*>::const_iterator EndTimers() const {
1158 return m_sTimers.end();
1160 virtual void ListTimers();
1161 // !Timer stuff
1162
1163 // Socket stuff
1164 bool AddSocket(CSocket* pSocket);
1165 bool RemSocket(CSocket* pSocket);
1166 bool RemSocket(const CString& sSockName);
1167 bool UnlinkSocket(CSocket* pSocket);
1168 CSocket* FindSocket(const CString& sSockName);
1169 std::set<CSocket*>::const_iterator BeginSockets() const {
1170 return m_sSockets.begin();
1172 std::set<CSocket*>::const_iterator EndSockets() const {
1173 return m_sSockets.end();
1175 virtual void ListSockets();
1176// !Socket stuff
1177
1178#ifdef HAVE_PTHREAD
1179 // Job stuff
1180 void AddJob(CModuleJob* pJob);
1182 bool CancelJob(const CString& sJobName);
1183 void CancelJobs(const std::set<CModuleJob*>& sJobs);
1184 bool UnlinkJob(CModuleJob* pJob);
1185// !Job stuff
1186#endif
1187
1188 // Command stuff
1190 void AddHelpCommand();
1192 bool AddCommand(const CModCommand& Command);
1195 bool AddCommand(const CString& sCmd, CModCommand::ModCmdFunc func,
1196 const CString& sArgs = "", const CString& sDesc = "");
1199 bool AddCommand(const CString& sCmd, const COptionalTranslation& Args,
1200 const COptionalTranslation& Desc,
1201 std::function<void(const CString& sLine)> func);
1203 bool RemCommand(const CString& sCmd);
1205 const CModCommand* FindCommand(const CString& sCmd) const;
1213 bool HandleCommand(const CString& sLine);
1217 void HandleHelpCommand(const CString& sLine = "");
1218 // !Command stuff
1221 bool SaveRegistry() const;
1222 bool MoveRegistry(const CString& sPath);
1223 bool SetNV(const CString& sName, const CString& sValue,
1224 bool bWriteToDisk = true);
1225 CString GetNV(const CString& sName) const;
1226 bool HasNV(const CString& sName) const {
1227 return m_mssRegistry.find(sName) != m_mssRegistry.end();
1229 bool DelNV(const CString& sName, bool bWriteToDisk = true);
1230 MCString::iterator FindNV(const CString& sName) {
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);
1238 const CString& GetSavePath() const;
1239 CString ExpandString(const CString& sStr) const;
1240 CString& ExpandString(const CString& sStr, CString& sRet) const;
1241
1242 // Setters
1243 void SetType(CModInfo::EModuleType eType) { m_eType = eType; }
1244 void SetDescription(const CString& s) { m_sDescription = s; }
1245 void SetModPath(const CString& s) { m_sModPath = s; }
1246 void SetArgs(const CString& s) { m_sArgs = s; }
1247 // !Setters
1248
1249 // Getters
1251 const CString& GetDescription() const { return m_sDescription; }
1252 const CString& GetArgs() const { return m_sArgs; }
1253 const CString& GetModPath() const { return m_sModPath; }
1254
1260 CUser* GetUser() const { return m_pUser; }
1264 CIRCNetwork* GetNetwork() const { return m_pNetwork; }
1268 CClient* GetClient() const { return m_pClient; }
1269 CSockManager* GetManager() const { return m_pManager; }
1270 // !Getters
1271
1272 // Global Modules
1279 virtual EModRet OnAddUser(CUser& User, CString& sErrorRet);
1284 virtual EModRet OnDeleteUser(CUser& User);
1291 virtual void OnClientConnect(CZNCSock* pSock, const CString& sHost,
1292 unsigned short uPort);
1299 virtual EModRet OnLoginAttempt(std::shared_ptr<CAuthBase> Auth);
1304 virtual void OnFailedLogin(const CString& sUsername,
1305 const CString& sRemoteIP);
1312 virtual EModRet OnUnknownUserRaw(CClient* pClient, CString& sLine);
1313 virtual EModRet OnUnknownUserRawMessage(CMessage& Message);
1314
1316 virtual void OnClientAttached();
1318 virtual void OnClientDetached();
1319
1320#ifndef SWIG
1334 void AddServerDependentCapability(const CString& sName, std::unique_ptr<CCapability> pCap);
1335#endif
1336
1344 virtual void OnClientCapLs(CClient* pClient, SCString& ssCaps);
1351 virtual bool IsClientCapSupported(CClient* pClient, const CString& sCap,
1352 bool bState);
1364 virtual void OnClientCapRequest(CClient* pClient, const CString& sCap,
1365 bool bState);
1366
1376 virtual EModRet OnModuleLoading(const CString& sModName,
1377 const CString& sArgs,
1378 CModInfo::EModuleType eType, bool& bSuccess,
1379 CString& sRetMsg);
1387 virtual EModRet OnModuleUnloading(CModule* pModule, bool& bSuccess,
1388 CString& sRetMsg);
1396 virtual EModRet OnGetModInfo(CModInfo& ModInfo, const CString& sModule,
1397 bool& bSuccess, CString& sRetMsg);
1402 virtual void OnGetAvailableMods(std::set<CModInfo>& ssMods,
1403 CModInfo::EModuleType eType);
1404 // !Global Modules
1405
1406#ifndef SWIG
1407 // Translation
1408 CString t_s(const CString& sEnglish, const CString& sContext = "") const;
1409 CInlineFormatMessage t_f(const CString& sEnglish,
1410 const CString& sContext = "") const;
1411 CInlineFormatMessage t_p(const CString& sEnglish, const CString& sEnglishes,
1412 int iNum, const CString& sContext = "") const;
1413 CDelayedTranslation t_d(const CString& sEnglish,
1414 const CString& sContext = "") const;
1415#endif
1416
1417 // Default implementations of several callbacks to make
1418 // AddServerDependentCapability work in modpython/modperl.
1419 // Don't worry about existence of these functions.
1421 const CString& sCap, const CString& sValue);
1423 bool bSuccess);
1425 SCString& ssCaps);
1427 const CString& sCap,
1428 bool bState);
1430 const CString& sCap,
1431 bool bState);
1436
1437 protected:
1440 std::set<CTimer*> m_sTimers;
1441 std::set<CSocket*> m_sSockets;
1442#ifdef HAVE_PTHREAD
1443 std::set<CModuleJob*> m_sJobs;
1444#endif
1456 std::map<CString, std::unique_ptr<CCapability>> m_mServerDependentCaps;
1457
1458 private:
1459 MCString
1460 m_mssRegistry;
1461 VWebSubPages m_vSubPages;
1462 std::map<CString, CModCommand> m_mCommands;
1463};
1465class CModules : public std::vector<CModule*>, private CCoreTranslationMixin {
1466 public:
1468 ~CModules();
1470 CModules(const CModules&) = default;
1471 CModules& operator=(const CModules&) = default;
1473 void SetUser(CUser* pUser) { m_pUser = pUser; }
1474 void SetNetwork(CIRCNetwork* pNetwork) { m_pNetwork = pNetwork; }
1475 void SetClient(CClient* pClient) { m_pClient = pClient; }
1476 CUser* GetUser() const { return m_pUser; }
1477 CIRCNetwork* GetNetwork() const { return m_pNetwork; }
1478 CClient* GetClient() const { return m_pClient; }
1480 void UnloadAll();
1482 bool OnBoot();
1487 bool OnIRCConnecting(CIRCSock* pIRCSock);
1489 bool OnIRCRegistration(CString& sPass, CString& sNick, CString& sIdent,
1490 CString& sRealName);
1491 bool OnBroadcast(CString& sMessage);
1493 bool OnChanPermission3(const CNick* pOpNick, const CNick& Nick,
1494 CChan& Channel, char cMode, bool bAdded,
1495 bool bNoChange);
1496 bool OnChanPermission2(const CNick* pOpNick, const CNick& Nick,
1497 CChan& Channel, unsigned char uMode, bool bAdded,
1498 bool bNoChange);
1499 bool OnChanPermission(const CNick& OpNick, const CNick& Nick,
1500 CChan& Channel, unsigned char uMode, bool bAdded,
1501 bool bNoChange);
1502 bool OnOp2(const CNick* pOpNick, const CNick& Nick, CChan& Channel,
1503 bool bNoChange);
1504 bool OnOp(const CNick& OpNick, const CNick& Nick, CChan& Channel,
1505 bool bNoChange);
1506 bool OnDeop2(const CNick* pOpNick, const CNick& Nick, CChan& Channel,
1507 bool bNoChange);
1508 bool OnDeop(const CNick& OpNick, const CNick& Nick, CChan& Channel,
1509 bool bNoChange);
1510 bool OnVoice2(const CNick* pOpNick, const CNick& Nick, CChan& Channel,
1511 bool bNoChange);
1512 bool OnVoice(const CNick& OpNick, const CNick& Nick, CChan& Channel,
1513 bool bNoChange);
1514 bool OnDevoice2(const CNick* pOpNick, const CNick& Nick, CChan& Channel,
1515 bool bNoChange);
1516 bool OnDevoice(const CNick& OpNick, const CNick& Nick, CChan& Channel,
1517 bool bNoChange);
1518 bool OnRawMode2(const CNick* pOpNick, CChan& Channel, const CString& sModes,
1519 const CString& sArgs);
1520 bool OnRawMode(const CNick& OpNick, CChan& Channel, const CString& sModes,
1521 const CString& sArgs);
1522 bool OnMode2(const CNick* pOpNick, CChan& Channel, char uMode,
1523 const CString& sArg, bool bAdded, bool bNoChange);
1524 bool OnMode(const CNick& OpNick, CChan& Channel, char uMode,
1525 const CString& sArg, bool bAdded, bool bNoChange);
1527 bool OnRaw(CString& sLine);
1528 bool OnRawMessage(CMessage& Message);
1529 bool OnNumericMessage(CNumericMessage& Message);
1531 bool OnStatusCommand(CString& sCommand);
1532 bool OnModCommand(const CString& sCommand);
1533 bool OnModNotice(const CString& sMessage);
1534 bool OnModCTCP(const CString& sMessage);
1536 bool OnQuit(const CNick& Nick, const CString& sMessage,
1537 const std::vector<CChan*>& vChans);
1538 bool OnQuitMessage(CQuitMessage& Message,
1539 const std::vector<CChan*>& vChans);
1540 bool OnNick(const CNick& Nick, const CString& sNewNick,
1541 const std::vector<CChan*>& vChans);
1542 bool OnNickMessage(CNickMessage& Message,
1543 const std::vector<CChan*>& vChans);
1544 bool OnKick(const CNick& Nick, const CString& sOpNick, CChan& Channel,
1545 const CString& sMessage);
1547 bool OnJoining(CChan& Channel);
1548 bool OnJoin(const CNick& Nick, CChan& Channel);
1550 bool OnPart(const CNick& Nick, CChan& Channel, const CString& sMessage);
1552 bool OnInvite(const CNick& Nick, const CString& sChan);
1554 bool OnChanBufferStarting(CChan& Chan, CClient& Client);
1555 bool OnChanBufferEnding(CChan& Chan, CClient& Client);
1556 bool OnChanBufferPlayLine2(CChan& Chan, CClient& Client, CString& sLine,
1557 const timeval& tv);
1558 bool OnChanBufferPlayLine(CChan& Chan, CClient& Client, CString& sLine);
1559 bool OnPrivBufferStarting(CQuery& Query, CClient& Client);
1560 bool OnPrivBufferEnding(CQuery& Query, CClient& Client);
1561 bool OnPrivBufferPlayLine2(CClient& Client, CString& sLine,
1562 const timeval& tv);
1563 bool OnPrivBufferPlayLine(CClient& Client, CString& sLine);
1565 bool OnPrivBufferPlayMessage(CMessage& Message);
1569 bool OnUserRaw(CString& sLine);
1571 bool OnUserCTCPReply(CString& sTarget, CString& sMessage);
1573 bool OnUserCTCP(CString& sTarget, CString& sMessage);
1575 bool OnUserAction(CString& sTarget, CString& sMessage);
1577 bool OnUserMsg(CString& sTarget, CString& sMessage);
1579 bool OnUserNotice(CString& sTarget, CString& sMessage);
1581 bool OnUserJoin(CString& sChannel, CString& sKey);
1583 bool OnUserPart(CString& sChannel, CString& sMessage);
1585 bool OnUserTopic(CString& sChannel, CString& sTopic);
1588 bool OnUserQuit(CString& sMessage);
1589 bool OnUserQuitMessage(CQuitMessage& Message);
1591 bool OnCTCPReply(CNick& Nick, CString& sMessage);
1593 bool OnPrivCTCP(CNick& Nick, CString& sMessage);
1595 bool OnChanCTCP(CNick& Nick, CChan& Channel, CString& sMessage);
1597 bool OnPrivAction(CNick& Nick, CString& sMessage);
1599 bool OnChanAction(CNick& Nick, CChan& Channel, CString& sMessage);
1601 bool OnPrivMsg(CNick& Nick, CString& sMessage);
1603 bool OnChanMsg(CNick& Nick, CChan& Channel, CString& sMessage);
1605 bool OnPrivNotice(CNick& Nick, CString& sMessage);
1607 bool OnChanNotice(CNick& Nick, CChan& Channel, CString& sMessage);
1609 bool OnTopic(CNick& Nick, CChan& Channel, CString& sTopic);
1611 bool OnTimerAutoJoin(CChan& Channel);
1613 bool OnAddNetwork(CIRCNetwork& Network, CString& sErrorRet);
1614 bool OnDeleteNetwork(CIRCNetwork& Network);
1616 bool OnSendToClient(CString& sLine, CClient& Client);
1618 bool OnSendToIRC(CString& sLine);
1621 bool OnClientDetached();
1623 bool OnServerCapAvailable(const CString& sCap, const CString& sValue);
1624 bool OnServerCapResult(const CString& sCap, bool bSuccess);
1626 CModule* FindModule(const CString& sModule) const;
1627 bool LoadModule(const CString& sModule, const CString& sArgs,
1628 CModInfo::EModuleType eType, CUser* pUser,
1629 CIRCNetwork* pNetwork, CString& sRetMsg);
1630 bool UnloadModule(const CString& sModule);
1631 bool UnloadModule(const CString& sModule, CString& sRetMsg);
1632 bool ReloadModule(const CString& sModule, const CString& sArgs,
1633 CUser* pUser, CIRCNetwork* pNetwork, CString& sRetMsg);
1635 static bool GetModInfo(CModInfo& ModInfo, const CString& sModule,
1636 CString& sRetMsg);
1637 static bool GetModPathInfo(CModInfo& ModInfo, const CString& sModule,
1638 const CString& sModPath, CString& sRetMsg);
1639 static void GetAvailableMods(
1640 std::set<CModInfo>& ssMods,
1642 static void GetDefaultMods(
1643 std::set<CModInfo>& ssMods,
1645
1646 // This returns the path to the .so and to the data dir
1647 // which is where static data (webadmin skins) are saved
1648 static bool FindModPath(const CString& sModule, CString& sModPath,
1649 CString& sDataPath);
1650 // Return a list of <module dir, data dir> pairs for directories in
1651 // which modules can be found.
1652 typedef std::queue<std::pair<CString, CString>> ModDirList;
1653 static ModDirList GetModDirs();
1654
1655 // Global Modules
1656 bool OnAddUser(CUser& User, CString& sErrorRet);
1657 bool OnDeleteUser(CUser& User);
1658 bool OnClientConnect(CZNCSock* pSock, const CString& sHost,
1659 unsigned short uPort);
1660 bool OnLoginAttempt(std::shared_ptr<CAuthBase> Auth);
1661 bool OnFailedLogin(const CString& sUsername, const CString& sRemoteIP);
1662 bool OnUnknownUserRaw(CClient* pClient, CString& sLine);
1664 bool OnClientCapLs(CClient* pClient, SCString& ssCaps);
1665 bool IsClientCapSupported(CClient* pClient, const CString& sCap,
1666 bool bState);
1667 bool OnClientCapRequest(CClient* pClient, const CString& sCap, bool bState);
1668 bool OnModuleLoading(const CString& sModName, const CString& sArgs,
1669 CModInfo::EModuleType eType, bool& bSuccess,
1670 CString& sRetMsg);
1671 bool OnModuleUnloading(CModule* pModule, bool& bSuccess, CString& sRetMsg);
1672 bool OnGetModInfo(CModInfo& ModInfo, const CString& sModule, bool& bSuccess,
1673 CString& sRetMsg);
1674 bool OnGetAvailableMods(std::set<CModInfo>& ssMods,
1675 CModInfo::EModuleType eType);
1676 // !Global Modules
1677
1678 private:
1679 static ModHandle OpenModule(const CString& sModule, const CString& sModPath,
1680 CModInfo& Info, CString& sRetMsg);
1681 static bool ValidateModuleName(const CString& sModule, CString& sRetMsg);
1682
1683 protected:
1687};
1688
1689#endif // !ZNC_MODULES_H
void * ModHandle
Definition Modules.h:256
CModule * TModLoad(ModHandle p, CUser *pUser, CIRCNetwork *pNetwork, const CString &sModName, const CString &sModPath, CModInfo::EModuleType eType)
Definition Modules.h:344
void TModInfo(CModInfo &Info)
Definition Modules.h:341
void(* FPTimer_t)(CModule *, CFPTimer *)
Definition Modules.h:207
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
Definition Message.h:231
Definition Client.h:38
Definition Message.h:242
Definition Modules.h:169
CModule * m_pModule
Definition Modules.h:179
virtual void OnClientChangedSupport(CClient *pClient, bool bState)
Definition Modules.h:173
CModule * GetModule()
Definition Modules.h:175
virtual void OnServerChangedSupport(CIRCNetwork *pNetwork, bool bState)
Definition Modules.h:172
void SetModule(CModule *p)
Definition Modules.h:176
virtual ~CCapability()=default
Definition Chan.h:35
Definition Client.h:99
Definition Translation.h:103
this is the main cron job class
Definition Csocket.h:393
Definition Translation.h:71
Definition Modules.h:209
virtual ~CFPTimer()
Definition Modules.h:216
void SetFPCallback(FPTimer_t p)
Definition Modules.h:218
void RunJob() override
this is the method you should override
Definition Modules.h:221
Definition IRCNetwork.h:40
Definition IRCSock.h:35
Definition ZNCString.h:673
A job is a task which should run without blocking the main thread.
Definition Threads.h:67
Definition Message.h:252
Definition Message.h:293
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:351
CModCommand & operator=(const CModCommand &other)=default
Assignment operator, needed so that this can be saved in a std::map.
CString GetDescription() const
Definition Modules.h:396
void AddHelp(CTable &Table) const
Add this command to the CTable instance.
static void InitHelp(CTable &Table)
Initialize a CTable so that it can be used with AddHelp().
void(CModule::* ModCmdFunc)(const CString &sLine)
Type for the callback function that handles the actual command.
Definition Modules.h:354
CModCommand()
Default constructor, needed so that this can be saved in a std::map.
CmdFunc GetFunction() const
Definition Modules.h:394
void Call(const CString &sLine) const
Definition Modules.h:398
std::function< void(const CString &sLine)> CmdFunc
Definition Modules.h:355
CString GetArgs() const
Definition Modules.h:395
const CString & GetCommand() const
Definition Modules.h:393
Definition Modules.h:258
const CString & GetPath() const
Definition Modules.h:305
void SetName(const CString &s)
Definition Modules.h:315
void SetHasArgs(bool b=false)
Definition Modules.h:320
CString m_sWikiPage
Definition Modules.h:334
void SetArgsHelpText(const CString &s)
Definition Modules.h:319
bool m_bHasArgs
Definition Modules.h:336
const CString & GetName() const
Definition Modules.h:304
void SetLoader(ModLoader fLoader)
Definition Modules.h:321
EModuleType m_eDefaultType
Definition Modules.h:330
EModuleType
Definition Modules.h:260
@ NetworkModule
Definition Modules.h:260
@ UserModule
Definition Modules.h:260
@ GlobalModule
Definition Modules.h:260
CString t_s(const CString &sEnglish, const CString &sContext="") const
CString m_sName
Definition Modules.h:331
bool operator<(const CModInfo &Info) const
Definition Modules.h:280
static CString ModuleTypeToString(EModuleType eType)
Definition Modules.h:290
bool GetHasArgs() const
Definition Modules.h:309
bool SupportsType(EModuleType eType) const
Definition Modules.h:284
~CModInfo()
Definition Modules.h:278
void SetPath(const CString &s)
Definition Modules.h:316
CString m_sDescription
Definition Modules.h:333
void SetWikiPage(const CString &s)
Definition Modules.h:318
std::set< EModuleType > m_seType
Definition Modules.h:329
void AddType(EModuleType eType)
Definition Modules.h:288
const CString & GetWikiPage() const
Definition Modules.h:307
const CString & GetArgsHelpText() const
Definition Modules.h:308
CModInfo(const CString &sName, const CString &sPath, EModuleType eType)
Definition Modules.h:268
CString m_sArgsHelpText
Definition Modules.h:335
ModLoader m_fLoader
Definition Modules.h:337
ModLoader GetLoader() const
Definition Modules.h:310
void SetDefaultType(EModuleType eType)
Definition Modules.h:322
const CString & GetDescription() const
Definition Modules.h:306
EModuleType GetDefaultType() const
Definition Modules.h:311
CString m_sPath
Definition Modules.h:332
CModule *(* ModLoader)(ModHandle p, CUser *pUser, CIRCNetwork *pNetwork, const CString &sModName, const CString &sModPath, EModuleType eType)
Definition Modules.h:262
CModInfo()
Definition Modules.h:267
void SetDescription(const CString &s)
Definition Modules.h:317
A CJob version which can be safely used in modules.
Definition Modules.h:234
virtual ~CModuleJob()
const CString & GetDescription() const
Definition Modules.h:246
const CString m_sDescription
Definition Modules.h:252
const CString & GetName() const
Definition Modules.h:245
const CString m_sName
Definition Modules.h:251
CModule * m_pModule
Definition Modules.h:250
CModule * GetModule() const
Definition Modules.h:244
CModuleJob & operator=(const CModuleJob &)=delete
The base class for your own ZNC modules.
Definition Modules.h:420
std::map< CString, std::unique_ptr< CCapability > > m_mServerDependentCaps
Definition Modules.h:1455
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:1438
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:1242
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:436
@ HALTCORE
Continue calling other modules.
Definition Modules.h:453
@ HALT
This is the same as both CModule::HALTMODS and CModule::HALTCORE together.
Definition Modules.h:444
@ CONTINUE
ZNC will continue event processing normally.
Definition Modules.h:440
@ HALTMODS
Stop sending this even to other modules which were not called yet.
Definition Modules.h:448
bool MoveRegistry(const CString &sPath)
std::set< CTimer * > m_sTimers
Definition Modules.h:1439
virtual CString GetWebMenuTitle()
Return the title of the module's section in the web interface's side bar.
Definition Modules.h:495
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.
bool LoadRegistry()
const CString & GetModDataDir() const
Get the module's data dir.
Definition Modules.h:1143
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:1452
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:1081
CUser * m_pUser
Definition Modules.h:1446
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.
std::set< CSocket * > m_sSockets
Definition Modules.h:1440
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:487
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:1243
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:1252
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:1233
virtual EModRet OnChanBufferPlayMessage(CMessage &Message)
Called for each message during a channel's buffer play back.
CModInfo::EModuleType m_eType
Definition Modules.h:1437
void SetArgs(const CString &s)
Definition Modules.h:1245
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:1453
bool RemSocket(const CString &sSockName)
virtual void ClearSubPages()
Removes all registered (AddSubPage'd) SubPages.
Definition Modules.h:532
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)
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)
virtual ~CModule()
void SetModPath(const CString &s)
Definition Modules.h:1244
virtual VWebSubPages & GetSubPages()
Returns a list of all registered SubPages.
Definition Modules.h:536
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:1249
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)
const CString & GetModName() const
Definition Modules.h:1132
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)
CModule & operator=(const CModule &)=delete
CTimer * FindTimer(const CString &sLabel)
CClient * m_pClient
Definition Modules.h:1448
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:1168
bool SetNV(const CString &sName, const CString &sValue, bool bWriteToDisk=true)
std::set< CTimer * >::const_iterator BeginTimers() const
Definition Modules.h:1153
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:1451
virtual void OnOp(const CNick &OpNick, const CNick &Nick, CChan &Channel, bool bNoChange)
bool AddSocket(CSocket *pSocket)
CTranslationDomainRefHolder m_Translation
Definition Modules.h:1454
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:1232
virtual EModRet OnTopic(CNick &Nick, CChan &Channel, CString &sTopic)
virtual EModRet OnUserCTCPReply(CString &sTarget, CString &sMessage)
CSockManager * GetManager() const
Definition Modules.h:1268
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:1444
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.
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 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:1225
virtual EModRet OnPrivBufferPlayMessage(CMessage &Message)
Called for each message during a query's buffer play back.
const CString & GetArgs() const
Definition Modules.h:1251
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:456
@ UNLOAD
Your module can throw this enum at any given time.
Definition Modules.h:460
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:527
CIRCNetwork * GetNetwork() const
Definition Modules.h:1263
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 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 bool WebRequiresAdmin()
Return true if this module should only be usable for admins on the web.
Definition Modules.h:491
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:1171
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 OnSendToClientMessage(CMessage &Message)
Called immediately before ZNC sends a raw traffic line to a client.
CUser * GetUser() const
Definition Modules.h:1259
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:1250
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:1445
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:1447
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:1450
CDelayedTranslation t_d(const CString &sEnglish, const CString &sContext="") const
std::set< CTimer * >::const_iterator EndTimers() const
Definition Modules.h:1156
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:1442
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:1267
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:1449
MCString::iterator FindNV(const CString &sName)
Definition Modules.h:1229
bool ClearNV(bool bWriteToDisk=true)
void Unload()
This function throws CModule::UNLOAD which causes this module to be unloaded.
Definition Modules.h:469
Definition Modules.h:1464
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:1651
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 OnPreRehash()
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 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)
void UnloadAll()
static ModDirList GetModDirs()
CClient * GetClient() const
Definition Modules.h:1477
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:1476
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 OnUserNoticeMessage(CNoticeMessage &Message)
bool OnDeleteNetwork(CIRCNetwork &Network)
bool OnBoot()
bool OnUserCTCP(CString &sTarget, CString &sMessage)
bool OnChanPermission3(const CNick *pOpNick, const CNick &Nick, CChan &Channel, char cMode, bool bAdded, bool bNoChange)
bool OnUserCTCPReply(CString &sTarget, CString &sMessage)
bool OnUserRawMessage(CMessage &Message)
void SetClient(CClient *pClient)
Definition Modules.h:1474
bool OnChanBufferPlayLine(CChan &Chan, CClient &Client, CString &sLine)
bool OnChanNoticeMessage(CNoticeMessage &Message)
bool OnChanBufferStarting(CChan &Chan, CClient &Client)
bool OnClientLogin()
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 OnClientAttached()
bool OnTimerAutoJoin(CChan &Channel)
bool OnChanTextMessage(CTextMessage &Message)
bool OnPostRehash()
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)
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 OnIRCDisconnected()
bool OnUserActionMessage(CActionMessage &Message)
bool OnChanMsg(CNick &Nick, CChan &Channel, CString &sMessage)
bool OnClientDetached()
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 OnPrivMsg(CNick &Nick, CString &sMessage)
CClient * m_pClient
Definition Modules.h:1685
bool OnSendToClient(CString &sLine, CClient &Client)
CUser * GetUser() const
Definition Modules.h:1475
CIRCNetwork * m_pNetwork
Definition Modules.h:1684
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:1683
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:1472
bool OnIRCConnected()
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:1473
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 Message.h:272
Definition Nick.h:29
Definition Message.h:280
Definition Message.h:287
Definition Translation.h:85
CString Resolve() const
Definition Translation.h:90
Definition Message.h:304
Definition Query.h:29
Definition Message.h:313
Definition Socket.h:80
Base Csock implementation to be used by modules.
Definition Socket.h:247
String class that is used inside ZNC.
Definition ZNCString.h:68
Generate a grid-like or list-like output from a given input.
Definition Utils.h:172
Definition Template.h:129
Definition Message.h:322
Definition Modules.h:182
CModule * m_pModule
Definition Modules.h:203
CModule * GetModule() const
CTimer & operator=(const CTimer &)=delete
void SetModule(CModule *p)
CString m_sDescription
Definition Modules.h:204
virtual ~CTimer()
void SetDescription(const CString &s)
const CString & GetDescription() const
Definition Message.h:329
Definition User.h:38
Definition WebModules.h:127
Definition Socket.h:27
Definition znc.h:38
A dictionary for strings.
Definition ZNCString.h:595
C-style entry point to the module.
Definition Modules.h:81
void(* fpFillModInfo)(CModInfo &)
Definition Modules.h:85
const char * pcVersion
Definition Modules.h:82
const char * pcCompileOptions
Definition Modules.h:84
const char * pcVersionExtra
Definition Modules.h:83
Definition Translation.h:62