diff options
-rw-r--r-- | include/channels.h | 8 | ||||
-rw-r--r-- | include/membership.h | 7 | ||||
-rw-r--r-- | src/channels.cpp | 14 | ||||
-rw-r--r-- | src/modules/m_check.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_deaf.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_httpd_stats.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_namesx.cpp | 4 |
7 files changed, 17 insertions, 22 deletions
diff --git a/include/channels.h b/include/channels.h index daf8be9e2..9b018b23e 100644 --- a/include/channels.h +++ b/include/channels.h @@ -304,14 +304,6 @@ class CoreExport Channel : public Extensible, public InviteBase<Channel> */ void UserList(User *user); - /** Return all of a users mode prefixes into a char* string. - * @param user The user to look up - * @return A list of all prefix characters. The prefixes will always - * be in rank order, greatest first, as certain IRC clients require - * this when multiple prefixes are used names lists. - */ - const char* GetAllPrefixChars(User* user); - /** Get the value of a users prefix on this channel. * @param user The user to look up * @return The module or core-defined value of the users prefix. diff --git a/include/membership.h b/include/membership.h index c6b0bf14a..44eaf1eb6 100644 --- a/include/membership.h +++ b/include/membership.h @@ -52,6 +52,13 @@ class CoreExport Membership : public Extensible, public intrusive_list_node<Memb * prefixes, using GetPrefixValue(). */ char GetPrefixChar() const; + + /** Return all prefix chars this member has. + * @return A list of all prefix characters. The prefixes will always + * be in rank order, greatest first, as certain IRC clients require + * this when multiple prefixes are used names lists. + */ + const char* GetAllPrefixChars() const; }; template <typename T> diff --git a/src/channels.cpp b/src/channels.cpp index c47bcb119..a8f8db43c 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -756,20 +756,16 @@ unsigned int Membership::getRank() return rv; } -const char* Channel::GetAllPrefixChars(User* user) +const char* Membership::GetAllPrefixChars() const { static char prefix[64]; int ctr = 0; - UserMembIter m = userlist.find(user); - if (m != userlist.end()) + for (std::string::const_iterator i = modes.begin(); i != modes.end(); ++i) { - for(unsigned int i=0; i < m->second->modes.length(); i++) - { - PrefixMode* mh = ServerInstance->Modes->FindPrefixMode(m->second->modes[i]); - if (mh && mh->GetPrefix()) - prefix[ctr++] = mh->GetPrefix(); - } + PrefixMode* mh = ServerInstance->Modes->FindPrefixMode(*i); + if (mh && mh->GetPrefix()) + prefix[ctr++] = mh->GetPrefix(); } prefix[ctr] = 0; diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp index 1fa7aa3e2..ba20f9445 100644 --- a/src/modules/m_check.cpp +++ b/src/modules/m_check.cpp @@ -232,7 +232,7 @@ class CommandCheck : public Command */ user->SendText("%s member %-3lu %s%s (%s@%s) %s ", checkstr.c_str(), ServerInstance->Users->GlobalCloneCount(i->first), - targchan->GetAllPrefixChars(i->first), i->first->nick.c_str(), + i->second->GetAllPrefixChars(), i->first->nick.c_str(), i->first->ident.c_str(), i->first->dhost.c_str(), i->first->fullname.c_str()); } diff --git a/src/modules/m_deaf.cpp b/src/modules/m_deaf.cpp index ce6571b8c..9800b32a9 100644 --- a/src/modules/m_deaf.cpp +++ b/src/modules/m_deaf.cpp @@ -94,7 +94,7 @@ class ModuleDeaf : public Module if (is_bypasschar && !is_a_uline) continue; /* deliver message */ - if (status && !strchr(chan->GetAllPrefixChars(i->first), status)) + if (status && !strchr(i->second->GetAllPrefixChars(), status)) continue; /* don't deliver message! */ diff --git a/src/modules/m_httpd_stats.cpp b/src/modules/m_httpd_stats.cpp index 065ba0bce..8a90074a9 100644 --- a/src/modules/m_httpd_stats.cpp +++ b/src/modules/m_httpd_stats.cpp @@ -168,7 +168,7 @@ class ModuleHttpStats : public Module { Membership* memb = x->second; data << "<channelmember><uid>" << memb->user->uuid << "</uid><privs>" - << Sanitize(c->GetAllPrefixChars(x->first)) << "</privs><modes>" + << Sanitize(memb->GetAllPrefixChars()) << "</privs><modes>" << memb->modes << "</modes>"; DumpMeta(data, memb); data << "</channelmember>"; diff --git a/src/modules/m_namesx.cpp b/src/modules/m_namesx.cpp index 820963d5b..4dc5ff468 100644 --- a/src/modules/m_namesx.cpp +++ b/src/modules/m_namesx.cpp @@ -68,7 +68,7 @@ class ModuleNamesX : public Module if (nick.empty()) return; - prefixes = memb->chan->GetAllPrefixChars(memb->user); + prefixes = memb->GetAllPrefixChars(); } void OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, Membership* memb, std::string& line) CXX11_OVERRIDE @@ -91,7 +91,7 @@ class ModuleNamesX : public Module // pos // Don't do anything if the user has only one prefix - std::string prefixes = memb->chan->GetAllPrefixChars(memb->user); + std::string prefixes = memb->GetAllPrefixChars(); if (prefixes.length() <= 1) return; |