summaryrefslogtreecommitdiffstats
path: root/scripts/chanshare.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/chanshare.pl')
-rw-r--r--scripts/chanshare.pl122
1 files changed, 122 insertions, 0 deletions
diff --git a/scripts/chanshare.pl b/scripts/chanshare.pl
new file mode 100644
index 0000000..dbd4bbe
--- /dev/null
+++ b/scripts/chanshare.pl
@@ -0,0 +1,122 @@
+# /CHANSHARE - display people who are in more than one channel with you
+# for irssi 0.7.98
+#
+# /CHANSHARE [ircnets ...] [#channels ...]
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# Version 0.1 - Timo Sirainen tss@iki.fi
+# Initial stalker.pl
+# Version 0.2 - Chad Armstrong chad@analogself.com
+# Added multiserver support
+# Added keying by nick AND hostname. "nick (fw.corp.com)"
+# Prints to current active window now.
+# Version 0.21 - Timo Sirainen tss@iki.fi
+# Removed printing to active window - if you want it, remove your
+# status window.
+# Version 0.3 - Timo Sirainen tss@iki.fi
+# Supports for limiting searches only to specified ircnets and
+# channels. Some cleanups..
+# Version 0.4 - bw1
+# bug fix
+
+use strict;
+use Irssi;
+use vars qw($VERSION %IRSSI);
+$VERSION = "0.4";
+%IRSSI = (
+ authors => "Timo \'cras\' Sirainen",
+ contact => "tss\@iki.fi",
+ name => "chan share",
+ description => "/CHANSHARE - display people who are in more than one channel with you",
+ license => "Public Domain",
+ url => "http://irssi.org/",
+ changed => "2019-02-13",
+);
+
+sub cmd_chanshare {
+ my ($data, $server, $channel) = @_;
+ my (%channicks, @show_channels, @show_ircnets);
+
+ # get list of channels and ircnets
+ @show_channels = ();
+ @show_ircnets = ();
+ foreach my $arg (split(" ", $data)) {
+ if ($server->ischannel($arg)) {
+ push @show_channels, $arg;
+ } else {
+ push @show_ircnets, $arg;
+ }
+ }
+
+ my @checkservers = ();
+ if (scalar(@show_ircnets) == 0) {
+ # check from all servers
+ @checkservers = Irssi::servers();
+ } else {
+ # check from specified ircnets
+ foreach my $s (Irssi::servers()) {
+ foreach my $n (@show_ircnets) {
+ if ($s->{chatnet} eq $n) {
+ push @checkservers, $s;
+ last;
+ }
+ }
+ }
+ }
+
+ foreach my $s (@checkservers) {
+ my $mynick = $s->{nick};
+ foreach my $channel ($s->channels()) {
+ foreach my $nick ($channel->nicks()) {
+ my ($user, $host) = split(/@/, $nick->{host});
+ my $nickhost = $nick->{nick}." ($host)";
+ my @list = ();
+ next if ($nick->{nick} eq $mynick);
+
+ @list = @{$channicks{$nickhost}} if (exists $channicks{$nickhost});
+# Irssi::print($nickhost);
+ push @list, $channel->{name};
+ $channicks{$nickhost} = [@list];
+ }
+ }
+ }
+
+ Irssi::print("Nicks of those who share your #channels:");
+ foreach my $nick (keys %channicks) {
+ my @channels = @{$channicks{$nick}};
+ if (@channels > 1) {
+ my $chanstr = "";
+ my $ok = scalar(@show_channels) == 0;
+ foreach $channel (@channels) {
+ if (!$ok) {
+ # check the show_channels list..
+ foreach my $c (@show_channels) {
+ if ($channel eq $c) {
+ $ok = 1;
+ last;
+ }
+ }
+ }
+ $chanstr .= "$channel ";
+ }
+ Irssi::print("$chanstr : $nick") if ($ok);
+ }
+ }
+}
+
+Irssi::command_bind('chanshare', 'cmd_chanshare');
+
+# vim:set ts=8 sw=2 expandtab: