-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathmyinsanity.cpp
More file actions
79 lines (59 loc) · 2.39 KB
/
myinsanity.cpp
File metadata and controls
79 lines (59 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// myinsanity.cpp
// Syntax:
// /msg *myinsanity showme
#include <znc/Chan.h>
#include <znc/IRCNetwork.h>
#include <znc/Modules.h>
#include <znc/User.h>
#include <set>
class CMyInsanity : public CModule {
public:
MODCONSTRUCTOR(CMyInsanity) {}
~CMyInsanity() override {}
bool OnLoad(const CString& sArgs, CString& sMessage) override {
return true;
}
void OnModCommand(const CString& sCommand) override {
if (sCommand.Equals("showme", CString::CaseInsensitive)) {
size_t totalChannels = 0;
size_t totalUniqueNicks = 0;
size_t totalNetworks = 0;
size_t powerChannels = 0;
size_t powerUsers = 0;
CUser* pUser = GetUser();
if (!pUser) {
PutModule("Error: No user found!");
return;
}
const std::vector<CIRCNetwork*>& networks = pUser->GetNetworks();
totalNetworks = networks.size();
for (CIRCNetwork* pNetwork : networks) {
if (!pNetwork) continue;
std::set<CString> uniqueNicks;
const std::vector<CChan*>& channels = pNetwork->GetChans();
for (CChan* pChannel : channels) {
if (!pChannel) continue;
totalChannels++;
const std::map<CString, CNick>& nicks = pChannel->GetNicks();
for (const auto& nickPair : nicks) {
uniqueNicks.insert(nickPair.second.GetNick());
}
if (pChannel->HasPerm('~') || pChannel->HasPerm('&') ||
pChannel->HasPerm('@') || pChannel->HasPerm('%')) {
powerChannels++;
powerUsers += pChannel->GetNickCount();
}
}
totalUniqueNicks += uniqueNicks.size();
}
PutModule("I see " + CString(totalUniqueNicks) +
" unique nicks in " + CString(totalChannels) +
" channels on " + CString(totalNetworks) +
" networks and have power over " + CString(powerUsers) +
" users in " + CString(powerChannels) + " channels.");
} else {
PutModule("Unknown command. Use 'showme'");
}
}
};
USERMODULEDEFS(CMyInsanity, "Counts users, channels, and networks")