/* compile a userlist of a channel into a string, each nick seperated by
* spaces and op, voice etc status shown as @ and +, and send it to 'user'
*/
-void chanrec::UserList(userrec *user)
+void chanrec::UserList(userrec *user, CUList *ulist)
{
char list[MAXBUF];
size_t dlen, curlen;
if (!IS_LOCAL(user))
return;
- FOREACH_RESULT(I_OnUserList,OnUserList(user, this));
+ FOREACH_RESULT(I_OnUserList,OnUserList(user, this, ulist));
if (MOD_RESULT == 1)
return;
int numusers = 0;
char* ptr = list + dlen;
- CUList *ulist= this->GetUsers();
+ if (!ulist)
+ ulist = this->GetUsers();
/* Improvement by Brain - this doesnt change in value, so why was it inside
* the loop?
continue;
}
+ if (i->second->Visibility && !i->second->Visibility->VisibleTo(user))
+ continue;
+
size_t ptrlen = snprintf(ptr, MAXBUF, "%s%s ", this->GetPrefixChar(i->second), i->second->nick);
curlen += ptrlen;