X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/38c4bf0a293a7123c67a759449ded67e4934fa3f..9d59f1964d0f20da7f044804c10f1f69010d7963:/src/chanserv.c?ds=sidebyside diff --git a/src/chanserv.c b/src/chanserv.c index ef3dcd6..23ca059 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -8727,10 +8727,19 @@ handle_part(struct modeNode *mn, UNUSED_ARG(const char *reason)) if(IsHelping(mn->user) && IsSupportHelper(mn->user)) { unsigned int ii; - for(ii = 0; ii < chanserv_conf.support_channels.used; ++ii) - if(find_handle_in_channel(chanserv_conf.support_channels.list[ii], mn->user->handle_info, mn->user)) + for(ii = 0; ii < chanserv_conf.support_channels.used; ++ii) { + struct chanNode *channel; + struct userNode *exclude; + /* When looking at the channel that is being /part'ed, we + * have to skip over the client that is leaving. For + * other channels, we must not do that. + */ + channel = chanserv_conf.support_channels.list[ii]; + exclude = (channel == mn->channel) ? mn->user : NULL; + if(find_handle_in_channel(channel, mn->user->handle_info, exclude)) break; - if(ii == chanserv_conf.support_channels.used) + } + if(ii == chanserv_conf.support_channels.used) HANDLE_CLEAR_FLAG(mn->user->handle_info, HELPING); } } @@ -8949,7 +8958,7 @@ handle_unreg(UNUSED_ARG(struct userNode *user), struct handle_info *handle) } static int -handle_server_link(UNUSED_ARG(struct server *server)) +handle_server_link(UNUSED_ARG(struct server *server), UNUSED_ARG(void *extra)) { struct chanData *cData; @@ -9950,7 +9959,7 @@ init_chanserv(const char *nick) conf_register_reload(chanserv_conf_read); if (nick) { - reg_server_link_func(handle_server_link); + reg_server_link_func(handle_server_link, NULL); reg_new_channel_func(handle_new_channel); reg_join_func(handle_join); reg_part_func(handle_part);