diff options
-rw-r--r-- | src/channel.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/channel.c b/src/channel.c index c3967d5..6eeac2d 100644 --- a/src/channel.c +++ b/src/channel.c @@ -746,8 +746,14 @@ can_send(struct Channel *chptr, struct Client *source_p, if (ms != NULL || (ms = find_channel_link(source_p, chptr))) { + if ((chptr->mode.mode & MODE_NOCTRL) && msg_has_ctrls(message)) + return ERR_NOCTRLSONCHAN; if (ms->flags & (CHFL_CHANOP|CHFL_HALFOP|CHFL_VOICE)) return CAN_SEND_OPV; + if (chptr->mode.mode & MODE_MODERATED) + return ERR_CANNOTSENDTOCHAN; + if ((chptr->mode.mode & MODE_REGONLY) && !HasUMode(source_p, UMODE_REGISTERED)) + return ERR_NEEDREGGEDNICK; /* cache can send if quiet_on_ban and banned */ if (ConfigChannel.quiet_on_ban && MyClient(source_p)) @@ -767,17 +773,17 @@ can_send(struct Channel *chptr, struct Client *source_p, } } } - else if (chptr->mode.mode & MODE_NOPRIVMSGS) - return ERR_CANNOTSENDTOCHAN; - - if (chptr->mode.mode & MODE_MODERATED) - return ERR_CANNOTSENDTOCHAN; - - if ((chptr->mode.mode & MODE_REGONLY) && !HasUMode(source_p, UMODE_REGISTERED)) - return ERR_NEEDREGGEDNICK; - - if ((chptr->mode.mode & MODE_NOCTRL) && msg_has_ctrls(message)) - return ERR_NOCTRLSONCHAN; + else + { + if (chptr->mode.mode & MODE_NOPRIVMSGS) + return ERR_CANNOTSENDTOCHAN; + if (chptr->mode.mode & MODE_MODERATED) + return ERR_CANNOTSENDTOCHAN; + if ((chptr->mode.mode & MODE_REGONLY) && !HasUMode(source_p, UMODE_REGISTERED)) + return ERR_NEEDREGGEDNICK; + if ((chptr->mode.mode & MODE_NOCTRL) && msg_has_ctrls(message)) + return ERR_NOCTRLSONCHAN; + } return CAN_SEND_NONOP; } |