Update omode so that it can set +ah.
This commit is contained in:
parent
2d8ae01fa4
commit
46a30dbe86
|
@ -124,7 +124,24 @@ mo_omode(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
set_channel_mode(client_p, source_p->servptr, chptr, msptr,
|
set_channel_mode(client_p, source_p->servptr, chptr, msptr,
|
||||||
parc - 2, parv + 2);
|
parc - 2, parv + 2);
|
||||||
#else
|
#else
|
||||||
if (parc == 4 && !strcmp(parv[2], "+o") && !irccmp(parv[3], source_p->name))
|
if (parc == 4 && !strcmp(parv[2], "+a") && !irccmp(parv[3], source_p->name))
|
||||||
|
{
|
||||||
|
/* Admining themselves */
|
||||||
|
if (!wasonchannel)
|
||||||
|
{
|
||||||
|
sendto_one_numeric(source_p, ERR_USERNOTINCHANNEL,
|
||||||
|
form_str(ERR_USERNOTINCHANNEL), parv[3], chptr->chname);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +a %s",
|
||||||
|
me.name, parv[1], source_p->name);
|
||||||
|
sendto_server(NULL, chptr, CAP_TS6, NOCAPS,
|
||||||
|
":%s TMODE %ld %s +a %s",
|
||||||
|
me.id, (long) chptr->channelts, parv[1],
|
||||||
|
source_p->id);
|
||||||
|
msptr->flags |= CHFL_ADMIN;
|
||||||
|
}
|
||||||
|
else if (parc == 4 && !strcmp(parv[2], "+o") && !irccmp(parv[3], source_p->name))
|
||||||
{
|
{
|
||||||
/* Opping themselves */
|
/* Opping themselves */
|
||||||
if (!wasonchannel)
|
if (!wasonchannel)
|
||||||
|
@ -141,9 +158,47 @@ mo_omode(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
source_p->id);
|
source_p->id);
|
||||||
msptr->flags |= CHFL_CHANOP;
|
msptr->flags |= CHFL_CHANOP;
|
||||||
}
|
}
|
||||||
else
|
else if (parc == 4 && !strcmp(parv[2], "+h") && !irccmp(parv[3], source_p->name))
|
||||||
|
{
|
||||||
|
/* Halfopping themselves */
|
||||||
|
if (!wasonchannel)
|
||||||
|
{
|
||||||
|
sendto_one_numeric(source_p, ERR_USERNOTINCHANNEL,
|
||||||
|
form_str(ERR_USERNOTINCHANNEL), parv[3], chptr->chname);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +h %s",
|
||||||
|
me.name, parv[1], source_p->name);
|
||||||
|
sendto_server(NULL, chptr, CAP_TS6, NOCAPS,
|
||||||
|
":%s TMODE %ld %s +h %s",
|
||||||
|
me.id, (long) chptr->channelts, parv[1],
|
||||||
|
source_p->id);
|
||||||
|
msptr->flags |= CHFL_HALFOP;
|
||||||
|
}
|
||||||
|
else if (ConfigChannel.use_admin)
|
||||||
{
|
{
|
||||||
/* Hack it so set_channel_mode() will accept */
|
/* Hack it so set_channel_mode() will accept */
|
||||||
|
if (wasonchannel)
|
||||||
|
msptr->flags |= CHFL_ADMIN;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
add_user_to_channel(chptr, source_p, CHFL_CHANOP);
|
||||||
|
msptr = find_channel_membership(chptr, source_p);
|
||||||
|
}
|
||||||
|
set_channel_mode(client_p, source_p, chptr, msptr,
|
||||||
|
parc - 2, parv + 2);
|
||||||
|
/* We know they were not opped before and they can't have opped
|
||||||
|
* themselves as set_channel_mode() does not allow that
|
||||||
|
* -- jilles */
|
||||||
|
if (wasonchannel)
|
||||||
|
msptr->flags &= ~CHFL_ADMIN;
|
||||||
|
else
|
||||||
|
remove_user_from_channel(msptr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* CHFL_ADMIN is only useful if admin is enabled
|
||||||
|
* so hack it with op if it is not. */
|
||||||
if (wasonchannel)
|
if (wasonchannel)
|
||||||
msptr->flags |= CHFL_CHANOP;
|
msptr->flags |= CHFL_CHANOP;
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue