flag = 1;
needs_space = 0;
- if (!ShowChannel(sptr, chptr)) /* Don't list private channels unless we are on them. */
+ if (!ShowChannel(sptr, chptr)) { /* Don't list private channels unless we are on them. */
+ if (filter&NAMES_EON)
+ send_reply(sptr, RPL_ENDOFNAMES, chptr->chname);
return;
+ }
/* Iterate over all channel members, and build up the list. */
if (IsInvisibleJoin(member) && member->user != sptr)
continue;
- if (!IsChanOp(member) && !HasVoice(member) && member->user != sptr && (filter & NAMES_OPS))
+ if (!IsChanOpOrHalfOp(member) && !HasVoice(member) && member->user != sptr && (filter & NAMES_OPS))
continue;
if (needs_space)
buf[idx++] = '!';
else if (IsChanOp(member))
buf[idx++] = '@';
+ else if (IsHalfOp(member))
+ buf[idx++] = '%';
else if (HasVoice(member))
buf[idx++] = '+';
strcpy(buf + idx, cli_name(c2ptr));