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);
}
}
}
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;
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);