(*(ServerInstance->chanlist))[cname.c_str()] = this;
strlcpy(this->name, cname.c_str(), CHANMAX);
- this->created = ts ? ts : ServerInstance->Time(true);
+ this->created = ts ? ts : ServerInstance->Time();
this->age = this->created;
if (!IS_LOCAL(user))
{
if (!TS)
- Instance->Log(DEBUG,"*** BUG *** Channel::JoinUser called for REMOTE user '%s' on channel '%s' but no TS given!", user->nick, cn);
+ Instance->Logs->Log("CHANNEL",DEBUG,"*** BUG *** Channel::JoinUser called for REMOTE user '%s' on channel '%s' but no TS given!", user->nick, cn);
}
else
{
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)))
if (i->first->Visibility && !i->first->Visibility->VisibleTo(user))
continue;
- size_t ptrlen = snprintf(ptr, MAXBUF, "%s%s ", this->GetPrefixChar(i->first), i->second.c_str());
- /* OnUserList can change this - reset it back to normal */
- i->second = i->first->nick;
+ std::string prefixlist = this->GetPrefixChar(i->first);
+ std::string nick = i->first->nick;
+
+ 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());
curlen += ptrlen;
ptr += ptrlen;