created = topicset = limit = 0;
internal_userlist.clear();
memset(&modes,0,64);
+ age = ServerInstance->Time(true);
}
void chanrec::SetMode(char mode,bool mode_on)
}
if (Ptr->bans.size())
{
- char mask[MAXBUF];
- snprintf(mask, MAXBUF, "%s!%s@%s",user->nick, user->ident, user->GetIPString());
if (Ptr->IsBanned(user))
{
user->WriteServ("474 %s %s :Cannot join channel (You're banned)",user->nick, Ptr->name);
chanrec* chanrec::ForceChan(InspIRCd* Instance, chanrec* Ptr,ucrec *a,userrec* user, const std::string &privs)
{
+ userrec* dummyuser = new userrec(Instance);
+ std::string nick = user->nick;
+
a->uc_modes = 0;
+ dummyuser->SetFd(FD_MAGIC_NUMBER);
+
+ a->channel = Ptr;
+ Ptr->AddUser(user);
+ user->ModChannelCount(1);
for (std::string::const_iterator x = privs.begin(); x != privs.end(); x++)
{
const char status = *x;
- switch (status)
- {
- case '@':
- a->uc_modes |= UCMODE_OP;
- break;
- case '%':
- a->uc_modes |= UCMODE_HOP;
- break;
- case '+':
- a->uc_modes |= UCMODE_VOICE;
- break;
- }
ModeHandler* mh = Instance->Modes->FindPrefix(status);
if (mh)
{
Ptr->SetPrefix(user, status, mh->GetPrefixRank(), true);
+ /* Make sure that the mode handler knows this mode was now set */
+ mh->OnModeChange(dummyuser, dummyuser, Ptr, nick, true);
}
}
- a->channel = Ptr;
- Ptr->AddUser(user);
- user->ModChannelCount(1);
+ delete dummyuser;
+
Ptr->WriteChannel(user,"JOIN :%s",Ptr->name);
/* Theyre not the first ones in here, make sure everyone else sees the modes we gave the user */
Ptr->UserList(user);
}
FOREACH_MOD_I(Instance,I_OnUserJoin,OnUserJoin(user,Ptr));
+ FOREACH_MOD_I(Instance,I_OnPostJoin,OnPostJoin(user,Ptr));
return Ptr;
}
n->second.erase(x);
}
}
+ ServerInstance->Log(DEBUG,"Added prefix %c to %s for %s, prefixlist size is now %d", prefix, this->name, user->nick, prefixes.size());
}
void chanrec::RemoveAllPrefixes(userrec* user)
{
prefixlist::iterator n = prefixes.find(user);
if (n != prefixes.end())
+ {
+ ServerInstance->Log(DEBUG,"Removed prefixes from %s for %s, prefixlist size is now %d", this->name, user->nick, prefixes.size());
prefixes.erase(n);
+ }
}