Shitlist level 3/4 should kick regardless of /CSET KICK_IF_BANNED

As reported by Ancient, this is how it is documented to work.  It's also how shitlist level 2 works, so
it's consistent this way.

Some other cleanups in check_auto() while we're here.
This commit is contained in:
Kevin Easton
2017-10-23 00:32:05 +11:00
parent 60b40cf332
commit ff048fbee9
2 changed files with 15 additions and 18 deletions

View File

@@ -1,5 +1,8 @@
[Changes 1.2.2] [Changes 1.2.2]
* Shitlist level 3/4 should kick regardless of /CSET KICK_IF_BANNED.
Reported by Ancient. (caf)
* Correct spelling of some client messages. (gdinit) * Correct spelling of some client messages. (gdinit)
* Support fractional-second intervals on recurring timers. (caf) * Support fractional-second intervals on recurring timers. (caf)

View File

@@ -1049,12 +1049,10 @@ void run_user_flag(char *name, char *what, NickList *user, NickList *kicker)
NickList *check_auto(char *channel, NickList *nicklist, ChannelList *chan) NickList *check_auto(char *channel, NickList *nicklist, ChannelList *chan)
{ {
ShitList *shitptr = NULL;
ShitList *shitptr = NULL; UserList *userptr = NULL;
UserList *userptr = NULL; ChannelList *chan_ptr = NULL;
ChannelList *chan_ptr = NULL; char *ban;
char *ban;
if (!channel || !*channel || !nicklist) if (!channel || !*channel || !nicklist)
return NULL; return NULL;
@@ -1075,7 +1073,6 @@ char *ban;
userptr = nicklist->userlist; userptr = nicklist->userlist;
shitptr = nicklist->shitlist; shitptr = nicklist->shitlist;
if (userptr && !check_channel_match(userptr->channels, channel)) if (userptr && !check_channel_match(userptr->channels, channel))
userptr = NULL; userptr = NULL;
if (shitptr && (!check_channel_match(shitptr->channels, channel) || isme(nicklist->nick))) if (shitptr && (!check_channel_match(shitptr->channels, channel) || isme(nicklist->nick)))
@@ -1083,10 +1080,9 @@ char *ban;
if (get_cset_int_var(chan_ptr->csets, SHITLIST_CSET) && shitptr != NULL && userptr == NULL) if (get_cset_int_var(chan_ptr->csets, SHITLIST_CSET) && shitptr != NULL && userptr == NULL)
{ {
char *theshit; char *reason = shitptr->reason ? shitptr->reason : get_string_var(SHITLIST_REASON_VAR);
time_t current = now;
theshit = get_string_var(SHITLIST_REASON_VAR); switch (shitptr->level)
switch(shitptr->level)
{ {
case 0: case 0:
@@ -1097,25 +1093,23 @@ char *ban;
{ {
add_mode(chan_ptr, "o", 0, nicklist->nick, NULL, get_int_var(NUM_OPMODES_VAR)); add_mode(chan_ptr, "o", 0, nicklist->nick, NULL, get_int_var(NUM_OPMODES_VAR));
nicklist->sent_deop++; nicklist->sent_deop++;
nicklist->sent_deop_time = current; nicklist->sent_deop_time = now;
} }
break; break;
case 2: /* Auto Kick offender */ case 2: /* Auto Kick offender */
add_mode(chan_ptr, NULL, 0, nicklist->nick, shitptr->reason?shitptr->reason:theshit, 0); add_mode(chan_ptr, NULL, 0, nicklist->nick, reason, 0);
break; break;
case 3: /* kick ban the offender */ case 3: /* kick ban the offender */
case 4: /* perm ban on offender */ case 4: /* perm ban on offender */
if (nicklist->sent_deop < 4 || (nicklist->sent_deop < 4 && shitptr->level == 4)) if (nicklist->sent_deop < 4)
{ {
send_to_server("MODE %s -o+b %s %s", channel, nicklist->nick, shitptr->filter); send_to_server("MODE %s -o+b %s %s", channel, nicklist->nick, shitptr->filter);
nicklist->sent_deop++; nicklist->sent_deop++;
nicklist->sent_deop_time = current; nicklist->sent_deop_time = now;
if (get_int_var(AUTO_UNBAN_VAR) && shitptr->level != 4) if (get_int_var(AUTO_UNBAN_VAR) && shitptr->level != 4)
add_timer(0, empty_string, get_int_var(AUTO_UNBAN_VAR) * 1000, 1, timer_unban, m_sprintf("%d %s %s", from_server, channel, shitptr->filter), NULL, -1, "auto-unban"); add_timer(0, empty_string, get_int_var(AUTO_UNBAN_VAR) * 1000, 1, timer_unban, m_sprintf("%d %s %s", from_server, channel, shitptr->filter), NULL, -1, "auto-unban");
} }
if (get_cset_int_var(chan_ptr->csets, KICK_IF_BANNED_CSET)) add_mode(chan_ptr, NULL, 0, nicklist->nick, reason, 0);
send_to_server("KICK %s %s :%s", channel,
nicklist->nick, (shitptr->reason && *shitptr->reason) ? shitptr->reason : theshit);
default: default:
break; break;
} }