- sendto_channel_flags(client_p, ONLY_CHANOPS, source_p, chptr,
- "%s %s :%s", command, chptr->chname, text);
+ sendto_channel_opmod(client_p, source_p, chptr,
+ command, text);
+ }
+ }
+ else
+ {
+ if(p_or_n != NOTICE)
+ sendto_one_numeric(source_p, ERR_CANNOTSENDTOCHAN,
+ form_str(ERR_CANNOTSENDTOCHAN), chptr->chname);
+ }
+}
+/*
+ * msg_channel_opmod
+ *
+ * inputs - flag privmsg or notice
+ * - pointer to command "PRIVMSG" or "NOTICE"
+ * - pointer to client_p
+ * - pointer to source_p
+ * - pointer to channel
+ * output - NONE
+ * side effects - message given channel ops
+ *
+ * XXX - We need to rework this a bit, it's a tad ugly. --nenolod
+ */
+static void
+msg_channel_opmod(int p_or_n, const char *command,
+ struct Client *client_p, struct Client *source_p,
+ struct Channel *chptr, const char *text)
+{
+ char text2[BUFSIZE];
+
+ if(chptr->mode.mode & ModuleModes.MODE_NOCOLOR)
+ {
+ rb_strlcpy(text2, text, BUFSIZE);
+ strip_colour(text2);
+ text = text2;
+ if (EmptyString(text))
+ {
+ /* could be empty after colour stripping and
+ * that would cause problems later */
+ if(p_or_n != NOTICE)
+ sendto_one(source_p, form_str(ERR_NOTEXTTOSEND), me.name, source_p->name);
+ return;
+ }
+ }
+
+ if(chptr->mode.mode & ModuleModes.MODE_OPMODERATE &&
+ (!(chptr->mode.mode & MODE_NOPRIVMSGS) ||
+ IsMember(source_p, chptr)))
+ {
+ if(!flood_attack_channel(p_or_n, source_p, chptr, chptr->chname))
+ {
+ sendto_channel_opmod(client_p, source_p, chptr,
+ command, text);