Add support for priority messages. By default priority regex are saved in ~/.irssi/priority_messages

This commit is contained in:
Storm Dragon
2025-12-21 13:40:49 -05:00
parent 330c1bb2bc
commit d590e29b74
2 changed files with 100 additions and 0 deletions

7
README
View File

@@ -13,3 +13,10 @@ If you want to autorun the script, place the script in or simlink to ~/.irssi/sc
There is a basic install script, just run:
./install
This install script creates the folder ~/.irssi/scripts/autorun if it doesn't exist and simlinks the script to start automatically.
Priority alerts for public messages:
Create a file at ~/.irssi/priority_messages (one regex per line, # comments allowed).
Example pattern: ^\S+-\d+ is requesting assistance\.$
Matching public messages will use priority_sound_command instead of pub_sound_command.
Use /set priority_messages_file to change the file path if needed.
Reload the regex file with: /sound priority_reload

View File

@@ -24,6 +24,81 @@ $VERSION = '0.0.3';
my $flood_protect = 1;
my $sound_tag;
my $priority_patterns_ref = [];
my $priority_patterns_mtime = -1;
my $priority_patterns_file = '';
sub expand_home_path {
my ($path) = @_;
if (defined $path && $path =~ /^~(\/|$)/) {
$path =~ s/^~/$ENV{HOME}/;
}
return $path;
}
sub load_priority_patterns {
my $file = Irssi::settings_get_str("priority_messages_file");
$file = expand_home_path($file);
return [] if (!defined $file || $file eq '');
my $mtime = (stat($file))[9];
if (!defined $mtime) {
$priority_patterns_ref = [];
$priority_patterns_mtime = -1;
$priority_patterns_file = $file;
return $priority_patterns_ref;
}
if ($file eq $priority_patterns_file && $mtime == $priority_patterns_mtime) {
return $priority_patterns_ref;
}
my @patterns = ();
if (open(my $fh, "<", $file)) {
while (my $line = <$fh>) {
chomp $line;
$line =~ s/^\s+//;
$line =~ s/\s+$//;
next if ($line eq '' || $line =~ /^#/);
my $regex = eval { qr/$line/ };
next if $@;
push @patterns, $regex;
}
close $fh;
}
$priority_patterns_ref = \@patterns;
$priority_patterns_mtime = $mtime;
$priority_patterns_file = $file;
return $priority_patterns_ref;
}
sub message_is_priority {
my ($msg) = @_;
my $patterns_ref = load_priority_patterns();
foreach my $regex (@{$patterns_ref}) {
return 1 if ($msg =~ $regex);
}
return 0;
}
sub priority_reload {
$priority_patterns_mtime = -1;
$priority_patterns_file = '';
my $patterns_ref = load_priority_patterns();
my $patternCount = scalar @{$patterns_ref};
Irssi::print("Priority message patterns reloaded ($patternCount).");
}
sub sound_command {
my ($data, $server, $witem) = @_;
my $command = $data // '';
if ($command =~ /^\s*priority_reload\s*$/i) {
priority_reload();
return;
}
Irssi::print("Usage: /sound priority_reload");
}
sub sound_overflow_timeout() {
$flood_protect = 1;
@@ -90,6 +165,19 @@ sub pub_msg {
if ($server && ! Irssi::settings_get_bool("sounds")) {
return;;
} else {
if (message_is_priority($msg)) {
if (my $prioritycmd = Irssi::settings_get_str("priority_sound_command")) {
if ($flood_protect) {
my $sound_flood = Irssi::settings_get_int('sound_flood');
$sound_flood = 1000 if $sound_flood < 0;
Irssi::timeout_remove($sound_tag);
$sound_tag = Irssi::timeout_add($sound_flood, 'sound_overflow_timeout', undef);
system($prioritycmd);
$flood_protect = 0;
}
}
return;
}
if (my $pubcmd = Irssi::settings_get_str("pub_sound_command")) {
if ($flood_protect) {
my $sound_flood = Irssi::settings_get_int('sound_flood');
@@ -260,6 +348,8 @@ Irssi::settings_add_str("misc", "quit_sound_command",
"play -qnV0 synth pi fade h 0 1 1 pad 0 1 reverb overdrive riaa norm -20 &> /dev/null&");
Irssi::settings_add_str("misc", "pub_sound_command",
"play -qnV0 synth 0.09 tri E3:B3 norm -15 &> /dev/null&");
Irssi::settings_add_str("misc", "priority_sound_command",
"play -q -n synth 2 sine 700:1000 sine 900:1200 fade 0 2 0 remix - norm -12 repeat 3 overdrive reverb speed 4 &> /dev/null&");
Irssi::settings_add_str("misc", "own_act_sound_command",
"play -qnV0 synth 0.25 tri G5:E1 tri B5:D1 remix - norm -15 &> /dev/null&");
Irssi::settings_add_str("misc", "own_privmsg_sound_command",
@@ -276,6 +366,8 @@ Irssi::settings_add_str("misc", "privmsg_sound_command",
"play -qnV0 synth pl G4 pl G4 pl D4 pl D4 pl D4 pl D3 pl G4 pl G3 pl B3 pl B2 pl G3 pl G2 delay 0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 remix - phaser fade p 0 0.5 0.3 norm -8 &> /dev/null&");
Irssi::settings_add_str("misc", "hilight_sound_command",
"play -qnV0 synth 0.5 tri A3:D3 tri D3:A3 remix - norm -15 &> /dev/null&");
Irssi::settings_add_str("misc", "priority_messages_file",
"~/.irssi/priority_messages");
#add Signals
Irssi::signal_add_last("message public", "pub_msg");
Irssi::signal_add_last("message irc action", "action_msg");
@@ -290,4 +382,5 @@ Irssi::signal_add_last("event join", 'join_msg');
Irssi::signal_add_last("event quit", 'quit_msg');
Irssi::signal_add_last("event part", 'part_msg');
Irssi::signal_add_last("event kick", 'part_msg');
Irssi::command_bind('sound', 'sound_command');
#- end