aboutsummaryrefslogtreecommitdiff
path: root/idalius.pl
diff options
context:
space:
mode:
authorDavid Phillips <david@sighup.nz>2018-09-10 19:37:46 +1200
committerDavid Phillips <david@sighup.nz>2018-09-10 19:37:46 +1200
commit1c5caa91047e8291fd7cb01f1b45decc993f49d9 (patch)
tree34d0e88a721e8e7927a682aa02ffeed61ea42e78 /idalius.pl
parentade3c69f9e307f27d789d4a3f5009230a56d554b (diff)
downloadidalius-1c5caa91047e8291fd7cb01f1b45decc993f49d9.tar.xz
Separate handling of message and action
Diffstat (limited to 'idalius.pl')
-rwxr-xr-xidalius.pl49
1 files changed, 34 insertions, 15 deletions
diff --git a/idalius.pl b/idalius.pl
index 5f238a6..8559aa6 100755
--- a/idalius.pl
+++ b/idalius.pl
@@ -153,6 +153,10 @@ sub strike_add {
}
}
+sub should_ignore {
+ return grep @{$config{ignore}};
+}
+
sub _start {
my $heap = $_[HEAP];
my $irc = $heap->{irc};
@@ -191,32 +195,27 @@ sub irc_kick {
return;
}
-sub irc_ctcp_action {
- irc_public(@_);
-}
-
-sub irc_public {
- my ($sender, $who, $where, $what) = @_[SENDER, ARG0 .. ARG2];
- my $nick = ( split /!/, $who )[0];
+sub handle_common {
+ my ($message_type, $who, $where, $what) = @_;
+ my $nick = (split /!/, $who)[0];
my $channel = $where->[0];
my $output;
- log_info("[$channel] $who: $what");
-
- # reject ignored nicks first
- return if (grep {$_ eq $nick} @{$config{ignore}});
+ # Return early if should ignore
+ return if should_ignore($nick);
my $stripped_what = strip_color(strip_formatting($what));
+ my $no_prefix_what = $stripped_what;
if ($config{prefix_nick} && $stripped_what =~ s/^\Q$current_nick\E[:,]\s+//g ||
- $stripped_what =~ s/^$config{prefix}//) {
- $output = run_command($stripped_what, $who, $where);
+ $no_prefix_what =~ s/^$config{prefix}//) {
+ $output = run_command($no_prefix_what, $who, $where);
$irc->yield(privmsg => $where => $output) if $output;
strike_add($nick, $channel) if $output;
}
for my $module (@{$config{plugins}}) {
- if (module_is_enabled($module) && $module->can("message")) {
- $output = $module->message(\&log_info, $irc->nick_name, $who, $where, $what, $stripped_what, $irc);
+ if (module_is_enabled($module) && $module->can($message_type)) {
+ $output = $module->$message_type(\&log_info, $irc->nick_name, $who, $where, $what, $stripped_what, $irc);
$irc->yield(privmsg => $where => $output) if $output;
strike_add($nick, $channel) if $output;
}
@@ -225,6 +224,26 @@ sub irc_public {
return;
}
+sub irc_ctcp_action {
+ my ($sender, $who, $where, $what) = @_[SENDER, ARG0 .. ARG2];
+ my $nick = ( split /!/, $who )[0];
+ my $channel = $where->[0];
+
+ log_info("[$channel] [action] $who $what");
+
+ return handle_common("action", $who, $where, $what);
+}
+
+sub irc_public {
+ my ($sender, $who, $where, $what) = @_[SENDER, ARG0 .. ARG2];
+ my $nick = ( split /!/, $who )[0];
+ my $channel = $where->[0];
+
+ log_info("[$channel] $who: $what");
+
+ return handle_common("message", $who, $where, $what);
+}
+
sub irc_msg {
my ($who, $to, $what, $ided) = @_[ARG0 .. ARG3];
my $nick = (split /!/, $who)[0];