ZNC
Versions: latest readthedocs-test
Modules.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2004-2017 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 <set>
29 #include <queue>
30 #include <sys/time.h>
31 
32 // Forward Declarations
33 class CAuthBase;
34 class CChan;
35 class CQuery;
36 class CIRCNetwork;
37 class CClient;
38 class CWebSock;
39 class CTemplate;
40 class CIRCSock;
41 class CModule;
42 class CModInfo;
43 // !Forward Declarations
44 
45 #ifdef REQUIRESSL
46 #ifndef HAVE_LIBSSL
47 #error -
48 #error -
49 #error This module only works when ZNC is compiled with OpenSSL support
50 #error -
51 #error -
52 #endif
53 #endif
54 
55 #ifdef BUILD_WITH_CMAKE
56 #include <znc/znc_export_lib_export.h>
57 #elif HAVE_VISIBILITY
58 #define ZNC_EXPORT_LIB_EXPORT __attribute__((__visibility__("default")))
59 #else
60 #define ZNC_EXPORT_LIB_EXPORT
61 #endif
62 
80 struct CModuleEntry {
81  const char* pcVersion;
82  const char* pcVersionExtra;
83  const char* pcCompileOptions;
85 };
86 
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); \
92  }; \
93  t_s(CString()); /* Don't warn about unused t_s */ \
94  Info.SetDescription(DESCRIPTION); \
95  Info.SetDefaultType(TYPE); \
96  Info.AddType(TYPE); \
97  Info.SetLoader(TModLoad<CLASS>); \
98  TModInfo<CLASS>(Info); \
99  } \
100  extern "C" { \
101  /* A global variable leads to ODR violation when several modules are \
102  * loaded. But a static variable inside a function works. */ \
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, \
107  FillModInfo}; \
108  return &ThisModule; \
109  } \
110  }
111 
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)
132 
133 // User Module Macros
135 #define USERMODULEDEFS(CLASS, DESCRIPTION) \
136  MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::UserModule)
137 // !User Module Macros
138 
139 // Global Module Macros
141 #define GLOBALMODULEDEFS(CLASS, DESCRIPTION) \
142  MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::GlobalModule)
143 // !Global Module Macros
144 
145 // Network Module Macros
147 #define NETWORKMODULEDEFS(CLASS, DESCRIPTION) \
148  MODCOMMONDEFS(CLASS, DESCRIPTION, CModInfo::NetworkModule)
149 // !Network Module Macros
150 
157 #define MODULEDEFS(CLASS, DESCRIPTION) NETWORKMODULEDEFS(CLASS, DESCRIPTION)
158 
159 // Forward Declarations
160 class CZNC;
161 class CUser;
162 class CNick;
163 class CChan;
164 class CModule;
165 class CFPTimer;
166 class CSockManager;
167 // !Forward Declarations
168 
169 class CTimer : public CCron {
170  public:
171  CTimer(CModule* pModule, unsigned int uInterval, unsigned int uCycles,
172  const CString& sLabel, const CString& sDescription);
173 
174  virtual ~CTimer();
175 
176  CTimer(const CTimer&) = delete;
177  CTimer& operator=(const CTimer&) = delete;
178 
179  // Setters
180  void SetModule(CModule* p);
181  void SetDescription(const CString& s);
182  // !Setters
183 
184  // Getters
185  CModule* GetModule() const;
186  const CString& GetDescription() const;
187  // !Getters
188  private:
189  protected:
192 };
193 
194 typedef void (*FPTimer_t)(CModule*, CFPTimer*);
195 
196 class CFPTimer : public CTimer {
197  public:
198  CFPTimer(CModule* pModule, unsigned int uInterval, unsigned int uCycles,
199  const CString& sLabel, const CString& sDescription)
200  : CTimer(pModule, uInterval, uCycles, sLabel, sDescription),
201  m_pFBCallback(nullptr) {}
202 
203  virtual ~CFPTimer() {}
204 
205  void SetFPCallback(FPTimer_t p) { m_pFBCallback = p; }
206 
207  protected:
208  void RunJob() override {
209  if (m_pFBCallback) {
210  m_pFBCallback(m_pModule, this);
211  }
212  }
213 
214  private:
215  FPTimer_t m_pFBCallback;
216 };
217 
218 #ifdef HAVE_PTHREAD
219 class CModuleJob : public CJob {
222  public:
223  CModuleJob(CModule* pModule, const CString& sName, const CString& sDesc)
224  : CJob(), m_pModule(pModule), m_sName(sName), m_sDescription(sDesc) {}
225  virtual ~CModuleJob();
226 
227  CModuleJob(const CModuleJob&) = delete;
228  CModuleJob& operator=(const CModuleJob&) = delete;
229 
230  // Getters
231  CModule* GetModule() const { return m_pModule; }
232  const CString& GetName() const { return m_sName; }
233  const CString& GetDescription() const { return m_sDescription; }
234  // !Getters
235 
236  protected:
240 };
241 #endif
242 
243 typedef void* ModHandle;
244 
245 class CModInfo {
246  public:
247  typedef enum { GlobalModule, UserModule, NetworkModule } EModuleType;
248 
249  typedef CModule* (*ModLoader)(ModHandle p, CUser* pUser,
250  CIRCNetwork* pNetwork,
251  const CString& sModName,
252  const CString& sModPath, EModuleType eType);
253 
254  CModInfo() : CModInfo("", "", NetworkModule) {}
255  CModInfo(const CString& sName, const CString& sPath, EModuleType eType)
256  : m_seType(),
257  m_eDefaultType(eType),
258  m_sName(sName),
259  m_sPath(sPath),
260  m_sDescription(""),
261  m_sWikiPage(""),
262  m_sArgsHelpText(""),
263  m_bHasArgs(false),
264  m_fLoader(nullptr) {}
266 
267  bool operator<(const CModInfo& Info) const {
268  return (GetName() < Info.GetName());
269  }
270 
271  bool SupportsType(EModuleType eType) const {
272  return m_seType.find(eType) != m_seType.end();
273  }
274 
275  void AddType(EModuleType eType) { m_seType.insert(eType); }
276 
277  static CString ModuleTypeToString(EModuleType eType) {
278  switch (eType) {
279  case GlobalModule:
280  return "Global";
281  case UserModule:
282  return "User";
283  case NetworkModule:
284  return "Network";
285  default:
286  return "UNKNOWN";
287  }
288  }
289 
290  // Getters
291  const CString& GetName() const { return m_sName; }
292  const CString& GetPath() const { return m_sPath; }
293  const CString& GetDescription() const { return m_sDescription; }
294  const CString& GetWikiPage() const { return m_sWikiPage; }
295  const CString& GetArgsHelpText() const { return m_sArgsHelpText; }
296  bool GetHasArgs() const { return m_bHasArgs; }
297  ModLoader GetLoader() const { return m_fLoader; }
298  EModuleType GetDefaultType() const { return m_eDefaultType; }
299  // !Getters
300 
301  // Setters
302  void SetName(const CString& s) { m_sName = s; }
303  void SetPath(const CString& s) { m_sPath = s; }
304  void SetDescription(const CString& s) { m_sDescription = s; }
305  void SetWikiPage(const CString& s) { m_sWikiPage = s; }
306  void SetArgsHelpText(const CString& s) { m_sArgsHelpText = s; }
307  void SetHasArgs(bool b = false) { m_bHasArgs = b; }
308  void SetLoader(ModLoader fLoader) { m_fLoader = fLoader; }
309  void SetDefaultType(EModuleType eType) { m_eDefaultType = eType; }
310  // !Setters
311 
312  CString t_s(const CString& sEnglish, const CString& sContext = "") const;
313 
314  private:
315  protected:
316  std::set<EModuleType> m_seType;
317  EModuleType m_eDefaultType;
324  ModLoader m_fLoader;
325 };
326 
327 template <class M>
328 void TModInfo(CModInfo& Info) {}
329 
330 template <class M>
332  const CString& sModName, const CString& sModPath,
333  CModInfo::EModuleType eType) {
334  return new M(p, pUser, pNetwork, sModName, sModPath, eType);
335 }
336 
338 class CModCommand {
339  public:
341  typedef void (CModule::*ModCmdFunc)(const CString& sLine);
342  typedef std::function<void(const CString& sLine)> CmdFunc;
343 
345  CModCommand();
346 
353  CModCommand(const CString& sCmd, CModule* pMod, ModCmdFunc func,
354  const CString& sArgs, const CString& sDesc);
355  CModCommand(const CString& sCmd, CmdFunc func,
356  const COptionalTranslation& Args,
357  const COptionalTranslation& Desc);
358 
362  CModCommand(const CModCommand& other) = default;
363 
367  CModCommand& operator=(const CModCommand& other) = default;
368 
372  static void InitHelp(CTable& Table);
373 
378  void AddHelp(CTable& Table) const;
379 
380  const CString& GetCommand() const { return m_sCmd; }
381  CmdFunc GetFunction() const { return m_pFunc; }
382  CString GetArgs() const { return m_Args.Resolve(); }
383  CString GetDescription() const { return m_Desc.Resolve(); }
384 
385  void Call(const CString& sLine) const { m_pFunc(sLine); }
386 
387  private:
388  CString m_sCmd;
389  CmdFunc m_pFunc;
390  COptionalTranslation m_Args;
391  COptionalTranslation m_Desc;
392 };
393 
407 class CModule {
408  public:
409  CModule(
410  ModHandle pDLL, CUser* pUser, CIRCNetwork* pNetwork,
411  const CString& sModName, const CString& sDataDir,
412  CModInfo::EModuleType eType =
413  CModInfo::NetworkModule); // TODO: remove default value in ZNC 2.x
414  virtual ~CModule();
415 
416  CModule(const CModule&) = delete;
417  CModule& operator=(const CModule&) = delete;
418 
423  typedef enum {
427  CONTINUE = 1,
431  HALT = 2,
435  HALTMODS = 3,
440  HALTCORE = 4
441  } EModRet;
442 
443  typedef enum {
447  UNLOAD
448  } EModException;
449 
450  void SetUser(CUser* pUser);
451  void SetNetwork(CIRCNetwork* pNetwork);
452  void SetClient(CClient* pClient);
453 
456  void Unload() { throw UNLOAD; }
457 
464  virtual bool OnLoad(const CString& sArgsi, CString& sMessage);
469  virtual bool OnBoot();
470 
474  virtual bool WebRequiresLogin() { return true; }
478  virtual bool WebRequiresAdmin() { return false; }
482  virtual CString GetWebMenuTitle() { return ""; }
483  virtual CString GetWebPath();
484  virtual CString GetWebFilesPath();
493  virtual bool OnWebPreRequest(CWebSock& WebSock, const CString& sPageName);
503  virtual bool OnWebRequest(CWebSock& WebSock, const CString& sPageName,
504  CTemplate& Tmpl);
510  virtual bool ValidateWebRequestCSRFCheck(CWebSock& WebSock, const CString& sPageName);
514  virtual void AddSubPage(TWebSubPage spSubPage) {
515  m_vSubPages.push_back(spSubPage);
516  }
519  virtual void ClearSubPages() { m_vSubPages.clear(); }
523  virtual VWebSubPages& GetSubPages() { return m_vSubPages; }
533  virtual bool OnEmbeddedWebRequest(CWebSock& WebSock,
534  const CString& sPageName,
535  CTemplate& Tmpl);
536 
538  virtual void OnPreRehash();
540  virtual void OnPostRehash();
542  virtual void OnIRCDisconnected();
544  virtual void OnIRCConnected();
550  virtual EModRet OnIRCConnecting(CIRCSock* pIRCSock);
555  virtual void OnIRCConnectionError(CIRCSock* pIRCSock);
566  virtual EModRet OnIRCRegistration(CString& sPass, CString& sNick,
567  CString& sIdent, CString& sRealName);
572  virtual EModRet OnBroadcast(CString& sMessage);
573 
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,
593  bool bNoChange);
594  virtual void OnOp(const CNick& OpNick, const CNick& Nick, CChan& Channel,
595  bool bNoChange);
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,
600  bool bNoChange);
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,
605  bool bNoChange);
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,
631  const CString& sModes, const CString& sArgs);
632  virtual void OnRawMode(const CNick& OpNick, CChan& Channel,
633  const CString& sModes, const CString& sArgs);
634 
640  virtual EModRet OnRaw(CString& sLine);
646  virtual EModRet OnRawMessage(CMessage& Message);
647 
653  virtual EModRet OnNumericMessage(CNumericMessage& Message);
654 
659  virtual EModRet OnStatusCommand(CString& sCommand);
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);
680 
686  virtual void OnQuitMessage(CQuitMessage& Message,
687  const std::vector<CChan*>& vChans);
689  virtual void OnQuit(const CNick& Nick, const CString& sMessage,
690  const std::vector<CChan*>& vChans);
691 
697  virtual void OnNickMessage(CNickMessage& Message,
698  const std::vector<CChan*>& vChans);
700  virtual void OnNick(const CNick& Nick, const CString& sNewNick,
701  const std::vector<CChan*>& vChans);
702 
707  virtual void OnKickMessage(CKickMessage& Message);
709  virtual void OnKick(const CNick& OpNick, const CString& sKickedNick,
710  CChan& Channel, const CString& sMessage);
711 
716  virtual EModRet OnJoining(CChan& Channel);
717 
722  virtual void OnJoinMessage(CJoinMessage& Message);
724  virtual void OnJoin(const CNick& Nick, CChan& Channel);
725 
730  virtual void OnPartMessage(CPartMessage& Message);
732  virtual void OnPart(const CNick& Nick, CChan& Channel,
733  const CString& sMessage);
734 
741  virtual EModRet OnInvite(const CNick& Nick, const CString& sChan);
742 
748  virtual EModRet OnChanBufferStarting(CChan& Chan, CClient& Client);
754  virtual EModRet OnChanBufferEnding(CChan& Chan, CClient& Client);
755 
761  virtual EModRet OnChanBufferPlayMessage(CMessage& Message);
763  virtual EModRet OnChanBufferPlayLine2(CChan& Chan, CClient& Client,
764  CString& sLine, const timeval& tv);
766  virtual EModRet OnChanBufferPlayLine(CChan& Chan, CClient& Client,
767  CString& sLine);
768 
775  virtual EModRet OnPrivBufferStarting(CQuery& Query, CClient& Client);
782  virtual EModRet OnPrivBufferEnding(CQuery& Query, CClient& Client);
783 
789  virtual EModRet OnPrivBufferPlayMessage(CMessage& Message);
791  virtual EModRet OnPrivBufferPlayLine2(CClient& Client, CString& sLine,
792  const timeval& tv);
794  virtual EModRet OnPrivBufferPlayLine(CClient& Client, CString& sLine);
795 
797  virtual void OnClientLogin();
799  virtual void OnClientDisconnect();
800 
806  virtual EModRet OnUserRaw(CString& sLine);
812  virtual EModRet OnUserRawMessage(CMessage& Message);
813 
819  virtual EModRet OnUserCTCPReplyMessage(CCTCPMessage& Message);
821  virtual EModRet OnUserCTCPReply(CString& sTarget, CString& sMessage);
822 
830  virtual EModRet OnUserCTCPMessage(CCTCPMessage& Message);
832  virtual EModRet OnUserCTCP(CString& sTarget, CString& sMessage);
833 
840  virtual EModRet OnUserActionMessage(CActionMessage& Message);
842  virtual EModRet OnUserAction(CString& sTarget, CString& sMessage);
843 
849  virtual EModRet OnUserTextMessage(CTextMessage& Message);
851  virtual EModRet OnUserMsg(CString& sTarget, CString& sMessage);
852 
858  virtual EModRet OnUserNoticeMessage(CNoticeMessage& Message);
860  virtual EModRet OnUserNotice(CString& sTarget, CString& sMessage);
861 
867  virtual EModRet OnUserJoinMessage(CJoinMessage& Message);
869  virtual EModRet OnUserJoin(CString& sChannel, CString& sKey);
870 
876  virtual EModRet OnUserPartMessage(CPartMessage& Message);
878  virtual EModRet OnUserPart(CString& sChannel, CString& sMessage);
879 
885  virtual EModRet OnUserTopicMessage(CTopicMessage& Message);
887  virtual EModRet OnUserTopic(CString& sChannel, CString& sTopic);
888 
893  virtual EModRet OnUserTopicRequest(CString& sChannel);
894 
900  virtual EModRet OnUserQuitMessage(CQuitMessage& Message);
902  virtual EModRet OnUserQuit(CString& sMessage);
903 
909  virtual EModRet OnCTCPReplyMessage(CCTCPMessage& Message);
911  virtual EModRet OnCTCPReply(CNick& Nick, CString& sMessage);
912 
918  virtual EModRet OnPrivCTCPMessage(CCTCPMessage& Message);
920  virtual EModRet OnPrivCTCP(CNick& Nick, CString& sMessage);
921 
927  virtual EModRet OnChanCTCPMessage(CCTCPMessage& Message);
929  virtual EModRet OnChanCTCP(CNick& Nick, CChan& Channel, CString& sMessage);
930 
936  virtual EModRet OnPrivActionMessage(CActionMessage& Message);
938  virtual EModRet OnPrivAction(CNick& Nick, CString& sMessage);
939 
945  virtual EModRet OnChanActionMessage(CActionMessage& Message);
947  virtual EModRet OnChanAction(CNick& Nick, CChan& Channel,
948  CString& sMessage);
949 
955  virtual EModRet OnPrivTextMessage(CTextMessage& Message);
957  virtual EModRet OnPrivMsg(CNick& Nick, CString& sMessage);
958 
964  virtual EModRet OnChanTextMessage(CTextMessage& Message);
966  virtual EModRet OnChanMsg(CNick& Nick, CChan& Channel, CString& sMessage);
967 
973  virtual EModRet OnPrivNoticeMessage(CNoticeMessage& Message);
975  virtual EModRet OnPrivNotice(CNick& Nick, CString& sMessage);
976 
982  virtual EModRet OnChanNoticeMessage(CNoticeMessage& Message);
984  virtual EModRet OnChanNotice(CNick& Nick, CChan& Channel,
985  CString& sMessage);
986 
992  virtual EModRet OnTopicMessage(CTopicMessage& Message);
994  virtual EModRet OnTopic(CNick& Nick, CChan& Channel, CString& sTopic);
995 
1001  virtual bool OnServerCapAvailable(const CString& sCap);
1007  virtual void OnServerCapResult(const CString& sCap, bool bSuccess);
1008 
1014  virtual EModRet OnTimerAutoJoin(CChan& Channel);
1015 
1022  virtual EModRet OnAddNetwork(CIRCNetwork& Network, CString& sErrorRet);
1027  virtual EModRet OnDeleteNetwork(CIRCNetwork& Network);
1028 
1035  virtual EModRet OnSendToClientMessage(CMessage& Message);
1037  virtual EModRet OnSendToClient(CString& sLine, CClient& Client);
1038 
1045  virtual EModRet OnSendToIRCMessage(CMessage& Message);
1047  virtual EModRet OnSendToIRC(CString& sLine);
1048 
1049  ModHandle GetDLL() { return m_pDLL; }
1050 
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);
1092 
1094  const CString& GetModName() const { return m_sModName; }
1095 
1099  CString GetModNick() const;
1100 
1105  const CString& GetModDataDir() const { return m_sDataDir; }
1106 
1107  // Timer stuff
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);
1114  CTimer* FindTimer(const CString& sLabel);
1115  std::set<CTimer*>::const_iterator BeginTimers() const {
1116  return m_sTimers.begin();
1117  }
1118  std::set<CTimer*>::const_iterator EndTimers() const {
1119  return m_sTimers.end();
1120  }
1121  virtual void ListTimers();
1122  // !Timer stuff
1123 
1124  // Socket stuff
1125  bool AddSocket(CSocket* pSocket);
1126  bool RemSocket(CSocket* pSocket);
1127  bool RemSocket(const CString& sSockName);
1128  bool UnlinkSocket(CSocket* pSocket);
1129  CSocket* FindSocket(const CString& sSockName);
1130  std::set<CSocket*>::const_iterator BeginSockets() const {
1131  return m_sSockets.begin();
1132  }
1133  std::set<CSocket*>::const_iterator EndSockets() const {
1134  return m_sSockets.end();
1135  }
1136  virtual void ListSockets();
1137 // !Socket stuff
1138 
1139 #ifdef HAVE_PTHREAD
1140  // Job stuff
1141  void AddJob(CModuleJob* pJob);
1142  void CancelJob(CModuleJob* pJob);
1143  bool CancelJob(const CString& sJobName);
1144  void CancelJobs(const std::set<CModuleJob*>& sJobs);
1145  bool UnlinkJob(CModuleJob* pJob);
1146 // !Job stuff
1147 #endif
1148 
1149  // Command stuff
1151  void AddHelpCommand();
1153  bool AddCommand(const CModCommand& Command);
1156  bool AddCommand(const CString& sCmd, CModCommand::ModCmdFunc func,
1157  const CString& sArgs = "", const CString& sDesc = "");
1160  bool AddCommand(const CString& sCmd, const COptionalTranslation& Args,
1161  const COptionalTranslation& Desc,
1162  std::function<void(const CString& sLine)> func);
1164  bool RemCommand(const CString& sCmd);
1166  const CModCommand* FindCommand(const CString& sCmd) const;
1174  bool HandleCommand(const CString& sLine);
1178  void HandleHelpCommand(const CString& sLine = "");
1179  // !Command stuff
1180 
1181  bool LoadRegistry();
1182  bool SaveRegistry() const;
1183  bool MoveRegistry(const CString& sPath);
1184  bool SetNV(const CString& sName, const CString& sValue,
1185  bool bWriteToDisk = true);
1186  CString GetNV(const CString& sName) const;
1187  bool HasNV(const CString& sName) const {
1188  return m_mssRegistry.find(sName) != m_mssRegistry.end();
1189  }
1190  bool DelNV(const CString& sName, bool bWriteToDisk = true);
1191  MCString::iterator FindNV(const CString& sName) {
1192  return m_mssRegistry.find(sName);
1193  }
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);
1198 
1199  const CString& GetSavePath() const;
1200  CString ExpandString(const CString& sStr) const;
1201  CString& ExpandString(const CString& sStr, CString& sRet) const;
1202 
1203  // Setters
1204  void SetType(CModInfo::EModuleType eType) { m_eType = eType; }
1205  void SetDescription(const CString& s) { m_sDescription = s; }
1206  void SetModPath(const CString& s) { m_sModPath = s; }
1207  void SetArgs(const CString& s) { m_sArgs = s; }
1208  // !Setters
1209 
1210  // Getters
1211  CModInfo::EModuleType GetType() const { return m_eType; }
1212  const CString& GetDescription() const { return m_sDescription; }
1213  const CString& GetArgs() const { return m_sArgs; }
1214  const CString& GetModPath() const { return m_sModPath; }
1215 
1221  CUser* GetUser() const { return m_pUser; }
1225  CIRCNetwork* GetNetwork() const { return m_pNetwork; }
1229  CClient* GetClient() const { return m_pClient; }
1230  CSockManager* GetManager() const { return m_pManager; }
1231  // !Getters
1232 
1233  // Global Modules
1240  virtual EModRet OnAddUser(CUser& User, CString& sErrorRet);
1245  virtual EModRet OnDeleteUser(CUser& User);
1252  virtual void OnClientConnect(CZNCSock* pSock, const CString& sHost,
1253  unsigned short uPort);
1260  virtual EModRet OnLoginAttempt(std::shared_ptr<CAuthBase> Auth);
1265  virtual void OnFailedLogin(const CString& sUsername,
1266  const CString& sRemoteIP);
1273  virtual EModRet OnUnknownUserRaw(CClient* pClient, CString& sLine);
1274  virtual EModRet OnUnknownUserRawMessage(CMessage& Message);
1275 
1281  virtual void OnClientCapLs(CClient* pClient, SCString& ssCaps);
1288  virtual bool IsClientCapSupported(CClient* pClient, const CString& sCap,
1289  bool bState);
1299  virtual void OnClientCapRequest(CClient* pClient, const CString& sCap,
1300  bool bState);
1301 
1311  virtual EModRet OnModuleLoading(const CString& sModName,
1312  const CString& sArgs,
1313  CModInfo::EModuleType eType, bool& bSuccess,
1314  CString& sRetMsg);
1322  virtual EModRet OnModuleUnloading(CModule* pModule, bool& bSuccess,
1323  CString& sRetMsg);
1331  virtual EModRet OnGetModInfo(CModInfo& ModInfo, const CString& sModule,
1332  bool& bSuccess, CString& sRetMsg);
1337  virtual void OnGetAvailableMods(std::set<CModInfo>& ssMods,
1338  CModInfo::EModuleType eType);
1339  // !Global Modules
1340 
1341 #ifndef SWIG
1342  // Translation
1343  CString t_s(const CString& sEnglish, const CString& sContext = "") const;
1344  CInlineFormatMessage t_f(const CString& sEnglish,
1345  const CString& sContext = "") const;
1346  CInlineFormatMessage t_p(const CString& sEnglish, const CString& sEnglishes,
1347  int iNum, const CString& sContext = "") const;
1348  CDelayedTranslation t_d(const CString& sEnglish,
1349  const CString& sContext = "") const;
1350 #endif
1351 
1352  protected:
1355  std::set<CTimer*> m_sTimers;
1356  std::set<CSocket*> m_sSockets;
1357 #ifdef HAVE_PTHREAD
1358  std::set<CModuleJob*> m_sJobs;
1359 #endif
1371 
1372  private:
1373  MCString
1374  m_mssRegistry;
1375  VWebSubPages m_vSubPages;
1376  std::map<CString, CModCommand> m_mCommands;
1377 };
1378 
1379 class CModules : public std::vector<CModule*> {
1380  public:
1381  CModules();
1382  ~CModules();
1383 
1384  CModules(const CModules&) = default;
1385  CModules& operator=(const CModules&) = default;
1386 
1387  void SetUser(CUser* pUser) { m_pUser = pUser; }
1388  void SetNetwork(CIRCNetwork* pNetwork) { m_pNetwork = pNetwork; }
1389  void SetClient(CClient* pClient) { m_pClient = pClient; }
1390  CUser* GetUser() const { return m_pUser; }
1391  CIRCNetwork* GetNetwork() const { return m_pNetwork; }
1392  CClient* GetClient() const { return m_pClient; }
1393 
1394  void UnloadAll();
1395 
1396  bool OnBoot();
1397  bool OnPreRehash();
1398  bool OnPostRehash();
1399  bool OnIRCDisconnected();
1400  bool OnIRCConnected();
1401  bool OnIRCConnecting(CIRCSock* pIRCSock);
1402  bool OnIRCConnectionError(CIRCSock* pIRCSock);
1403  bool OnIRCRegistration(CString& sPass, CString& sNick, CString& sIdent,
1404  CString& sRealName);
1405  bool OnBroadcast(CString& sMessage);
1406 
1407  bool OnChanPermission2(const CNick* pOpNick, const CNick& Nick,
1408  CChan& Channel, unsigned char uMode, bool bAdded,
1409  bool bNoChange);
1410  bool OnChanPermission(const CNick& OpNick, const CNick& Nick,
1411  CChan& Channel, unsigned char uMode, bool bAdded,
1412  bool bNoChange);
1413  bool OnOp2(const CNick* pOpNick, const CNick& Nick, CChan& Channel,
1414  bool bNoChange);
1415  bool OnOp(const CNick& OpNick, const CNick& Nick, CChan& Channel,
1416  bool bNoChange);
1417  bool OnDeop2(const CNick* pOpNick, const CNick& Nick, CChan& Channel,
1418  bool bNoChange);
1419  bool OnDeop(const CNick& OpNick, const CNick& Nick, CChan& Channel,
1420  bool bNoChange);
1421  bool OnVoice2(const CNick* pOpNick, const CNick& Nick, CChan& Channel,
1422  bool bNoChange);
1423  bool OnVoice(const CNick& OpNick, const CNick& Nick, CChan& Channel,
1424  bool bNoChange);
1425  bool OnDevoice2(const CNick* pOpNick, const CNick& Nick, CChan& Channel,
1426  bool bNoChange);
1427  bool OnDevoice(const CNick& OpNick, const CNick& Nick, CChan& Channel,
1428  bool bNoChange);
1429  bool OnRawMode2(const CNick* pOpNick, CChan& Channel, const CString& sModes,
1430  const CString& sArgs);
1431  bool OnRawMode(const CNick& OpNick, CChan& Channel, const CString& sModes,
1432  const CString& sArgs);
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);
1437 
1438  bool OnRaw(CString& sLine);
1439  bool OnRawMessage(CMessage& Message);
1440  bool OnNumericMessage(CNumericMessage& Message);
1441 
1442  bool OnStatusCommand(CString& sCommand);
1443  bool OnModCommand(const CString& sCommand);
1444  bool OnModNotice(const CString& sMessage);
1445  bool OnModCTCP(const CString& sMessage);
1446 
1447  bool OnQuit(const CNick& Nick, const CString& sMessage,
1448  const std::vector<CChan*>& vChans);
1449  bool OnQuitMessage(CQuitMessage& Message,
1450  const std::vector<CChan*>& vChans);
1451  bool OnNick(const CNick& Nick, const CString& sNewNick,
1452  const std::vector<CChan*>& vChans);
1453  bool OnNickMessage(CNickMessage& Message,
1454  const std::vector<CChan*>& vChans);
1455  bool OnKick(const CNick& Nick, const CString& sOpNick, CChan& Channel,
1456  const CString& sMessage);
1457  bool OnKickMessage(CKickMessage& Message);
1458  bool OnJoining(CChan& Channel);
1459  bool OnJoin(const CNick& Nick, CChan& Channel);
1460  bool OnJoinMessage(CJoinMessage& Message);
1461  bool OnPart(const CNick& Nick, CChan& Channel, const CString& sMessage);
1462  bool OnPartMessage(CPartMessage& Message);
1463  bool OnInvite(const CNick& Nick, const CString& sChan);
1464 
1465  bool OnChanBufferStarting(CChan& Chan, CClient& Client);
1466  bool OnChanBufferEnding(CChan& Chan, CClient& Client);
1467  bool OnChanBufferPlayLine2(CChan& Chan, CClient& Client, CString& sLine,
1468  const timeval& tv);
1469  bool OnChanBufferPlayLine(CChan& Chan, CClient& Client, CString& sLine);
1470  bool OnPrivBufferStarting(CQuery& Query, CClient& Client);
1471  bool OnPrivBufferEnding(CQuery& Query, CClient& Client);
1472  bool OnPrivBufferPlayLine2(CClient& Client, CString& sLine,
1473  const timeval& tv);
1474  bool OnPrivBufferPlayLine(CClient& Client, CString& sLine);
1475  bool OnChanBufferPlayMessage(CMessage& Message);
1476  bool OnPrivBufferPlayMessage(CMessage& Message);
1477 
1478  bool OnClientLogin();
1479  bool OnClientDisconnect();
1480  bool OnUserRaw(CString& sLine);
1481  bool OnUserRawMessage(CMessage& Message);
1482  bool OnUserCTCPReply(CString& sTarget, CString& sMessage);
1483  bool OnUserCTCPReplyMessage(CCTCPMessage& Message);
1484  bool OnUserCTCP(CString& sTarget, CString& sMessage);
1485  bool OnUserCTCPMessage(CCTCPMessage& Message);
1486  bool OnUserAction(CString& sTarget, CString& sMessage);
1487  bool OnUserActionMessage(CActionMessage& Message);
1488  bool OnUserMsg(CString& sTarget, CString& sMessage);
1489  bool OnUserTextMessage(CTextMessage& Message);
1490  bool OnUserNotice(CString& sTarget, CString& sMessage);
1491  bool OnUserNoticeMessage(CNoticeMessage& Message);
1492  bool OnUserJoin(CString& sChannel, CString& sKey);
1493  bool OnUserJoinMessage(CJoinMessage& Message);
1494  bool OnUserPart(CString& sChannel, CString& sMessage);
1495  bool OnUserPartMessage(CPartMessage& Message);
1496  bool OnUserTopic(CString& sChannel, CString& sTopic);
1497  bool OnUserTopicMessage(CTopicMessage& Message);
1498  bool OnUserTopicRequest(CString& sChannel);
1499  bool OnUserQuit(CString& sMessage);
1500  bool OnUserQuitMessage(CQuitMessage& Message);
1501 
1502  bool OnCTCPReply(CNick& Nick, CString& sMessage);
1503  bool OnCTCPReplyMessage(CCTCPMessage& Message);
1504  bool OnPrivCTCP(CNick& Nick, CString& sMessage);
1505  bool OnPrivCTCPMessage(CCTCPMessage& Message);
1506  bool OnChanCTCP(CNick& Nick, CChan& Channel, CString& sMessage);
1507  bool OnChanCTCPMessage(CCTCPMessage& Message);
1508  bool OnPrivAction(CNick& Nick, CString& sMessage);
1509  bool OnPrivActionMessage(CActionMessage& Message);
1510  bool OnChanAction(CNick& Nick, CChan& Channel, CString& sMessage);
1511  bool OnChanActionMessage(CActionMessage& Message);
1512  bool OnPrivMsg(CNick& Nick, CString& sMessage);
1513  bool OnPrivTextMessage(CTextMessage& Message);
1514  bool OnChanMsg(CNick& Nick, CChan& Channel, CString& sMessage);
1515  bool OnChanTextMessage(CTextMessage& Message);
1516  bool OnPrivNotice(CNick& Nick, CString& sMessage);
1517  bool OnPrivNoticeMessage(CNoticeMessage& Message);
1518  bool OnChanNotice(CNick& Nick, CChan& Channel, CString& sMessage);
1519  bool OnChanNoticeMessage(CNoticeMessage& Message);
1520  bool OnTopic(CNick& Nick, CChan& Channel, CString& sTopic);
1521  bool OnTopicMessage(CTopicMessage& Message);
1522  bool OnTimerAutoJoin(CChan& Channel);
1523 
1524  bool OnAddNetwork(CIRCNetwork& Network, CString& sErrorRet);
1525  bool OnDeleteNetwork(CIRCNetwork& Network);
1526 
1527  bool OnSendToClient(CString& sLine, CClient& Client);
1528  bool OnSendToClientMessage(CMessage& Message);
1529  bool OnSendToIRC(CString& sLine);
1530  bool OnSendToIRCMessage(CMessage& Message);
1531 
1532  bool OnServerCapAvailable(const CString& sCap);
1533  bool OnServerCapResult(const CString& sCap, bool bSuccess);
1534 
1535  CModule* FindModule(const CString& sModule) const;
1536  bool LoadModule(const CString& sModule, const CString& sArgs,
1537  CModInfo::EModuleType eType, CUser* pUser,
1538  CIRCNetwork* pNetwork, CString& sRetMsg);
1539  bool UnloadModule(const CString& sModule);
1540  bool UnloadModule(const CString& sModule, CString& sRetMsg);
1541  bool ReloadModule(const CString& sModule, const CString& sArgs,
1542  CUser* pUser, CIRCNetwork* pNetwork, CString& sRetMsg);
1543 
1544  static bool GetModInfo(CModInfo& ModInfo, const CString& sModule,
1545  CString& sRetMsg);
1546  static bool GetModPathInfo(CModInfo& ModInfo, const CString& sModule,
1547  const CString& sModPath, CString& sRetMsg);
1548  static void GetAvailableMods(
1549  std::set<CModInfo>& ssMods,
1551  static void GetDefaultMods(
1552  std::set<CModInfo>& ssMods,
1554 
1555  // This returns the path to the .so and to the data dir
1556  // which is where static data (webadmin skins) are saved
1557  static bool FindModPath(const CString& sModule, CString& sModPath,
1558  CString& sDataPath);
1559  // Return a list of <module dir, data dir> pairs for directories in
1560  // which modules can be found.
1561  typedef std::queue<std::pair<CString, CString>> ModDirList;
1562  static ModDirList GetModDirs();
1563 
1564  // Global Modules
1565  bool OnAddUser(CUser& User, CString& sErrorRet);
1566  bool OnDeleteUser(CUser& User);
1567  bool OnClientConnect(CZNCSock* pSock, const CString& sHost,
1568  unsigned short uPort);
1569  bool OnLoginAttempt(std::shared_ptr<CAuthBase> Auth);
1570  bool OnFailedLogin(const CString& sUsername, const CString& sRemoteIP);
1571  bool OnUnknownUserRaw(CClient* pClient, CString& sLine);
1572  bool OnUnknownUserRawMessage(CMessage& Message);
1573  bool OnClientCapLs(CClient* pClient, SCString& ssCaps);
1574  bool IsClientCapSupported(CClient* pClient, const CString& sCap,
1575  bool bState);
1576  bool OnClientCapRequest(CClient* pClient, const CString& sCap, bool bState);
1577  bool OnModuleLoading(const CString& sModName, const CString& sArgs,
1578  CModInfo::EModuleType eType, bool& bSuccess,
1579  CString& sRetMsg);
1580  bool OnModuleUnloading(CModule* pModule, bool& bSuccess, CString& sRetMsg);
1581  bool OnGetModInfo(CModInfo& ModInfo, const CString& sModule, bool& bSuccess,
1582  CString& sRetMsg);
1583  bool OnGetAvailableMods(std::set<CModInfo>& ssMods,
1584  CModInfo::EModuleType eType);
1585  // !Global Modules
1586 
1587  private:
1588  static ModHandle OpenModule(const CString& sModule, const CString& sModPath,
1589  CModInfo& Info, CString& sRetMsg);
1590 
1591  protected:
1595 };
1596 
1597 #endif // !ZNC_MODULES_H
Definition: Message.h:266
Definition: Message.h:302
void SetArgs(const CString &s)
Definition: Modules.h:1207
Definition: User.h:37
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
Definition: Client.h:98
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
Definition: Nick.h:29
void SetPath(const CString &s)
Definition: Modules.h:303
Definition: Socket.h:75
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
Definition: Socket.h:27
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: znc.h:38
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
Definition: Client.h:37
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&#39;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&#39;s section in the web interface&#39;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
Definition: IRCSock.h:35
ModLoader m_fLoader
Definition: Modules.h:324
void(* FPTimer_t)(CModule *, CFPTimer *)
Definition: Modules.h:194
Definition: Chan.h:34
Definition: Message.h:272
Generate a grid-like output from a given input.
Definition: Utils.h:141
Definition: Query.h:29
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
Definition: ZNCString.h:673
const CString & GetModDataDir() const
Get the module&#39;s data dir.
Definition: Modules.h:1105
CString m_sDescription
Definition: Modules.h:1354
const char * pcCompileOptions
Definition: Modules.h:83