nethirc - A nethack-flavored IRC client
] [ -b dbfile
] [ -f
] [ -h hostname
] [ -i ircname
] [ -l localport
] [ -n
] [ -p port
] [ -s server
] [ -u
] [ --dump-database
] [ --help
] [ --hostname
] [ --join
] [ --nick
] [ --server
is an IRC client written almost entirely in Perl, with the help
of the "POE::Component::IRC" module from CPAN. It is named
because of the influence of nethack
, which is the theme
behind many of the things that nethirc
displays on your screen.
's command line interface is intentionally a bit different than
that of ircII
, arguably the standard IRC client.
- -b dbfile
- Use a database of quips, quotes, and other text found in dbfile.
This file can be created with the -m or --dump-database
switches, and modified with a text editor. This is a YAML file.
- -f rcfile
- Use the named file for initialization instead of the default
"~/.nethirc". This is also a YAML file.
- -h hostname
- Assert a particular hostname to IRC servers. They may not always like it.
This switch can be used to pick an interface to which to bind on a
- -i ircname
- Use the indicated witty comment as your "real name" on IRC. The
default may be less than flattering, if you do not set the
"IRCNAME" environment variable.
- -j channel
- For the first server which you specify, join the indicated channel. You
may specify this switch more than once. By default, you join no
- -l localport
- Use the indicated port for your client instead of letting the operating
system pick one for you.
- Dump NetHirc's internal database to the standard output. You can
feed this back into later invocations with -b or
- -n nick
- Use the indicated nick. If not specified, the environment variable
"IRCNICK" will be consulted. If that's empty, you will get your
login name, or something worse.
- -p port
- Connect to the indicated port on the remote server instead of the default.
The default is usually what you want.
- -s server
- Connect to the named server. If you do not have a startup file (see
-f and --rc-file), you must specify this switch.
- -u username
- Use the indicated user name, instead of choosing a default (probably your
- Ask for help.
The initialization file (see the -f
switches) is a
YAML file that has at least one top-level section, called "nethirc".
Inside it are several servers to which to connect, and how to do it. A minimal
example would be:
- Server: irc.example.com
There can also be a section called "commands", which are executed
after the first IRC server greets you. They are executed just as if they were
typed. For your own safety, please do not put anything that causes network
traffic in the "commands" section.
A more complex example of an initialization file:
- Server: irc.example.com
- Server: irc.freenode.net
Ircname: le plante du egg
- Server: irc.example.dal.net
- "#lasagna" commands:
- "/bigbrother on"
- "/count start nethirc.counts"
If it's not obvious what this file attempts to do, keep reading it until it
makes sense. :-)
Note that the file is case-sensitive, and whitespace is important.
Switches specified on the command line override things only for the first server
The database file (see -b
) is also full of YAML, and is arguably more interesting
than the initialization file.
If you see an interesting message appear on your screen, look for its
counterpart in the database file. Note that a lot of things in here may not
make sense to you unless you know the source somewhat. But don't let it stop
you from trying. :-) Perhaps the most interesting portions of the file are the
"channel_mode_comments", "complaints", formats
Start the client. Have fun. Yell at people. There is a full command set at your
disposal. Those used to ircII should have little problem with the default
Does it really matter?
The "IRCNAME" and "IRCNICK" variables retain their usual
The command set is not complete yet.
The event set is not complete yet. Need to generate more error-type events.
This client is not very oper-friendly.
DCC support is nonexistent. This may actually be a feature.
Should provide various files for i18n/l10n, based on locale, LC_LANG, whatever.
The mechanism we use should support this...once we write it. (Probably based
on various database files.)
Tony Monroe <tmonroe plus perl at nog dot net>, sometimes known as
Eggplant on EFnet.
was written in a fit of experimentation and madness and
frustration with a previous creation known as hoserchat. The main idea was, of
course, "Wouldn't a Nethack-like IRC client be cool? Or at least
amusing?" And so, several months of on-and-off development time later, I
felt that the world won't wince too much at the sight of version 0.01 of this
program. So it was released.
It went through a few revisions after that, but it suffered because its internal
architecture was rather stinky. Starting with version 0.7, its code layout
made much more sense, though it lost a good deal of its dynamic-reload
capability (which was a gross hack anyway). However, it added some random
amusements, to increase the appalling factor.
Version 0.9 was a complete rewrite to be even cleaner than version 0.7,
gratuitously interface-incompatible, yet somehow cleaner and more willing to
play nicely with multiple servers. And to take advantage of POE, which is
insanely cool. (Yes, both insane and cool.)
Version 0.91 takes advantage of new features in "POE::Component::IRC"
3.0 and later.
Version 0.92 uses the "new way" to create
"POE::Component::IRC" objects, as presented in version 3.4 and