Hack 24 Enhance irssi with Perl


Perl scripts you write yourself or select from the large range
available on the Web.irssi is a client
with a very nice Perl scripting interface. You don't
have to be a Perl programmer to enjoy this fact, as many scripts are
already available. In fact, it's hard to find
original ideas for new scripts, because everything seems to exist
already!Here we'll demonstrate some interesting scripts that
let you see what films people are watching, find out what their real
names are, obfuscate text, and so on. All of these scripts (and more)
are available for
download at http://www.irssi.org/scripts. Before you
start downloading lots of scripts, now would be a good time to
explain how to use them.
4.9.1 Using an irssi Script
There are two ways to do this. First,
of course, you have to download a script. Save it anywhere you want.
To try the script, use the /script
load command. Then do whatever you want to
see how the script works for you. If it doesn't seem
to work, don't forget to read the documentation that
accompanies the script to see if you have to change any settings to
make it work.If you like the script, just copy it to the
.irssi/scripts/autorun directory in your home
directory. Next time you start irssi, the script
will be loaded. Of course, if you don't like the
script, you can unload it using the
/script unload command.
Remember that the unload command doesn't accept
complete paths to files. Just the filename is enough.For example, if you have downloaded the imdb.pl
script and saved it in your home directory, this is how you would
load and unload it:
> /script load /home/wilmer/imdb.plIf the /script command doesn't
-!- Irssi: Loaded script imdb
> /script unload imdb
-!- Irssi: Unloaded script imdb
seem to work, you may need to recompile irssi
with Perl scripting support, or you may need to manually load the
Perl module using the /load perl command. If
you still can't get it working, please read the
irssi-building documentation for more
information.Now you can take a look at some scripts of interest and some useful
hints.
4.9.2 See What Film Everyone's Watching
You may have heard of the
Internet Movie
DataBase at http://www.imdb.com.
While using IRC, you may also have noticed people with seven-digit
numbers after their
nickname. Usually, this number
corresponds to a film on IMDB. Of course, you can look up the film on
IMDB when the user puts it in her nickbut why do that if a
script can do it for you?The script is called imdb.pl and can be found at
http://www.irssi.org/scripts/scripts/imdb.pl.
When you load it and someone changes his nick to something with an
IMDB number in it, it looks up the name of the film and tells you
what it is. Here's an example of it in use:
<pengu> i'm going to watch a movieCertainly more informative than just a number.
-!- pengu is now known as tux|0208092
-!- pengu is watching Snatch. (2000)
4.9.3 Who's Behind That Nick?
Another script you may like is
autorealname.pl (http://www.irssi.org/scripts/scripts/autorealname.pl).
When someone joins a channel, it gets the person's
"real name" from the server and
puts it in the join message. It looks like this:
-!- AxE (Alex Bylund) [~AxE@nextgentel.com] has joined #bitlbee
4.9.4 Strange Dialects
You may have seen some people talk
like this on IRC:
<Pink> PpfPpmMfm, fmpmfpmppffm pmpmffpmfpmfmppmpm pmpmppppppppffm!There are a lot of strange people on IRC, so it's
quite easy to dismiss such a message. It may seem unlikely to you,
but this really means something! To find out what it means, you can
load the kenny.pl plug-in (http://www.irssi.org/scripts/scripts/kenny.pl).
It decodes these lines automatically, and it even allows you to write
like this, using the /kenny command. When you have
the kenny script loaded, the previous line will be rendered like
this:
[kenny] <Pink> OMG, they killed kenny!This is certainly not the most useful script ever, but still
it's fun to play with for a while. Some other
encodings you can try are morse.pl,
binary.pl, dau.pl,
figlet.pl, and foo.pl, all
available directly from http://www.irssi.org/scripts.
4.9.5 Automatically Get Ops When the Channel Is Empty
There is a script
called autocycle.pl (http://www.irssi.org/scripts/scripts/autocycle.pl),
which is useful for regaining operator status if you have lost it.
When you're in an unregistered channel and
don't have operator status, this script
automatically parts and immediately rejoins the channel after the
last person has left. This usually makes you the new channel owner
and gives you operator status for that channel.
4.9.6 Keep Everyone Amused When You're Away
Another amusing
script is eliza.pl (http://www.irssi.org/scripts/scripts/eliza.pl).
When you're away and people send you a private
message, this script generates a reply and sends it back. Although
it's not hard for people to find out that
they're talking to a bot, it's
still good for some very funny conversations.You can find some very nice Eliza conversations here: http://www.xs4all.nl/~hanb/documents/eliza.
4.9.7 What Was That Query About Again?
Sometimes you close a query window
because you don't expect a reaction any more, only
to find that the person sends a reply a few seconds later. Being a
busy person, you don't have the slightest idea what
it was about any more. The queryresume.pl script
(http://www.irssi.org/scripts/scripts/queryresume.pl)
provides a useful solution. If you have logging enabled, it puts the
last lines from the log file in the query window when it
opensusually enough to understand what the person is talking
about.For example, without QueryResume, you might not
have any idea what this "wheeee"
was referring to:
22:16:35 ,--[QueryResume]By default, QueryResume gives you the last 10
22:16:35 | 21:35 pengu| yeah :)
22:16:35 | 21:36 pengu| so now i'm a groupie?
22:16:35 | 21:36 pengu| ;p
22:16:35 | 21:36 wilmer| *grin*
22:16:35 | 21:36 wilmer| yes, you're the first
22:16:35 `--<~/.irssi/irclogs/FLUT/pengu.log>->
22:16:35 -!- Irssi: Starting query in FLUT with pengu
22:16:35 pengu| wheeee
lines from the logs. If you want more (or fewer) lines, you can
change the number using the queryresume_lines
setting. For example, to get just five lines, type
/set queryresume_lines
5.
4.9.8 Other Interesting Scripts
Many more scripts are
availableenough to write another book about. If you
haven't found what you're looking
for yet, just look at the list on the irssi web
site at http://www.irssi.org/scripts. Likely, someone
has already written what you're looking for. If not,
maybe it's time to write a script yourself.
Unfortunately, there is little documentation about writing
irssi scripts, so you'll just
have to look at other examples to see how things are done.
4.9.9 The Code
Following is a small example script. It
makes a person believe she is in your ignore list, which can help to
kill some boring discussions from time to time:
#!/usr/bin/perl -wThe %IRSSI hash is used to define some information
use strict;
use vars qw($VERSION %IRSSI);
# This file is partially based on rainbow.pl
$VERSION = "1";
%IRSSI = (
authors => 'Wilmer van der Gaast',
contact => 'lintux@lintux.cx',
name => 'Fake-Ignore',
license => 'GNU GPLv2 or later',
);
use Irssi;
use Irssi::Irc;
sub fignore {
my ($text, $server, $dest) = @_;
if (!$server || !$server->{connected}) {
Irssi::print("Not connected to server");
return;
}
return unless $dest;
if ($dest->{type} eq "CHANNEL" || $dest->{type} eq "QUERY") {
$text = `date +%H:%M:%S` . ' Ignoring ALL from ' . $text;
$text =~ s/[\n\r ]+/ /gs;
$dest->command("/msg " . $dest->{name} . " " . $text );
}
}
Irssi::command_bind( "fignore", "fignore" );
about the module. This is usually the best place to put the
information about your module, such as who wrote it and how he can be
contacted. The module defines a couple of subs and, in the end, those
subs are linked to either irssi commands or
events. This example script is tied to a client command, so if you
were to type /fignore
nickname, the target user would see a
message suggesting that she is being ignored by your client. If you
want to know more about event-based scripts, you can take one of the
many other scripts as an example. Here is the result from running
this script:
/fignore brannigan
23:51:29 Ignoring ALL from brannigan
Wilmer van der Gaast