char* ModeParser::Grant(userrec *d,chanrec *chan,int MASK)
{
- for (unsigned int i = 0; i < d->chans.size(); i++)
+ if (!chan)
+ return NULL;
+
+ for (std::vector<ucrec*>::const_iterator i = d->chans.begin(); i != d->chans.end(); i++)
{
- if ((d->chans[i].channel != NULL) && (chan != NULL))
- if (d->chans[i].channel == chan)
+ if (((ucrec*)(*i))->channel == chan)
{
- if (d->chans[i].uc_modes & MASK)
+ if (((ucrec*)(*i))->uc_modes & MASK)
{
return NULL;
}
- d->chans[i].uc_modes = d->chans[i].uc_modes | MASK;
+ ((ucrec*)(*i))->uc_modes = ((ucrec*)(*i))->uc_modes | MASK;
switch (MASK)
{
case UCMODE_OP:
- d->chans[i].channel->AddOppedUser(d);
+ ((ucrec*)(*i))->channel->AddOppedUser(d);
break;
case UCMODE_HOP:
- d->chans[i].channel->AddHalfoppedUser(d);
+ ((ucrec*)(*i))->channel->AddHalfoppedUser(d);
break;
case UCMODE_VOICE:
- d->chans[i].channel->AddVoicedUser(d);
+ ((ucrec*)(*i))->channel->AddVoicedUser(d);
break;
}
- log(DEBUG,"grant: %s %s",d->chans[i].channel->name,d->nick);
+ log(DEBUG,"grant: %s %s",((ucrec*)(*i))->channel->name,d->nick);
return d->nick;
}
}
char* ModeParser::Revoke(userrec *d,chanrec *chan,int MASK)
{
- for (unsigned int i = 0; i < d->chans.size(); i++)
+ if (!chan)
+ return NULL;
+
+ for (std::vector<ucrec*>::const_iterator i = d->chans.begin(); i != d->chans.end(); i++)
{
- if ((d->chans[i].channel != NULL) && (chan != NULL))
- if (d->chans[i].channel == chan)
+ if (((ucrec*)(*i))->channel == chan)
{
- if ((d->chans[i].uc_modes & MASK) == 0)
+ if ((((ucrec*)(*i))->uc_modes & MASK) == 0)
{
return NULL;
}
- d->chans[i].uc_modes ^= MASK;
+ ((ucrec*)(*i))->uc_modes ^= MASK;
switch (MASK)
{
case UCMODE_OP:
- d->chans[i].channel->DelOppedUser(d);
+ ((ucrec*)(*i))->channel->DelOppedUser(d);
break;
case UCMODE_HOP:
- d->chans[i].channel->DelHalfoppedUser(d);
+ ((ucrec*)(*i))->channel->DelHalfoppedUser(d);
break;
case UCMODE_VOICE:
- d->chans[i].channel->DelVoicedUser(d);
+ ((ucrec*)(*i))->channel->DelVoicedUser(d);
break;
}
- log(DEBUG,"revoke: %s %s",d->chans[i].channel->name,d->nick);
+ log(DEBUG,"revoke: %s %s",((ucrec*)(*i))->channel->name,d->nick);
return d->nick;
}
}
{
charlcat(dmodes,*i,53);
charlcat(outpars,*i,MAXMODES);
- if (*i == 'o')
+ switch (*i)
{
- FOREACH_MOD(I_OnGlobalOper,OnGlobalOper(dest));
+ case 'o':
+ FOREACH_MOD(I_OnGlobalOper,OnGlobalOper(dest));
+ break;
+ case 'i':
+ dest->modebits |= UM_INVISIBLE;
+ break;
+ case 's':
+ dest->modebits |= UM_SERVERNOTICE;
+ break;
+ case 'w':
+ dest->modebits |= UM_WALLOPS;
+ break;
+ default:
+ break;
}
}
}
{
charlcat(outpars,*i,MAXMODES);
charremove(dmodes,*i);
- if (*i == 'o')
+ switch (*i)
{
- *dest->oper = 0;
- DeleteOper(dest);
+ case 'o':
+ *dest->oper = 0;
+ DeleteOper(dest);
+ break;
+ case 'i':
+ dest->modebits &= ~UM_INVISIBLE;
+ break;
+ case 's':
+ dest->modebits &= ~UM_SERVERNOTICE;
+ break;
+ case 'w':
+ dest->modebits &= ~UM_WALLOPS;
+ break;
+ default:
+ break;
}
}
}
if (pcnt == 1)
{
/* just /modes #channel */
- WriteServ(user->fd,"324 %s %s +%s",user->nick, Ptr->name, chanmodes(Ptr,has_channel(user,Ptr)));
+ WriteServ(user->fd,"324 %s %s +%s",user->nick, Ptr->name, chanmodes(Ptr,Ptr->HasUser(user)));
WriteServ(user->fd,"329 %s %s %d", user->nick, Ptr->name, Ptr->created);
return;
}
}
}
- if (((Ptr) && (!has_channel(user,Ptr))) && (!is_uline(user->server)) && (IS_LOCAL(user)))
+ if ((IS_LOCAL(user)) && (!is_uline(user->server)) && (!Ptr->HasUser(user)))
{
WriteServ(user->fd,"442 %s %s :You're not on that channel!",user->nick, Ptr->name);
return;
return;
if (MOD_RESULT == ACR_DEFAULT)
{
- if ((cstatus(user,Ptr) < STATUS_HOP) && (IS_LOCAL(user)))
+ if ((IS_LOCAL(user)) && (cstatus(user,Ptr) < STATUS_HOP))
{
WriteServ(user->fd,"482 %s %s :You must be at least a half-operator to change modes on this channel",user->nick, Ptr->name);
return;