buf[idx++] = '@';
else if(cm->flags & CHFL_VOICE)
buf[idx++] = '+';
- else if((chptr->mode.mode & MODE_AUDITORIUM) && (sptr != acptr) && !is_chan_opvoice(sptr, chptr)) continue;
+ else if((chptr->mode.mode & MODE_AUDITORIUM) && (sptr != acptr) && !is_chan_opvoice(sptr, chptr) && !IsAnOper(sptr)) continue;
for(s = acptr->name; *s; s++)
buf[idx++] = *s;
buf[idx++] = ' ';
if(wsopts.channel!=NULL)
{
if(IsMember(sptr,wsopts.channel) && (!(wsopts.channel->mode.mode & MODE_AUDITORIUM) ||
- is_chan_opvoice(sptr, wsopts.channel)))
+ is_chan_opvoice(sptr, wsopts.channel) || IsAnOper(sptr)))
showall=1;
else if(SecretChannel(wsopts.channel) && IsAdmin(sptr))
showall=1;
/*
* sendto_channelopvoice_butserv_me
*
- * Send a message to all members of a channel that are connected to this
+ * Send a message to all opped or voiced members of a channel that are connected to this
* server. Possibly hide the origin, if it's a server, with me.name if certain paranoia is on.
+ * IRC Operators will also receive this message (even if they're not opped/voiced).
*/
void sendto_channelopvoice_butserv_me(aChannel *chptr, aClient *from, char *pattern, ...)
{
{
if (MyConnect(acptr = cm->cptr))
{
- if(!is_chan_opvoice(acptr, chptr)) continue;
+ if(!is_chan_opvoice(acptr, chptr) && !IsAnOper(acptr)) continue;
if (!didlocal)
{
didlocal = prefix_buffer(0, from, pfix, sendbuf, pattern, vl);