chanrec::chanrec()
{
*name = *topic = *setby = *key = 0;
- created = topicset = limit = binarymodes = 0;
+ created = topicset = limit = 0;
internal_userlist.clear();
- memset(&custom_modes,0,64);
+ memset(&modes,0,64);
}
void chanrec::SetCustomMode(char mode,bool mode_on)
{
- custom_modes[mode-65] = mode_on;
+ modes[mode-65] = mode_on;
if (!mode_on)
this->SetCustomModeParam(mode,"",false);
}
}
}
-bool chanrec::IsCustomModeSet(char mode)
+bool chanrec::IsModeSet(char mode)
{
- return custom_modes[mode-65];
+ return modes[mode-65];
}
std::string chanrec::GetModeParameter(char mode)
{
- std::map<char,char*>::iterator n = custom_mode_params.find(mode);
- if (n != custom_mode_params.end())
+ if (mode == 'k')
{
- return n->second;
+ return this->key;
+ }
+ else if (mode == 'l')
+ {
+ return ConvToStr(this->limit);
+ }
+ else
+ {
+ std::map<char,char*>::iterator n = custom_mode_params.find(mode);
+ if (n != custom_mode_params.end())
+ {
+ return n->second;
+ }
+ return "";
}
- return "";
}
long chanrec::GetUserCounter()
/* create a new one */
chanlist[cname] = new chanrec();
strlcpy(chanlist[cname]->name, cname,CHANMAX);
- chanlist[cname]->binarymodes = CM_TOPICLOCK | CM_NOEXTERNAL;
+ chanlist[cname]->modes[CM_TOPICLOCK] = chanlist[cname]->modes[CM_NOEXTERNAL] = 1;
+ //chanlist[cname]->binarymodes = CM_TOPICLOCK | CM_NOEXTERNAL;
chanlist[cname]->created = TIME;
*chanlist[cname]->topic = 0;
strlcpy(chanlist[cname]->setby, user->nick,NICKMAX-1);
}
}
}
- if (Ptr->binarymodes & CM_INVITEONLY)
+ if (Ptr->modes[CM_INVITEONLY])
{
MOD_RESULT = 0;
irc::string xname(Ptr->name);
a->channel = Ptr;
Ptr->AddUser(user);
WriteChannel(Ptr,user,"JOIN :%s",Ptr->name);
- log(DEBUG,"Sent JOIN to client");
- if (Ptr->topicset)
+ /* Major improvement by Brain - we dont need to be calculating all this pointlessly for remote users */
+ if (IS_LOCAL(user))
{
- WriteServ(user->fd,"332 %s %s :%s", user->nick, Ptr->name, Ptr->topic);
- WriteServ(user->fd,"333 %s %s %s %lu", user->nick, Ptr->name, Ptr->setby, (unsigned long)Ptr->topicset);
+ log(DEBUG,"Sent JOIN to client");
+ if (Ptr->topicset)
+ {
+ WriteServ(user->fd,"332 %s %s :%s", user->nick, Ptr->name, Ptr->topic);
+ WriteServ(user->fd,"333 %s %s %s %lu", user->nick, Ptr->name, Ptr->setby, (unsigned long)Ptr->topicset);
+ }
+ userlist(user,Ptr);
+ WriteServ(user->fd,"366 %s %s :End of /NAMES list.", user->nick, Ptr->name);
}
-
- userlist(user,Ptr);
- WriteServ(user->fd,"366 %s %s :End of /NAMES list.", user->nick, Ptr->name);
FOREACH_MOD(I_OnUserJoin,OnUserJoin(user,Ptr));
return Ptr;
}