diff options
| author | Geert Hauwaerts | 2015-06-12 21:56:17 +0200 |
|---|---|---|
| committer | Geert Hauwaerts | 2015-06-12 21:56:17 +0200 |
| commit | 8a36b86ca39588dbc4eed16b00e95e749e3e94f4 (patch) | |
| tree | a62bc7000729d49b1e27c26b2262cb1094b1c884 | |
| parent | c94e07d5ce7cfe1cccce813168ebdbd64208ebae (diff) | |
| parent | baa299bacfd4124524602e2da9251f692a90a978 (diff) | |
| download | scripts.irssi.org-8a36b86ca39588dbc4eed16b00e95e749e3e94f4.tar.bz2 | |
Merge pull request #140 from mortenlj/slack-scripts
Slack scripts
| -rw-r--r-- | scripts/msg2notice.pl | 203 | ||||
| -rw-r--r-- | scripts/slack_complete.pl | 62 |
2 files changed, 265 insertions, 0 deletions
diff --git a/scripts/msg2notice.pl b/scripts/msg2notice.pl new file mode 100644 index 0000000..f8febad --- /dev/null +++ b/scripts/msg2notice.pl @@ -0,0 +1,203 @@ +# +# Copyright (C) 2015 by Morten Lied Johansen <mortenjo@ifi.uio.no> +# + +use strict; + +use Irssi; +use Irssi::Irc; + +# ======[ Script Header ]=============================================== + +use vars qw{$VERSION %IRSSI}; +($VERSION) = '$Revision: 1.0 $' =~ / (\d+\.\d+) /; +%IRSSI = ( + name => 'msg2notice', + authors => 'Morten Lied Johansen', + contact => 'mortenjo@ifi.uio.no', + license => 'GPL', + description => 'For a configured list of nicks, convert all their messages to a notice', + ); + +# ======[ Variables ]=================================================== + +my(%nicks); + +# ======[ Helpers ]===================================================== + +# --------[ crap ]------------------------------------------------------ + +sub crap { + my $template = shift; + my $msg = sprintf $template, @_; + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'msg2notice_crap', $msg); +} + +# --------[ list_nicks ]------------------------------------------------ + +sub list_nicks { + my $count = keys %nicks; + + crap("Listing $count nicks"); + foreach my $nick (keys %nicks) { + crap($nick); + } +} + +# --------[ add_nick ]-------------------------------------------------- + +sub add_nick { + my($nick) = @_; + + $nick =~ s/^\s+|\s+$//g; + $nicks{$nick} = 1; + crap("Added $nick to list"); +} + +# --------[ del_nick ]-------------------------------------------------- + +sub del_nick { + my($nick) = @_; + + $nick =~ s/^\s+|\s+$//g; + delete $nicks{$nick}; + crap("Removed $nick from list"); +} + +# --------[ load_nicks ]------------------------------------------------ + +sub load_nicks { + my($file) = Irssi::get_irssi_dir."/msg2notice"; + my($count) = 0; + my($mask,$net,$channel,$flags,$flag); + local(*FILE); + + %nicks = (); + if (open FILE, "<", $file) { + while (<FILE>) { + add_nick($_); + } + close FILE; + $count = keys %nicks; + + crap("Loaded $count nicks"); + } else { + crap("Unable to open $file for loading: $!"); + } +} + +# --------[ save_nicks ]------------------------------------------------ + +sub save_nicks { + my($auto) = @_; + my($file) = Irssi::get_irssi_dir."/msg2notice"; + my($count) = 0; + local(*FILE); + + return if $auto && !Irssi::settings_get_bool('msg2notice_autosave'); + + if (open FILE, ">", $file) { + for my $nick (keys %nicks) { + $count++; + print FILE "$nick\n"; + } + close FILE; + + crap("Saved $count nicks to $file") + unless $auto; + } else { + crap("Unable to open $file for saving: $!"); + } +} + +# ======[ Hooks ]======================================================= + +# --------[ sig_event_privmsg ]----------------------------------------- + +sub sig_event_privmsg { + my ($server, $data, $sender_nick, $sender_address) = @_; + + if (exists $nicks{$sender_nick}) { + Irssi::signal_emit('event notice', $server, $data, $sender_nick, $sender_address); + Irssi::signal_stop(); + } +} + +# --------[ sig_setup_reread ]------------------------------------------ + +sub sig_setup_reread { + load_nicks; +} + +# --------[ sig_setup_save ]-------------------------------------------- + +sub sig_setup_save { + my($mainconf,$auto) = @_; + save_nicks($auto); +} + +# ======[ Commands ]==================================================== + +# --------[ MSG2NOTICE ]------------------------------------------------ + +# Usage: /MSG2NOTICE [list|add|del|load|save] <nick> [<nick> ...] +sub cmd_msg2notice { + my($param,$serv,$chan) = @_; + my(@split) = split " ", $param; + my $cmd = shift @split; + my $save = 0; + + if ($cmd eq "list") { + list_nicks; + } elsif ($cmd eq "add") { + while (@split) { + add_nick(shift @split); + $save = 1; + } + } elsif ($cmd eq "del") { + while (@split) { + del_nick(shift @split); + $save = 1; + } + } elsif ($cmd eq "load") { + load_nicks; + } elsif ($cmd eq "save") { + save_nicks; + } else { + crap("Unknown command: $cmd"); + } + + if ($save) { + save_nicks(1); + } +} + +# ======[ Setup ]======================================================= + +# --------[ Register commands ]----------------------------------------- + +Irssi::command_bind('msg2notice', \&cmd_msg2notice); + +# --------[ Register settings ]----------------------------------------- + +Irssi::settings_add_bool('msg2notice', 'msg2notice_autosave', 1); + +# --------[ Register signals ]------------------------------------------ + +Irssi::signal_add('event privmsg', \&sig_event_privmsg); +Irssi::signal_add('setup saved', 'sig_setup_save'); +Irssi::signal_add('setup reread', 'sig_setup_reread'); + +# --------[ Register formats ]------------------------------------------ + +Irssi::theme_register( +[ + 'msg2notice_crap', + '{line_start}{hilight Msg->Notice:} $0', +]); + +# --------[ Load config ]----------------------------------------------- + +load_nicks; + +# ======[ END ]========================================================= diff --git a/scripts/slack_complete.pl b/scripts/slack_complete.pl new file mode 100644 index 0000000..c4b0443 --- /dev/null +++ b/scripts/slack_complete.pl @@ -0,0 +1,62 @@ +# +# Copyright (C) 2015 by Morten Lied Johansen <mortenjo@ifi.uio.no> +# + +use strict; + +use Irssi; +use Irssi::Irc; + +# ======[ Script Header ]=============================================== + +use vars qw{$VERSION %IRSSI}; +($VERSION) = '$Revision: 1.0 $' =~ / (\d+\.\d+) /; +%IRSSI = ( + name => 'slack_complete', + authors => 'Morten Lied Johansen', + contact => 'mortenjo@ifi.uio.no', + license => 'GPL', + description => 'Convert to slack-mention when completing nicks', + ); + +# ======[ Hooks ]======================================================= + +# --------[ sig_complete_slack_nick ]----------------------------------- + +sub sig_complete_slack_nick { +my ($complist, $window, $word, $linestart, $want_space) = @_; + + my $wi = Irssi::active_win()->{active}; + return unless ref $wi and $wi->{type} eq 'CHANNEL'; + return unless $wi->{server}->{chatnet} eq + Irssi::settings_get_str('slack_network'); + + if ($word =~ /^@/) { + $word =~ s/^@//; + } + foreach my $nick ($wi->nicks()) { + if ($nick->{nick} =~ /^\Q$word\E/i) { + if ($linestart) { + push(@$complist, "\@$nick->{nick}"); + } else { + push(@$complist, "\@$nick->{nick}:"); + } + } + } + + @$complist = sort { + return $a =~ /^\@\Q$word\E(.*)$/i ? 0 : 1; + } @$complist; +} + +# ======[ Setup ]======================================================= + +# --------[ Register settings ]----------------------------------------- + +Irssi::settings_add_str('slack_complete', 'slack_network', 'Slack'); + +# --------[ Register signals ]------------------------------------------ + +Irssi::signal_add('complete word', \&sig_complete_slack_nick); + +# ======[ END ]========================================================= |
