summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/channels.cpp16
-rw-r--r--src/modules/m_namesx.cpp2
-rw-r--r--src/modules/m_uhnames.cpp30
3 files changed, 22 insertions, 26 deletions
diff --git a/src/channels.cpp b/src/channels.cpp
index a0c9a0304..8211b3564 100644
--- a/src/channels.cpp
+++ b/src/channels.cpp
@@ -838,13 +838,15 @@ void Channel::UserList(User *user, CUList *ulist)
char list[MAXBUF];
size_t dlen, curlen;
int MOD_RESULT = 0;
+ bool call_modules = true;
if (!IS_LOCAL(user))
return;
FOREACH_RESULT(I_OnUserList,OnUserList(user, this, ulist));
if (MOD_RESULT == 1)
- return;
+ call_modules = false;
+
if (MOD_RESULT != -1)
{
if ((this->IsModeSet('s')) && (!this->HasUser(user)))
@@ -883,11 +885,15 @@ void Channel::UserList(User *user, CUList *ulist)
std::string prefixlist = this->GetPrefixChar(i->first);
std::string nick = i->first->nick;
- FOREACH_MOD(I_OnNamesListItem, OnNamesListItem(user, i->first, this, prefixlist, nick));
- /* Nick was nuked, a module wants us to skip it */
- if (nick.empty())
- continue;
+ if (call_modules)
+ {
+ FOREACH_MOD(I_OnNamesListItem, OnNamesListItem(user, i->first, this, prefixlist, nick));
+
+ /* Nick was nuked, a module wants us to skip it */
+ if (nick.empty())
+ continue;
+ }
size_t ptrlen = snprintf(ptr, MAXBUF, "%s%s ", prefixlist.c_str(), nick.c_str());
diff --git a/src/modules/m_namesx.cpp b/src/modules/m_namesx.cpp
index 3ce1b00eb..d4e5def63 100644
--- a/src/modules/m_namesx.cpp
+++ b/src/modules/m_namesx.cpp
@@ -16,7 +16,7 @@
static const char* dummy = "ON";
-/* $ModDesc: Provides aliases of commands. */
+/* $ModDesc: Provides the NAMESX (CAP multi-prefix) capability. */
class ModuleNamesX : public Module
{
diff --git a/src/modules/m_uhnames.cpp b/src/modules/m_uhnames.cpp
index dddf45591..b56ed5229 100644
--- a/src/modules/m_uhnames.cpp
+++ b/src/modules/m_uhnames.cpp
@@ -15,7 +15,7 @@
static const char* dummy = "ON";
-/* $ModDesc: Provides aliases of commands. */
+/* $ModDesc: Provides the UHNAMES facility. */
class ModuleUHNames : public Module
{
@@ -25,11 +25,10 @@ class ModuleUHNames : public Module
ModuleUHNames(InspIRCd* Me)
: Module(Me)
{
- Implementation eventlist[] = { I_OnSyncUserMetaData, I_OnPreCommand, I_OnUserList, I_On005Numeric };
+ Implementation eventlist[] = { I_OnSyncUserMetaData, I_OnPreCommand, I_OnNamesListItem, I_On005Numeric };
ServerInstance->Modules->Attach(eventlist, this, 4);
}
-
virtual ~ModuleUHNames()
{
}
@@ -50,12 +49,6 @@ class ModuleUHNames : public Module
output.append(" UHNAMES");
}
- void Prioritize()
- {
- Module* namesx = ServerInstance->Modules->Find("m_namesx.so");
- ServerInstance->Modules->SetPriority(this, I_OnUserList, PRIO_BEFORE, &namesx);
- }
-
virtual int OnPreCommand(const std::string &command, const char* const* parameters, int pcnt, User *user, bool validated, const std::string &original_line)
{
irc::string c = command.c_str();
@@ -75,19 +68,16 @@ class ModuleUHNames : public Module
return 0;
}
- /* IMPORTANT: This must be prioritized above NAMESX! */
- virtual int OnUserList(User* user, Channel* Ptr, CUList* &ulist)
+ virtual void OnNamesListItem(User* issuer, User* user, Channel* channel, std::string &prefixes, std::string &nick)
{
- if (user->GetExt("UHNAMES"))
- {
- if (!ulist)
- ulist = Ptr->GetUsers();
+ if (!issuer->GetExt("UHNAMES"))
+ return;
- for (CUList::iterator i = ulist->begin(); i != ulist->end(); i++)
- i->second = i->first->GetFullHost();
- }
- return 0;
- }
+ if (nick.empty())
+ return;
+
+ nick = user->GetFullHost();
+ }
};
MODULE_INIT(ModuleUHNames)