#include "chmode.h"
#include "ratelimit.h"
#include "s_assert.h"
+#include "hook.h"
static const char join_desc[] = "Provides the JOIN and TS6 SJOIN commands to facilitate joining and creating channels";
static int h_can_create_channel;
static int h_channel_join;
+static int h_channel_lowerts;
struct Message join_msgtab = {
"JOIN", 0, 0, 0, 0,
mapi_hlist_av1 join_hlist[] = {
{ "can_create_channel", &h_can_create_channel },
{ "channel_join", &h_channel_join },
+ { "channel_lowerts", &h_channel_lowerts },
{ NULL, NULL },
};
continue;
}
- if(splitmode && !IsOper(source_p) && (*name != '&') &&
+ if(splitmode && !IsOperGeneral(source_p) && (*name != '&') &&
ConfigChannel.no_join_on_split)
{
sendto_one(source_p, form_str(ERR_UNAVAILRESOURCE),
continue;
}
- if(splitmode && !IsOper(source_p) && (*name != '&') &&
+ if(splitmode && !IsOperGeneral(source_p) && (*name != '&') &&
ConfigChannel.no_create_on_split)
{
sendto_one(source_p, form_str(ERR_UNAVAILRESOURCE),
chptr = chptr2;
if(flags == 0 &&
- !IsOper(source_p) && !IsExemptSpambot(source_p))
+ !IsOperGeneral(source_p) && !IsExemptSpambot(source_p))
check_spambot_warning(source_p, name);
/* add the user to the channel */
chptr->mode.mode |= ConfigChannel.autochanmodes;
modes = channel_modes(chptr, &me);
- sendto_channel_local(ONLY_CHANOPS, chptr, ":%s MODE %s %s",
+ sendto_channel_local(&me, ONLY_CHANOPS, chptr, ":%s MODE %s %s",
me.name, chptr->chname, modes);
sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
/* making a channel TS0 */
if(!isnew && !newts && oldts)
{
- sendto_channel_local(ALL_MEMBERS, chptr,
+ sendto_channel_local(&me, ALL_MEMBERS, chptr,
":%s NOTICE %s :*** Notice -- TS for %s changed from %ld to 0",
me.name, chptr->chname, chptr->chname, (long) oldts);
sendto_realops_snomask(SNO_GENERAL, L_ALL,
}
/* If setting -j, clear join throttle state -- jilles */
chptr->join_count = chptr->join_delta = 0;
- sendto_channel_local(ALL_MEMBERS, chptr,
+ sendto_channel_local(&me, ALL_MEMBERS, chptr,
":%s NOTICE %s :*** Notice -- TS for %s changed from %ld to %ld",
me.name, chptr->chname, chptr->chname,
(long) oldts, (long) newts);
* capitalization timestamped like modes are -- jilles */
strcpy(chptr->chname, parv[2]);
if(*modebuf != '\0')
- sendto_channel_local(ALL_MEMBERS, chptr,
+ sendto_channel_local(source_p->servptr, ALL_MEMBERS, chptr,
":%s MODE %s %s %s",
source_p->servptr->name,
chptr->chname, modebuf, parabuf);
/* since we're dropping our modes, we want to clear the mlock as well. --nenolod */
set_channel_mlock(client_p, source_p, chptr, NULL, false);
+
+ hook_data_channel hookdata;
+ hookdata.client = source_p;
+ hookdata.chptr = chptr;
+
+ call_hook(h_channel_lowerts, &hookdata);
}
if(!IsMember(source_p, chptr))
if(!isnew && !newts && oldts)
{
- sendto_channel_local(ALL_MEMBERS, chptr,
+ sendto_channel_local(&me, ALL_MEMBERS, chptr,
":%s NOTICE %s :*** Notice -- TS for %s "
"changed from %ld to 0",
me.name, chptr->chname, chptr->chname, (long) oldts);
'q', ALL_MEMBERS);
chptr->bants++;
- sendto_channel_local(ALL_MEMBERS, chptr,
+ sendto_channel_local(&me, ALL_MEMBERS, chptr,
":%s NOTICE %s :*** Notice -- TS for %s changed from %ld to %ld",
me.name, chptr->chname, chptr->chname,
(long) oldts, (long) newts);
}
if(*modebuf != '\0')
- sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s %s %s",
+ sendto_channel_local(fakesource_p, ALL_MEMBERS, chptr, ":%s MODE %s %s %s",
fakesource_p->name, chptr->chname, modebuf, parabuf);
*modebuf = *parabuf = '\0';
if(pargs >= MAXMODEPARAMS)
{
*mbuf = '\0';
- sendto_channel_local(ALL_MEMBERS, chptr,
+ sendto_channel_local(fakesource_p, ALL_MEMBERS, chptr,
":%s MODE %s %s %s %s %s %s",
fakesource_p->name, chptr->chname,
modebuf,
if(pargs >= MAXMODEPARAMS)
{
*mbuf = '\0';
- sendto_channel_local(ALL_MEMBERS, chptr,
+ sendto_channel_local(fakesource_p, ALL_MEMBERS, chptr,
":%s MODE %s %s %s %s %s %s",
fakesource_p->name,
chptr->chname,
*mbuf = '\0';
if(pargs)
{
- sendto_channel_local(ALL_MEMBERS, chptr,
+ sendto_channel_local(fakesource_p, ALL_MEMBERS, chptr,
":%s MODE %s %s %s %s %s %s",
fakesource_p->name, chptr->chname, modebuf,
para[0], CheckEmpty(para[1]),
while((ptr = source_p->user->channel.head))
{
if(MyConnect(source_p) &&
- !IsOper(source_p) && !IsExemptSpambot(source_p))
+ !IsOperGeneral(source_p) && !IsExemptSpambot(source_p))
check_spambot_warning(source_p, NULL);
msptr = ptr->data;
chptr = msptr->chptr;
- sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s PART %s",
+ sendto_channel_local(source_p, ALL_MEMBERS, chptr, ":%s!%s@%s PART %s",
source_p->name,
source_p->username, source_p->host, chptr->chname);
remove_user_from_channel(msptr);
if(EmptyString(name))
return false;
- if(ConfigFileEntry.disable_fake_channels && !IsOper(source_p))
+ if(ConfigFileEntry.disable_fake_channels && !IsOperGeneral(source_p))
{
for(p = name; *p; ++p)
{
if(count >= MAXMODEPARAMS)
{
*mbuf = '\0';
- sendto_channel_local(ALL_MEMBERS, chptr,
+ sendto_channel_local(source_p, ALL_MEMBERS, chptr,
":%s MODE %s %s %s %s %s %s",
source_p->name, chptr->chname,
lmodebuf, lpara[0], lpara[1],
if(count >= MAXMODEPARAMS)
{
*mbuf = '\0';
- sendto_channel_local(ALL_MEMBERS, chptr,
+ sendto_channel_local(source_p, ALL_MEMBERS, chptr,
":%s MODE %s %s %s %s %s %s",
source_p->name, chptr->chname, lmodebuf,
lpara[0], lpara[1], lpara[2], lpara[3]);
if(count != 0)
{
*mbuf = '\0';
- sendto_channel_local(ALL_MEMBERS, chptr,
+ sendto_channel_local(source_p, ALL_MEMBERS, chptr,
":%s MODE %s %s %s %s %s %s",
source_p->name, chptr->chname, lmodebuf,
EmptyString(lpara[0]) ? "" : lpara[0],
*mbuf = '\0';
*(pbuf - 1) = '\0';
- sendto_channel_local(mems, chptr, "%s %s", lmodebuf, lparabuf);
+ sendto_channel_local(source_p, mems, chptr, "%s %s", lmodebuf, lparabuf);
cur_len = mlen;
mbuf = lmodebuf + mlen;
*mbuf = '\0';
*(pbuf - 1) = '\0';
- sendto_channel_local(mems, chptr, "%s %s", lmodebuf, lparabuf);
+ sendto_channel_local(source_p, mems, chptr, "%s %s", lmodebuf, lparabuf);
list->head = list->tail = NULL;
list->length = 0;