summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeert Hauwaerts2015-06-12 21:56:17 +0200
committerGeert Hauwaerts2015-06-12 21:56:17 +0200
commit8a36b86ca39588dbc4eed16b00e95e749e3e94f4 (patch)
treea62bc7000729d49b1e27c26b2262cb1094b1c884
parentc94e07d5ce7cfe1cccce813168ebdbd64208ebae (diff)
parentbaa299bacfd4124524602e2da9251f692a90a978 (diff)
downloadscripts.irssi.org-8a36b86ca39588dbc4eed16b00e95e749e3e94f4.tar.bz2
Merge pull request #140 from mortenlj/slack-scripts
Slack scripts
-rw-r--r--scripts/msg2notice.pl203
-rw-r--r--scripts/slack_complete.pl62
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 ]=========================================================