Do not remove +g from a +h account when one of several users on the
account leave a support channel, which gix reported in SF#
2649505.
src/chanserv.c (handle_part): Keep the +g flag if any user on the same
account is in any support channel.
src/nickserv.c (nickserv_apply_flags): Likewise here, for flag changes.
if(IsHelping(mn->user) && IsSupportHelper(mn->user))
{
- unsigned int ii, jj;
+ unsigned int ii;
for(ii = 0; ii < chanserv_conf.support_channels.used; ++ii)
- {
- for(jj = 0; jj < mn->user->channels.used; ++jj)
- if(mn->user->channels.list[jj]->channel == chanserv_conf.support_channels.list[ii])
- break;
- if(jj < mn->user->channels.used)
+ if(find_handle_in_channel(chanserv_conf.support_channels.list[ii], mn->user->handle_info, mn->user))
break;
- }
- if(ii == chanserv_conf.support_channels.used)
+ if(ii == chanserv_conf.support_channels.used)
HANDLE_CLEAR_FLAG(mn->user->handle_info, HELPING);
}
}
struct channelList *schannels;
unsigned int ii;
schannels = chanserv_support_channels();
- for (uNode = hi->users; uNode; uNode = uNode->next_authed) {
- for (ii = 0; ii < schannels->used; ++ii)
- if (GetUserMode(schannels->list[ii], uNode))
- break;
- if (ii < schannels->used)
+ for (ii = 0; ii < schannels->used; ++ii)
+ if (find_handle_in_channel(schannels->list[ii], hi, NULL))
break;
- }
- if (!uNode)
+ if (ii == schannels->used)
HANDLE_CLEAR_FLAG(hi, HELPING);
}