+ if ((!show_invisible) && (i->first->IsModeSet(invisiblemode)))
+ {
+ // Member is invisible and we are not supposed to show them
+ continue;
+ }
+
+ Membership* const memb = i->second;
+
+ prefixlist.clear();
+ char prefix = memb->GetPrefixChar();
+ if (prefix)
+ prefixlist.push_back(prefix);
+ nick = i->first->nick;
+
+ ModResult res;
+ FIRST_MOD_RESULT(OnNamesListItem, res, (user, memb, prefixlist, nick));
+
+ // See if a module wants us to exclude this user from NAMES
+ if (res == MOD_RES_DENY)
+ continue;
+
+ if (list.size() + prefixlist.length() + nick.length() + 1 > maxlen)
+ {
+ // List overflowed into multiple numerics
+ user->WriteNumeric(RPL_NAMREPLY, list);
+
+ // Erase all nicks, keep the constant part
+ list.erase(pos);
+ }
+
+ list.append(prefixlist).append(nick).push_back(' ');