ZNC
Versions: latest readthedocs-test
Chan.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_CHAN_H
18 #define ZNC_CHAN_H
19 
20 #include <znc/zncconfig.h>
21 #include <znc/Nick.h>
22 #include <znc/ZNCString.h>
23 #include <znc/Buffer.h>
24 #include <map>
25 
26 // Forward Declarations
27 class CUser;
28 class CIRCNetwork;
29 class CClient;
30 class CConfig;
31 class CFile;
32 // !Forward Declarations
33 
34 class CChan {
35  public:
36  typedef enum {
37  Voice = '+',
38  HalfOp = '%',
39  Op = '@',
40  Admin = '!',
41  Owner = '*'
42  } EUserPerms;
43 
44  typedef enum {
45  M_Private = 'p',
46  M_Secret = 's',
47  M_Moderated = 'm',
48  M_InviteOnly = 'i',
49  M_NoMessages = 'n',
50  M_OpTopic = 't',
51  M_Limit = 'l',
52  M_Key = 'k',
53  M_Op = 'o',
54  M_Voice = 'v',
55  M_Ban = 'b',
56  M_Except = 'e'
57  } EModes;
58 
59  CChan(const CString& sName, CIRCNetwork* pNetwork, bool bInConfig,
60  CConfig* pConfig = nullptr);
61  ~CChan();
62 
63  CChan(const CChan&) = delete;
64  CChan& operator=(const CChan&) = delete;
65 
66  void Reset();
67  CConfig ToConfig() const;
68  void Clone(CChan& chan);
69  void Cycle() const;
70  void JoinUser(const CString& sKey = "");
71  void AttachUser(CClient* pClient = nullptr);
72  void DetachUser();
73 
74  void OnWho(const CString& sNick, const CString& sIdent,
75  const CString& sHost);
76 
77  // Modes
78  void SetModes(const CString& s);
79  void ModeChange(const CString& sModes, const CNick* OpNick = nullptr);
80  bool AddMode(unsigned char uMode, const CString& sArg);
81  bool RemMode(unsigned char uMode);
82  CString GetModeString() const;
83  CString GetModeArg(CString& sArgs) const;
84  CString GetModeForNames() const;
85  // !Modes
86 
87  // Nicks
88  void ClearNicks();
89  const CNick* FindNick(const CString& sNick) const;
90  CNick* FindNick(const CString& sNick);
91  int AddNicks(const CString& sNicks);
92  bool AddNick(const CString& sNick);
93  bool RemNick(const CString& sNick);
94  bool ChangeNick(const CString& sOldNick, const CString& sNewNick);
95  // !Nicks
96 
97  // Buffer
98  const CBuffer& GetBuffer() const { return m_Buffer; }
99  unsigned int GetBufferCount() const { return m_Buffer.GetLineCount(); }
100  bool SetBufferCount(unsigned int u, bool bForce = false) {
101  m_bHasBufferCountSet = true;
102  return m_Buffer.SetLineCount(u, bForce);
103  }
104  void InheritBufferCount(unsigned int u, bool bForce = false) {
105  if (!m_bHasBufferCountSet) m_Buffer.SetLineCount(u, bForce);
106  }
107  void ResetBufferCount();
108  size_t AddBuffer(const CMessage& Format, const CString& sText = "") {
109  return m_Buffer.AddLine(Format, sText);
110  }
112  size_t AddBuffer(const CString& sFormat, const CString& sText = "",
113  const timeval* ts = nullptr,
114  const MCString& mssTags = MCString::EmptyMap) {
115  return m_Buffer.AddLine(sFormat, sText, ts, mssTags);
116  }
117  void ClearBuffer() { m_Buffer.Clear(); }
118  void SendBuffer(CClient* pClient);
119  void SendBuffer(CClient* pClient, const CBuffer& Buffer);
120  // !Buffer
121 
122  // m_Nick wrappers
123  CString GetPermStr() const { return m_Nick.GetPermStr(); }
124  bool HasPerm(unsigned char uPerm) const { return m_Nick.HasPerm(uPerm); }
125  bool AddPerm(unsigned char uPerm) { return m_Nick.AddPerm(uPerm); }
126  bool RemPerm(unsigned char uPerm) { return m_Nick.RemPerm(uPerm); }
127  // !wrappers
128 
129  // Setters
130  void SetModeKnown(bool b) { m_bModeKnown = b; }
131  void SetIsOn(bool b) {
132  m_bIsOn = b;
133  if (!b) {
134  Reset();
135  }
136  }
137  void SetKey(const CString& s);
138  void SetTopic(const CString& s) { m_sTopic = s; }
139  void SetTopicOwner(const CString& s) { m_sTopicOwner = s; }
140  void SetTopicDate(unsigned long u) { m_ulTopicDate = u; }
141  void SetDefaultModes(const CString& s) { m_sDefaultModes = s; }
142  void SetAutoClearChanBuffer(bool b);
143  void InheritAutoClearChanBuffer(bool b);
145  void SetDetached(bool b = true) { m_bDetached = b; }
146  void SetInConfig(bool b);
147  void SetCreationDate(unsigned long u) { m_ulCreationDate = u; }
148  void Disable() { m_bDisabled = true; }
149  void Enable();
151  void ResetJoinTries() { m_uJoinTries = 0; }
152  // !Setters
153 
154  // Getters
155  CIRCNetwork* GetNetwork() const { return m_pNetwork; }
156  bool IsModeKnown() const { return m_bModeKnown; }
157  bool HasMode(unsigned char uMode) const;
158  CString GetOptions() const;
159  CString GetModeArg(unsigned char uMode) const;
160  std::map<char, unsigned int> GetPermCounts() const;
161  bool IsOn() const { return m_bIsOn; }
162  const CString& GetName() const { return m_sName; }
163  const std::map<unsigned char, CString>& GetModes() const {
164  return m_musModes;
165  }
166  const CString& GetKey() const { return m_sKey; }
167  const CString& GetTopic() const { return m_sTopic; }
168  const CString& GetTopicOwner() const { return m_sTopicOwner; }
169  unsigned long GetTopicDate() const { return m_ulTopicDate; }
170  const CString& GetDefaultModes() const { return m_sDefaultModes; }
171  const std::map<CString, CNick>& GetNicks() const { return m_msNicks; }
172  size_t GetNickCount() const { return m_msNicks.size(); }
174  bool IsDetached() const { return m_bDetached; }
175  bool InConfig() const { return m_bInConfig; }
176  unsigned long GetCreationDate() const { return m_ulCreationDate; }
177  bool IsDisabled() const { return m_bDisabled; }
178  unsigned int GetJoinTries() const { return m_uJoinTries; }
179  bool HasBufferCountSet() const { return m_bHasBufferCountSet; }
182  }
183  // !Getters
184  private:
185  protected:
187  bool m_bIsOn;
197  unsigned long m_ulTopicDate;
198  unsigned long m_ulCreationDate;
201  unsigned int m_uJoinTries;
203  std::map<CString, CNick> m_msNicks; // Todo: make this caseless (irc style)
205 
207  std::map<unsigned char, CString> m_musModes;
208 };
209 
210 #endif // !ZNC_CHAN_H
void SetModeKnown(bool b)
Definition: Chan.h:130
Definition: Chan.h:37
void ResetBufferCount()
void SendBuffer(CClient *pClient)
Definition: User.h:37
bool HasAutoClearChanBufferSet() const
Definition: Chan.h:180
bool RemPerm(unsigned char uPerm)
void Clone(CChan &chan)
bool m_bDisabled
Definition: Chan.h:190
void SetDefaultModes(const CString &s)
Definition: Chan.h:141
std::map< unsigned char, CString > m_musModes
Definition: Chan.h:207
int AddNicks(const CString &sNicks)
EUserPerms
Definition: Chan.h:36
size_t AddBuffer(const CString &sFormat, const CString &sText="", const timeval *ts=nullptr, const MCString &mssTags=MCString::EmptyMap)
Definition: Chan.h:112
bool m_bAutoClearChanBuffer
Definition: Chan.h:188
void SetTopicOwner(const CString &s)
Definition: Chan.h:139
CChan & operator=(const CChan &)=delete
CString m_sTopic
Definition: Chan.h:195
bool IsModeKnown() const
Definition: Chan.h:156
const CString & GetDefaultModes() const
Definition: Chan.h:170
CString GetPermStr() const
Definition: Chan.h:123
Definition: Chan.h:53
bool HasMode(unsigned char uMode) const
Definition: Chan.h:52
const std::map< CString, CNick > & GetNicks() const
Definition: Chan.h:171
bool AddMode(unsigned char uMode, const CString &sArg)
void SetKey(const CString &s)
Definition: Client.h:98
Definition: Chan.h:45
void SetInConfig(bool b)
const CBuffer & GetBuffer() const
Definition: Chan.h:98
Definition: Chan.h:51
void Clear()
Definition: Buffer.h:100
void SetModes(const CString &s)
CConfig ToConfig() const
CIRCNetwork * m_pNetwork
Definition: Chan.h:199
unsigned long GetCreationDate() const
Definition: Chan.h:176
unsigned long m_ulTopicDate
Definition: Chan.h:197
CIRCNetwork * GetNetwork() const
Definition: Chan.h:155
bool RemNick(const CString &sNick)
const CString & GetName() const
Definition: Chan.h:162
Definition: Nick.h:29
bool m_bInConfig
Definition: Chan.h:189
std::map< CString, CNick > m_msNicks
Definition: Chan.h:203
const CNick * FindNick(const CString &sNick) const
unsigned int GetJoinTries() const
Definition: Chan.h:178
void AttachUser(CClient *pClient=nullptr)
Definition: Chan.h:48
unsigned long GetTopicDate() const
Definition: Chan.h:169
std::map< char, unsigned int > GetPermCounts() const
void OnWho(const CString &sNick, const CString &sIdent, const CString &sHost)
bool RemMode(unsigned char uMode)
void SetIsOn(bool b)
Definition: Chan.h:131
bool AddNick(const CString &sNick)
Definition: Chan.h:47
unsigned int m_uJoinTries
Definition: Chan.h:201
bool InConfig() const
Definition: Chan.h:175
void ClearBuffer()
Definition: Chan.h:117
CString GetOptions() const
Definition: FileUtils.h:30
const CString & GetTopic() const
Definition: Chan.h:167
CString m_sName
Definition: Chan.h:193
Definition: IRCNetwork.h:40
void JoinUser(const CString &sKey="")
CBuffer m_Buffer
Definition: Chan.h:204
String class that is used inside ZNC.
Definition: ZNCString.h:68
Definition: Chan.h:46
Definition: Chan.h:54
void SetCreationDate(unsigned long u)
Definition: Chan.h:147
bool SetLineCount(unsigned int u, bool bForce=false)
bool IsDisabled() const
Definition: Chan.h:177
CString m_sTopicOwner
Definition: Chan.h:196
bool AutoClearChanBuffer() const
Definition: Chan.h:173
void ResetJoinTries()
Definition: Chan.h:151
size_t GetNickCount() const
Definition: Chan.h:172
bool AddPerm(unsigned char uPerm)
bool ChangeNick(const CString &sOldNick, const CString &sNewNick)
CString GetModeForNames() const
static const MCString EmptyMap
A static instance of an empty map.
Definition: ZNCString.h:606
void SetTopic(const CString &s)
Definition: Chan.h:138
bool m_bDetached
Definition: Chan.h:186
CString GetModeArg(CString &sArgs) const
bool IsDetached() const
Definition: Chan.h:174
bool AddPerm(unsigned char uPerm)
Definition: Chan.h:125
bool m_bModeKnown
Definition: Chan.h:206
bool HasPerm(unsigned char uPerm) const
EModes
Definition: Chan.h:44
unsigned long m_ulCreationDate
Definition: Chan.h:198
CNick m_Nick
Definition: Chan.h:200
void Reset()
Definition: Buffer.h:74
void Disable()
Definition: Chan.h:148
Definition: Chan.h:50
void SetDetached(bool b=true)
Definition: Chan.h:145
bool HasBufferCountSet() const
Definition: Chan.h:179
bool HasPerm(unsigned char uPerm) const
Definition: Chan.h:124
bool m_bHasBufferCountSet
Definition: Chan.h:191
CString m_sKey
Definition: Chan.h:194
A dictionary for strings.
Definition: ZNCString.h:595
const std::map< unsigned char, CString > & GetModes() const
Definition: Chan.h:163
size_t AddBuffer(const CMessage &Format, const CString &sText="")
Definition: Chan.h:108
bool SetBufferCount(unsigned int u, bool bForce=false)
Definition: Chan.h:100
void Enable()
CString m_sDefaultModes
Definition: Chan.h:202
bool RemPerm(unsigned char uPerm)
Definition: Chan.h:126
void DetachUser()
const CString & GetKey() const
Definition: Chan.h:166
Definition: Chan.h:56
void Cycle() const
const CString & GetTopicOwner() const
Definition: Chan.h:168
bool m_bHasAutoClearChanBufferSet
Definition: Chan.h:192
CString GetPermStr() const
void ModeChange(const CString &sModes, const CNick *OpNick=nullptr)
void ResetAutoClearChanBuffer()
Definition: Chan.h:39
void InheritBufferCount(unsigned int u, bool bForce=false)
Definition: Chan.h:104
bool IsOn() const
Definition: Chan.h:161
Definition: Chan.h:38
unsigned int GetLineCount() const
Definition: Buffer.h:107
void SetTopicDate(unsigned long u)
Definition: Chan.h:140
Definition: Chan.h:40
CChan(const CString &sName, CIRCNetwork *pNetwork, bool bInConfig, CConfig *pConfig=nullptr)
void InheritAutoClearChanBuffer(bool b)
Definition: Chan.h:55
bool m_bIsOn
Definition: Chan.h:187
unsigned int GetBufferCount() const
Definition: Chan.h:99
Definition: Chan.h:41
size_type AddLine(const CMessage &Format, const CString &sText="")
void SetAutoClearChanBuffer(bool b)
Definition: Chan.h:34
void IncJoinTries()
Definition: Chan.h:150
Definition: Config.h:36
Definition: Chan.h:49
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
CString GetModeString() const
void ClearNicks()