ZNC  trunk
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Chan.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2004-2014 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 _CHAN_H
18 #define _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, CConfig *pConfig = NULL);
60  ~CChan();
61 
62  void Reset();
63  CConfig ToConfig();
64  void Clone(CChan& chan);
65  void Cycle() const;
66  void JoinUser(bool bForce = false, const CString& sKey = "", CClient* pClient = NULL);
67  void DetachUser();
68  void AttachUser();
69 
70  void OnWho(const CString& sNick, const CString& sIdent, const CString& sHost);
71 
72  // Modes
73  void SetModes(const CString& s);
74  void ModeChange(const CString& sModes, const CNick* OpNick = NULL);
75  bool AddMode(unsigned char uMode, const CString& sArg);
76  bool RemMode(unsigned char uMode);
77  CString GetModeString() const;
78  CString GetModeArg(CString& sArgs) const;
79  CString GetModeForNames() const;
80  // !Modes
81 
82  // Nicks
83  void ClearNicks();
84  const CNick* FindNick(const CString& sNick) const;
85  CNick* FindNick(const CString& sNick);
86  int AddNicks(const CString& sNicks);
87  bool AddNick(const CString& sNick);
88  bool RemNick(const CString& sNick);
89  bool ChangeNick(const CString& sOldNick, const CString& sNewNick);
90  // !Nicks
91 
92  // Buffer
93  const CBuffer& GetBuffer() const { return m_Buffer; }
94  unsigned int GetBufferCount() const { return m_Buffer.GetLineCount(); }
95  bool SetBufferCount(unsigned int u, bool bForce = false) { return m_Buffer.SetLineCount(u, bForce); };
96  size_t AddBuffer(const CString& sFormat, const CString& sText = "", const timeval* ts = NULL) { return m_Buffer.AddLine(sFormat, sText, ts); }
97  void ClearBuffer() { m_Buffer.Clear(); }
98  void SendBuffer(CClient* pClient);
99  void SendBuffer(CClient* pClient, const CBuffer& Buffer);
100  // !Buffer
101 
102  // m_Nick wrappers
103  CString GetPermStr() const { return m_Nick.GetPermStr(); }
104  bool HasPerm(unsigned char uPerm) const { return m_Nick.HasPerm(uPerm); }
105  bool AddPerm(unsigned char uPerm) { return m_Nick.AddPerm(uPerm); }
106  bool RemPerm(unsigned char uPerm) { return m_Nick.RemPerm(uPerm); }
107  // !wrappers
108 
109  // Setters
110  void SetModeKnown(bool b) { m_bModeKnown = b; }
111  void SetIsOn(bool b) { m_bIsOn = b; if (!b) { Reset(); } }
112  void SetKey(const CString& s) { m_sKey = s; }
113  void SetTopic(const CString& s) { m_sTopic = s; }
114  void SetTopicOwner(const CString& s) { m_sTopicOwner = s; }
115  void SetTopicDate(unsigned long u) { m_ulTopicDate = u; }
116  void SetDefaultModes(const CString& s) { m_sDefaultModes = s; }
117  void SetAutoClearChanBuffer(bool b);
118  void SetDetached(bool b = true) { m_bDetached = b; }
119  void SetInConfig(bool b) { m_bInConfig = b; }
120  void SetCreationDate(unsigned long u) { m_ulCreationDate = u; }
121  void Disable() { m_bDisabled = true; }
122  void Enable();
124  void ResetJoinTries() { m_uJoinTries = 0; }
125  // !Setters
126 
127  // Getters
128  bool IsModeKnown() const { return m_bModeKnown; }
129  bool HasMode(unsigned char uMode) const;
130  CString GetOptions() const;
131  CString GetModeArg(unsigned char uMode) const;
132  std::map<char, unsigned int> GetPermCounts() const;
133  bool IsOn() const { return m_bIsOn; }
134  const CString& GetName() const { return m_sName; }
135  const std::map<unsigned char, CString>& GetModes() const { return m_musModes; }
136  const CString& GetKey() const { return m_sKey; }
137  const CString& GetTopic() const { return m_sTopic; }
138  const CString& GetTopicOwner() const { return m_sTopicOwner; }
139  unsigned long GetTopicDate() const { return m_ulTopicDate; }
140  const CString& GetDefaultModes() const { return m_sDefaultModes; }
141  const std::map<CString,CNick>& GetNicks() const { return m_msNicks; }
142  size_t GetNickCount() const { return m_msNicks.size(); }
144  bool IsDetached() const { return m_bDetached; }
145  bool InConfig() const { return m_bInConfig; }
146  unsigned long GetCreationDate() const { return m_ulCreationDate; }
147  bool IsDisabled() const { return m_bDisabled; }
148  unsigned int GetJoinTries() const { return m_uJoinTries; }
149  // !Getters
150 private:
151 protected:
153  bool m_bIsOn;
161  unsigned long m_ulTopicDate;
162  unsigned long m_ulCreationDate;
165  unsigned int m_uJoinTries;
167  std::map<CString,CNick> m_msNicks; // Todo: make this caseless (irc style)
169 
171  std::map<unsigned char, CString> m_musModes;
172 };
173 
174 #endif // !_CHAN_H
CChan(const CString &sName, CIRCNetwork *pNetwork, bool bInConfig, CConfig *pConfig=NULL)
void SetModeKnown(bool b)
Definition: Chan.h:110
Definition: Chan.h:37
void SendBuffer(CClient *pClient)
Definition: User.h:37
bool RemPerm(unsigned char uPerm)
void Clone(CChan &chan)
bool m_bDisabled
Definition: Chan.h:156
void SetDefaultModes(const CString &s)
Definition: Chan.h:116
std::map< unsigned char, CString > m_musModes
Definition: Chan.h:171
int AddNicks(const CString &sNicks)
EUserPerms
Definition: Chan.h:36
const std::map< CString, CNick > & GetNicks() const
Definition: Chan.h:141
bool m_bAutoClearChanBuffer
Definition: Chan.h:154
void SetTopicOwner(const CString &s)
Definition: Chan.h:114
CString m_sTopic
Definition: Chan.h:159
bool IsModeKnown() const
Definition: Chan.h:128
const CString & GetDefaultModes() const
Definition: Chan.h:140
CString GetPermStr() const
Definition: Chan.h:103
Definition: Chan.h:53
bool HasMode(unsigned char uMode) const
Definition: Chan.h:52
void ModeChange(const CString &sModes, const CNick *OpNick=NULL)
void AttachUser()
bool AddMode(unsigned char uMode, const CString &sArg)
void SetKey(const CString &s)
Definition: Chan.h:112
Definition: Client.h:84
Definition: Chan.h:45
void SetInConfig(bool b)
Definition: Chan.h:119
const CBuffer & GetBuffer() const
Definition: Chan.h:93
Definition: Chan.h:51
void Clear()
Definition: Buffer.h:71
void SetModes(const CString &s)
CIRCNetwork * m_pNetwork
Definition: Chan.h:163
unsigned long GetCreationDate() const
Definition: Chan.h:146
unsigned long m_ulTopicDate
Definition: Chan.h:161
bool RemNick(const CString &sNick)
const CString & GetName() const
Definition: Chan.h:134
Definition: Nick.h:29
bool m_bInConfig
Definition: Chan.h:155
const CNick * FindNick(const CString &sNick) const
unsigned int GetJoinTries() const
Definition: Chan.h:148
Definition: Chan.h:48
unsigned long GetTopicDate() const
Definition: Chan.h:139
std::map< char, unsigned int > GetPermCounts() const
void OnWho(const CString &sNick, const CString &sIdent, const CString &sHost)
size_t AddBuffer(const CString &sFormat, const CString &sText="", const timeval *ts=NULL)
Definition: Chan.h:96
bool RemMode(unsigned char uMode)
void SetIsOn(bool b)
Definition: Chan.h:111
bool AddNick(const CString &sNick)
Definition: Chan.h:47
void JoinUser(bool bForce=false, const CString &sKey="", CClient *pClient=NULL)
unsigned int m_uJoinTries
Definition: Chan.h:165
bool InConfig() const
Definition: Chan.h:145
std::map< CString, CNick > m_msNicks
Definition: Chan.h:167
void ClearBuffer()
Definition: Chan.h:97
CString GetOptions() const
Definition: FileUtils.h:30
const CString & GetTopic() const
Definition: Chan.h:137
CString m_sName
Definition: Chan.h:157
Definition: IRCNetwork.h:36
CBuffer m_Buffer
Definition: Chan.h:168
String class that is used inside ZNC.
Definition: ZNCString.h:67
Definition: Chan.h:46
Definition: Chan.h:54
void SetCreationDate(unsigned long u)
Definition: Chan.h:120
bool SetLineCount(unsigned int u, bool bForce=false)
bool IsDisabled() const
Definition: Chan.h:147
CString m_sTopicOwner
Definition: Chan.h:160
bool AutoClearChanBuffer() const
Definition: Chan.h:143
void ResetJoinTries()
Definition: Chan.h:124
size_t GetNickCount() const
Definition: Chan.h:142
bool AddPerm(unsigned char uPerm)
CConfig ToConfig()
bool ChangeNick(const CString &sOldNick, const CString &sNewNick)
CString GetModeForNames() const
void SetTopic(const CString &s)
Definition: Chan.h:113
bool m_bDetached
Definition: Chan.h:152
CString GetModeArg(CString &sArgs) const
bool IsDetached() const
Definition: Chan.h:144
bool AddPerm(unsigned char uPerm)
Definition: Chan.h:105
bool m_bModeKnown
Definition: Chan.h:170
bool HasPerm(unsigned char uPerm) const
EModes
Definition: Chan.h:44
unsigned long m_ulCreationDate
Definition: Chan.h:162
CNick m_Nick
Definition: Chan.h:164
void Reset()
Definition: Buffer.h:56
void Disable()
Definition: Chan.h:121
Definition: Chan.h:50
void SetDetached(bool b=true)
Definition: Chan.h:118
bool HasPerm(unsigned char uPerm) const
Definition: Chan.h:104
CString m_sKey
Definition: Chan.h:158
const std::map< unsigned char, CString > & GetModes() const
Definition: Chan.h:135
bool SetBufferCount(unsigned int u, bool bForce=false)
Definition: Chan.h:95
void Enable()
CString m_sDefaultModes
Definition: Chan.h:166
bool RemPerm(unsigned char uPerm)
Definition: Chan.h:106
void DetachUser()
const CString & GetKey() const
Definition: Chan.h:136
Definition: Chan.h:56
void Cycle() const
const CString & GetTopicOwner() const
Definition: Chan.h:138
CString GetPermStr() const
size_type AddLine(const CString &sFormat, const CString &sText="", const timeval *ts=0)
Definition: Chan.h:39
bool IsOn() const
Definition: Chan.h:133
Definition: Chan.h:38
unsigned int GetLineCount() const
Definition: Buffer.h:78
void SetTopicDate(unsigned long u)
Definition: Chan.h:115
Definition: Chan.h:40
Definition: Chan.h:55
bool m_bIsOn
Definition: Chan.h:153
unsigned int GetBufferCount() const
Definition: Chan.h:94
Definition: Chan.h:41
void SetAutoClearChanBuffer(bool b)
Definition: Chan.h:34
void IncJoinTries()
Definition: Chan.h:123
Definition: Config.h:36
Definition: Chan.h:49
CString GetModeString() const
void ClearNicks()