summaryrefslogtreecommitdiff
path: root/degesch.c
diff options
context:
space:
mode:
Diffstat (limited to 'degesch.c')
-rw-r--r--degesch.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/degesch.c b/degesch.c
index 132ebab..a26ddd9 100644
--- a/degesch.c
+++ b/degesch.c
@@ -6145,6 +6145,8 @@ struct mode_processor
struct server *s; ///< Server
struct channel *channel; ///< The channel being modified
+ unsigned changes; ///< Count of all changes
+ unsigned usermode_changes; ///< Count of all usermode changes
};
/// Process a single mode character
@@ -6268,8 +6270,12 @@ mode_processor_do_param_when_set (struct mode_processor *self)
static bool
mode_processor_apply_channel (struct mode_processor *self)
{
+ self->changes++;
if (strchr (self->s->irc_chanuser_modes, self->mode_char))
+ {
+ self->usermode_changes++;
mode_processor_do_user (self);
+ }
else if (strchr (self->s->irc_chanmodes_list, self->mode_char))
// Nothing to do here, just skip the next argument if there's any
(void) mode_processor_next_param (self);
@@ -6285,12 +6291,14 @@ mode_processor_apply_channel (struct mode_processor *self)
return true;
}
-static void
+/// Returns whether the change has only affected channel user modes
+static bool
irc_handle_mode_channel
(struct server *s, struct channel *channel, char **params)
{
struct mode_processor p = { .s = s, .channel = channel };
mode_processor_run (&p, params, mode_processor_apply_channel);
+ return p.changes == p.usermode_changes;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -6668,12 +6676,16 @@ irc_handle_mode (struct server *s, const struct irc_message *msg)
hard_assert ((channel && buffer) ||
(channel && !buffer) || (!channel && !buffer));
- if (channel)
- irc_handle_mode_channel (s, channel, msg->params.vector + 1);
+ int flags = 0;
+ if (channel
+ && irc_handle_mode_channel (s, channel, msg->params.vector + 1))
+ // This is 90% automode spam, let's not let it steal attention,
+ // maybe this behaviour should be configurable though
+ flags = BUFFER_LINE_UNIMPORTANT;
if (buffer)
{
- log_server_status (s, buffer,
+ log_server (s, buffer, BUFFER_LINE_STATUS | flags,
"Mode #S [#S] by #n", context, modes, msg->prefix);
}
}