2 Irssi 0.8 documentation - http://irssi.org/
4 Copyright(c) 2000 Timo Sirainen <tss@iki.fi>
16 7. IRC commands and features
25 14. Last log (currently text version only)
26 15. Nick and word completion
27 16. Translation tables
28 17. Windowing system (text version)
29 18. Keyboard (text version)
38 Hello. I'm Timo Sirainen aka. cras, and I'm an IRC addict. :)
40 I'm actually quite new in IRC, I got my first internet connection
41 sometimes around fall 1997 and I started actively IRCing around
42 christmas. I used EPIC and BitchX mostly at the start, but soon
43 found some nice KDE IRC client which name I can't remember anymore.
44 It's author however stopped developing it after I had been using it
45 a few months. And since it had bugs and all, I wanted another nice
46 GUI IRC client. I didn't find any.
48 Since I've always been a coder and do-it-yourself guy (my own
49 offline reader and BBS software in the BBS ages), I started my own
50 IRC client at spring 1998. I called it yagIRC standing for "Yet
51 another GTK IRC client". GTK was in around version 1.0 back then,
52 and it had a lot of features/bugs which I found all the time as I
53 tried to do some "different" things than other people. These
54 sometimes prevented me of doing something some feature I wanted.
56 So, in summer 1998 I went to army and I passed development of yagIRC
57 to two guys, they did a few new features and released a version or
58 two, but finally (in summer 1999?) they put a message to web page
59 which told that they finally had stopped developing it entirely,
60 also saying that my code was a total mess :) (yes, it was a mess)
62 I got out of the army 1.1.1999. I promised to myself that I wouldn't
63 do another IRC client, but after trying to use BitchX a while, I
64 started dreaming about an IRC client which would have an excellent
65 look and feel. After trying various things, I only came up with the
66 GNOME panel applet which people still tell me that it's a great
67 feature. I was more like thinking some pretty little icons in
68 some corner telling me about new messages and other stuff..
70 I thought that I would keep Irssi a small project, just doing a few
71 little features that *I* wanted, nothing for others. But after few
72 versions and few interested people, I started coding it more and
75 Finally, after releasing version 0.6.0 (february, 1999) I realized
76 that things were getting into a big mess again. I started a rewrite,
77 I organized the code into irc-base, irc-extra, user interface and
78 GUI directories, created the signalling system for letting them
79 communicate themselves easily and released 0.7.0. This was the base
80 for the rest of the 0.7.x releases, and it did work pretty well.
81 The signalling system was excellent, for example creating text mode
82 version was really easy and you didn't need tens of (empty) gui_xxx()
83 functions like in the yagIRC days. Maintaining the text and GTK
84 versions separately was really easy too.
86 About a year later after releasing Irssi 0.7.0, I started having
87 dreams about an IRC client that would be extremely modular, like you
88 could upgrade the client to newer version ON THE FLY without needing
89 to even disconnect from the servers. I started a project codenamed
90 i2k, I took the code from Irssi, split it into more directories and
91 changed quite a lot of the code to work a bit differently.
93 I developed i2k quite a long, until I finally gave up with it since
94 it could do only some basic things, and Irssi 0.7 really needed
95 maintaining. After a while I got an idea, maybe I could merge the
96 code from the i2k to Irssi more easily than rewriting the whole
97 client. This was more easier than I thought. It's now been two
98 months since I started it, and Irssi 0.8 is looking absolutely
103 Irssi 0.8 is my fourth try to create the perfect IRC client.
104 This time I'm concentrating to the code. I try to avoid kludges, I
105 try to make as simple code as I can, and I try to provide enough
106 easy to use functions so that extending Irssi is as simple as
107 possible. I also try to keep the "bloat" features in scripts or
108 modules instead of build-in.
110 I think I'm succeeded with these goals pretty well, there's some
111 small problems but everything in the big picture looks great.
115 What about Irssi 1.0, what will it look like?
117 I was thinking about the Linux kernel versioning and keeping
118 Irssi 0.8 a stable version all the time while developing new
119 features only to Irssi 0.9. After 0.9 is finished, it will be
120 called 0.10 or 1.0 depending if I think it's ready to be called 1.0.
122 1.0's goal is that it has all the possible features anyone will
123 ever need. If not build-in, then in scripts or loadable modules.
124 Not very small goal :)
126 0.4 This documentation
128 Strange, I just created the index list and started writing this.
129 I've never been too good at documentation and I usually don't like
130 writing it, but after coding so much recently and seeing that the
131 NEWS file was getting *SO* large, I thought that I had to put all
132 these features down somewhere so people (and me!) would find them.
139 configure script accepts these parameters:
141 --enable-ipv6 Enable IPv6 support
142 --disable-curses-windows Don't use curses windows. Use this if
143 screen drawing seems too slow for some reason.
144 This option may not work properly with all
146 --enable-memdebug Enable memory debugging, great for finding
149 --enable-perl=static Build Perl support statically to irssi binary
150 (default is to build a module)
151 --enable-perl-path=dir Specify installation dir for Perl libraries
152 --disable-perl Disable Perl support
154 --with-socks Build with socks library
155 --with-bot Build irssi-bot
156 --with-proxy Build irssi-proxy module
157 --without-textui Build without text frontend
158 --with-servertest Build test irc server which you can use to try
168 1.2 Command line parameters
170 --connect -c <server> Connect to server at startup
171 --port -p <port> - specify port
172 --noconnect -! Don't autoconnect to any servers at startup
173 --nick -n Specify what nick to use
174 --hostname -h Specify what host name to use
180 Message levels (or in short, levels) are used almost everywhere.
181 They describe what kind of messages we're dealing with. Here's a
184 CRAP - Can be almost anything
185 MSGS - Private messages
186 PUBLIC - Public messages in channel
188 SNOTES - Server notices
189 CTCPS - CTCP messages
190 ACTIONS - Actions (/me) - usually ORed with PUBLIC or MSGS
191 JOINS - Someone joins a channel
192 PARTS - Someone parts a channel
193 QUITS - Someone quits IRC
194 KICKS - Someone gets kicked from channel
195 MODES - Channel mode is changed
196 TOPICS - Channel topic is changed
197 WALLOPS - Wallop is received
198 INVITES - Invite is received
199 NICKS - Someone changes nick
200 DCC - DCC related messages
201 DCCMSGS - DCC chat messages
202 CLIENTNOTICES - Irssi's notices
203 CLIENTERRORS - Irssi's error messages
204 CLIENTCRAP - Some other messages from Irssi
206 And a few special ones that could be included with the
209 HILIGHT - Text is highlighted
210 NOHILIGHT - Don't check highlighting for this message
211 NO_ACT - Don't trigger channel activity when printing
213 NEVER - Never ignore or log this message
218 3.1 Command flood protection
220 Most (all?) IRC servers' flood protection works like this
224 * check to see if client's `message timer' is less than
225 current time (set to be equal if it is);
227 * read any data present from the client;
229 * while the timer is less than ten seconds ahead of the current
230 time, parse any present messages and penalize the client by
231 2 seconds for each message;
233 which in essence means that the client may send 1 message every 2
234 seconds without being adversely affected.
237 Irssi's flood protection works the same way, except it penalizes
238 2.2 seconds by default for each message (helps with some servers).
239 You can change it with /SET cmd_queue_speed <milliseconds>. You can
240 also change the number of commands before flood protection activates
241 (ie. the burst count) with /SET cmd_max_at_once <count>.
243 IRC servers also have an input buffer where the client's commands
244 are saved before processed. It's size is server specific (can be as
245 low as 1k!) If it gets full, the server kicks you out (the
246 "Excess flood" quit message). Irssi's flood protecion protects this
247 pretty well with small commands, but if you send many big commands
248 (like >400 char long messages) fast, you could get easily kicked out.
249 Normally this isn't problem, but if you have scripts sending long
250 messages, you should remember this. I'm not sure how much you should
251 wait between the long messages, but 2 seconds isn't enough.
253 This protection is used with all commands sent to server, so you
254 don't need to worry about it with your scripts.
256 3.2 CTCP flood protection
258 Other people can pretty easily flood you with CTCP requests, and
259 even if you wouldn't get kicked out from the server, they could
260 easily grow your command queue. So, Irssi's CTCP flood protection
263 First it checks how big the CTCP reply queue is, if it's longer
264 than `max_ctcp_queue', the CTCP is ignored. You can change it with
265 /SET max_ctcp_queue <count> (default is 5).
267 After this the CTCP reply is placed to server's "idle queue", so
268 the reply is sent "when there's extra time", this means that if
269 you are busy sending other commands, it might take a while before
274 Irssi is all the time automatically checking different flooding,
275 when flood is noticed, it sends "flood" signal. This can be easily
276 used for example to create a script for kicking channel flooders.
277 Autoignore uses this also, see section 10.2.
279 Flood is detected when more than `flood_max_msgs' same kind of
280 messages arrives in `flood_timecheck' seconds to same target
281 (channel or private msg) so it isn't flooding if same user sends a
282 message to 10 different channels you are on, but it is flooding if
283 10 messages are sent to same channel by the same user.
285 Currently only messages, notices and ctcps are checked for
288 /SET flood_max_msgs = <count>, default is 4
289 /SET flood_timecheck = <seconds>, default is 5 seconds
290 If either of these is 0, the flood checking is disabled.
295 4.1 Configuration files
297 The configuration is saved to ~/.irssi/config file. You can edit
298 it with text editor if you want, you can also add comments to it
299 and they stay there even if /SAVE is used. Comments are the lines
300 starting with # character. Any errors in config file are displayed
303 Irssi uses it's own config library for handling the config file.
304 The format is pretty much the same as in libPropList and should be
305 easily understandable.
307 You can reload the config file on the fly with /RELOAD command, you
308 can also read a different config file with /RELOAD <filename>.
310 If you change any settings, they aren't saved to file until you use
311 /SAVE. You can save the config file to different place with
316 You can view or change the settings with /SET command.
318 /SET without any arguments displays all the settings.
319 /SET <key> displays settings which key (partly) matches <key>
320 /SET <key> <value> sets <key> to <value>
322 Boolean settings accepts only values ON, OFF and TOGGLE. You can
323 also use /TOGGLE command to change them, so /TOGGLE <key> behaves
324 like /SET <key> TOGGLE. /TOGGLE also accepts arguments ON and OFF
325 when /TOGGLE behaves exactly like /SET.
327 Remember that changes are not saved until you use /SAVE!
334 Irssi is multi-server friendly. You can be connected to multiple
335 different servers, or the same server multiple times. Most of the
336 settings that let you specify the channel, let you also specify IRC
339 Servers are referenced by a "server tag". If the server is known
340 to belong to some IRC network, the tag is the IRC network's name,
341 like "ircnet". If the IRC network is unknown, the tag is created
342 from the server's name, like irc.funet.fi -> funet. If the tag
343 already exists, a number is added to the end of it and raised until
346 Quit messages have a small problem if there's already a few
347 commands in server's input command queue. If the server's socket is
348 disconnected immediately after QUIT message is sent, it is possible
349 that the server didn't yet process the quit command and your quit
350 message will be "broken pipe" or something similiar. The right thing
351 to do is to let the server disconnect you, but what if the
352 connection to server is broken and the server never disconnects you?
353 I solved the problem by waiting a few seconds to see if the server
354 disconnects us. If it didn't, force the disconnect. This explains
355 the (a bit annoying) "waiting for servers to close connections"
356 message when quiting Irssi. Most IRC clients just ignore this whole
357 problem, but I hate it if my quit message isn't displayed right.
361 Different IRC networks behave a bit differently, and to be as
362 efficient as possible, Irssi needs to know a few things about them
363 or the safe defaults will be used. The default configuration file
364 contains the settings for the biggest IRC networks.
366 /IRCNET ADD [-kicks <count>] [-msgs <count>] [-modes <count>]
367 [-whois <count>] [-cmdspeed <ms>] [-cmdmax <count>]
368 [-nick <nick>] [-user <user>] [-realname <name>]
369 [-host <host>] [-autosendcmd <cmd>] <name>
371 -kicks: Maximum number of nicks in one /KICK command
372 -msgs: Maximum number of nicks in one /MSG command
373 -modes: Maximum number of mode changes in one /MODE command
374 -whois: Maximum number of nicks in one /WHOIS command
375 -cmdspeed: Same as /SET cmd_queue_speed, see section 3.1
376 -cmdmax: Same as /SET cmd_max_at_once, see section 3.1
377 -nick, -user, -realname: Specify what nick/user/name to use
378 -host: Specify what host name to use, if you have multiple
379 -autosendcmd: Command to send after connecting to a server
381 With -autosendcmd argument you can automatically run any commands
382 after connecting to ircnet. This is useful for automatically
383 identifying yourself to NickServ, for example
385 /IRCNET ADD -autosendcmd "/msg NickServ identify secret" OPN
387 /IRCNET REMOVE <name>
389 5.3 Manually connecting and disconnecting
391 To connect to a new server, use:
392 /CONNECT [-ircnet <ircnet>] [-host <hostname>] <address>|<ircnet>
393 [<port> [<password> [<nick>]]]
395 If there's no password, set it to -. You can directly connect to
396 IRC server in specified address, or you can connect to some IRC
397 network and Irssi will pick the server for you.
399 You don't need to specify the IRC network, password, nick, etc. if
400 you setup the server using /SERVER ADD (see next section). If the
401 settings can't be found there either, Irssi will use the defaults:
403 /SET default_nick = <nick>, defaults to user_name
404 /SET alternate_nick = <nick>, defaults to <default_nick>_
405 /SET user_name = <user>, defaults to your login name
406 /SET real_name = <name>, taken from /etc/passwd by default
407 /SET hostname = <host>, what host name to use when connecting
408 /SET skip_motd ON|OFF|TOGGLE - Don't show server's MOTD
410 NOTE: /CONNECT is also a command for IRC operators to connect IRC
411 servers to other IRC servers. If you want to use it, use /SCONNECT
414 You can disconnect from the server with:
415 /DISCONNECT *|<tag> [message]
417 If message isn't given, Irssi will use the default quit message. You
418 can set it with /SET quit_message <message>, default is "leaving".
420 /SERVER disconnects the server in active window and connects to new
421 one. It will take the same arguments as /CONNECT. If you prefix the
422 address with + character, Irssi won't disconnect the active server,
423 and it will create a new window where the server is connected
424 (ie. /window new hide;/connect address)
426 /SERVER without any arguments displays list of connected servers.
430 /SERVER ADD [-auto | -noauto] [-ircnet <ircnet>] [-host <hostname>]
431 [-cmdspeed <ms>] [-cmdmax <count>] [-port <port>]
432 <address> [<port> [<password>]]
434 -auto: Automatically connect to server at startup
435 -noauto: Don't connect to server at startup (default)
436 -ircnet: Specify what IRC network this server belongs to
437 -host: Specify what host name to use, if you have multiple
438 -cmdspeed: Same as /SET cmd_queue_speed, see section 3.1
439 -cmdmax: Same as /SET cmd_max_at_once, see section 3.1
440 -port: This is pretty much like the port argument later, except
441 this can be used to modify existing server's port.
443 /SERVER REMOVE <address> [<port>]
447 Servers are identified by their name and port. You can have multiple
448 entries for the same server name but in different ports. This is
449 useful for IRC proxies, in one port you could have IRCNet proxy,
450 another port would have EFNet, etc.
452 If you wish to change existing server's port to something else, use
453 -port command. For example if you had irc.server.org in port 6667
454 and you wanted to change it to port 6668, use command:
456 /SERVER ADD -port 6668 irc.server.org 6667
458 If you want to remove some settings from existing server, for
459 example hostname, just give -host "" parameters to it.
461 After connected to server, Irssi can automatically change your user
462 mode. You can set it with /SET usermode <mode>, default is +i.
464 5.5 Automatic reconnecting
466 If you get disconnected from server, Irssi will try to reconnect
467 back to some of the servers in the same IRC network. To prevent
468 flooding the server that doesn't let you in (and avoiding K-lines),
469 Irssi won't try to reconnect to the same server more often than
470 once in `server_reconnect_time' seconds. You can change it with
471 /SET server_reconnect_time <seconds>, default is 5 minutes.
473 After reconnected to server, Irssi will re-set your user mode, away
474 message and will join you back to the same channels where you were
475 before the connection was lost.
477 You can see list of the reconnections with /SERVER. The servers
478 that have tag as RECON-n are the reconnections. You can remove them
479 with /DISCONNECT <tag>, and you can reconnect to them immediately
480 with /RECONNECT <n>. /RECONNECT without any arguments will
481 disconnect from the active server and reconnect back immediately.
483 5.6 Command redirections
487 5.7 Server idle command queue
489 There's some situations when you want to ask something from the
490 server which isn't really important. For example when connected
491 to server and you didn't get your nick, Irssi asks with /WHOIS
492 who has your nick and displays it. But if you already have a lot of
493 commands in buffer, like you just autojoined to many channels,
494 you'd rather first let the JOIN commands to be sent to server
496 This is where server idle queue gets into picture. Commands in
497 idle queue are sent to server when there's nothing else in the
498 normal command queue.
500 Idle queue works with server redirections, so you can ask something
501 from server when it has time and your function is called when the
506 Irssi keeps track of people who were lost in net splits. You can
507 get a list of them with /NETSPLIT command.
509 Another use for this is with bots. Channel master can op anyone in
510 the channel and the bot happily accepts it. But if the opped user
511 is lost behind a net split and in netjoin the server gives ops for
512 the user, the bot should decide if the user (who isn't in bot's user
513 database) is a malicious attacker who should be deopped, or if
514 he/she/it is just some user that already had ops before the net
517 /SET hide_netsplit_quits - If ON, hide all netsplit quit messages
518 and display only "Netsplit host1 host2: nicks".
520 /SET netsplit_max_nicks - If non-zero, limit the number of nicks
521 printed in netsplit message and add "(+<n> more, use /NETSPLIT
522 to show all of them)" text.
526 Irssi will constantly check how big the lag to the server is. It's
527 done by sending IRSSILAG CTCP replies to ourself. Using PING command
528 for this would seem more reasonable, but there was too many problems
529 with it - some servers didn't even know the whole PING command!
531 If the lag is too big, Irssi will reconnect to different IRC server.
532 This is sometimes useful if the connection has been stuck for 30
533 minutes but it still hasn't been closed.
535 /SET lag_check_time <seconds> - Specifies how often to check the
536 lag. If it is set to 0, the lag detection is disabled. Default
538 /SET lag_max_before_disconnect <seconds> - Specifies how big the lag
539 can be before reconnecting to another server. Default is 5
541 /SET lag_min_show <100th seconds> - Specifies the minimum lag to
542 display in status bar. Default is 1 second.
546 All data that is received or sent to server is kept in a raw log
547 buffer for a while. Also event redirections are kept there. This is
548 very useful for debugging purposes.
550 /RAWLOG SAVE <filename> - Save the current raw log buffer to file
551 /RAWLOG OPEN <filename> - Like /RAWLOG SAVE, but keep the log file
552 open and write all new log to it.
553 /RAWLOG CLOSE - Close the open raw log
555 /SET rawlog_lines <count> - Specify the number of raw log lines to
563 There's several types of channels you can join, here's a list of
564 the ones that Irssi supports:
566 #channel - Normal channels, most commonly used
567 +channel - Modeless channels, channel has no modes, no channel
568 operators and no topic. This way no-one is above others
569 and there's no operator-wars etc. But on the other hand,
570 you can't kick any troublemakers..
571 &channel - Local channels, these channels aren't distributed outside
572 the IRC server. IRCNet has replaced server notices with
573 several different &channels (&ERRORS, &NOTICES, etc.)
574 !channel - New channels, currently supported only by IRCNet. These
575 channels are designed so that they can't be taken over
576 with net splits. /JOIN !channel joins to existing
577 !channel, /JOIN !!channel creates a new channel.
579 Most of the commands that take channel name as parameter, can also
580 accept * as the channel name, which means the active channel.
585 Channels can be joined with /JOIN command. You can join to multiple
586 channels with one /JOIN by giving it a comma-separated list of
587 channels, like /JOIN #channel1,#channel2. If you don't give the
588 channel mode character (#+&!) before the channel name, Irssi
589 automatically uses # channels.
591 Channel name may contain any characters except SPACE, BELL, NUL,
592 CR, LF or comma (','). You can also restrict the channel to only
593 certain users by adding the hostmask to the end of the channel
594 name separated with a ':' character, like #channel:*!*@*.fi lets
595 only people from .fi domain join the channel. This doesn't work with
596 all IRC servers and it's pretty difficult to use, since everyone
597 will have to always join the #channel:*!*@*.fi channel, #channel or
598 #channel:*!*@*.se channels are different channels. Ban exceptions
599 (+e) and especially invite lists (+I) replace this functionality
600 pretty well, see section 6.5.
602 If channel has a password (aka. key), you can join it with
603 /JOIN #channel pass, or multiple channels with passwords with
605 /JOIN #secret1,#public,#secret2 pass1,x,pass2
607 #public didn't have any password, so we used "x" as it's password.
608 It doesn't really matter what password you send with channels that
609 don't have passwords.
611 If you want to join to channel in different server than active one
612 in window, you can do it with /JOIN -<server tag> #channel, like
615 You can leave channels with /PART [<channels>] [<part message>].
616 For example "/PART byebye all" leaves the active channel with
617 "byebye all" message, or /PART #chan1,#chan2 leaves those channels.
619 NOTE: Sending JOIN 0 directly to server (/quote join 0) leaves all
620 the channels you are joined. There's been some jokes about joining
621 for example to #2000,0 where the server actually leaves you from all
622 channels. With Irssi this isn't really a problem, since irssi would
623 happily join to channels #2000 and #0.
625 6.3 Automatic joining
627 Irssi can automatically join to specified channels in specified
628 IRC networks. It can also automatically send the password when
629 manually joining to channel without specifying the password.
631 /CHANNEL ADD [-auto | -noauto] [-bots <masks>] [-botcmd <command>]
632 <channel> <ircnet> [<password>]
634 With -bots and -botcmd arguments you can automatically send
635 commands to someone in channel. This is useful for automatically
636 getting ops for channels, for example
638 /CHANNEL ADD -auto -bots "*!bot@bothost.org bot*!*@host2.org"
639 -botcmd "msg $0 op mypass" #channel ircnet
641 You can also use the -botcmd without -bots argument. The command is
642 then sent whenever you join the channel.
644 If you want to remove some settings from existing channel record,
645 for example bots, just give the -bots "" parameters to it. Password
646 can be removed by setting it to - (or actually, "" works too).
648 You can remove the channels with
649 /CHANNEL REMOVE <channel> <ircnet>
651 /CHANNEL LIST displays list of channels with settings.
652 /CHANNEL without any arguments displays list of channels you have
653 joined. You can also use /CHANNEL to join to channels just as with
654 /JOIN, like /CHANNEL #a.
656 6.4 After-join automation
658 When joined to channel, Irssi asks some information about it.
659 After it has got all of it, it prints the "Channel synchronized"
660 text. The following information is asked:
663 - WHO list to get nicks' hosts - useful for /BAN for example
664 - Ban list - useful for allowing /UNBAN to use wildcards
665 - Exception list, Invite list - these are asked only from servers
666 that support +I and +e modes, mostly just IRCNet and some EFNet
667 servers. These aren't really needed for anything currenty, except
668 /INVITELIST and /BANS uses them to display the lists.
670 If you have joined many channels at once, Irssi tries to optimize
671 the commands it sends to server. Instead of sending two commands
672 to ask two channels' mode, it just sends MODE #a,#b. Same thing with
673 WHO list and ban/except/invite lists. Some servers do not support
674 this and they reply with different kinds of error messages, Irssi
675 tries to deal with them all right and resend the commands again
676 separately. However, some strange servers sometimes use some weird
677 error replies that Irssi doesn't know about, and the channel never
678 gets synchronized. If this happens with some server you know, please
679 let the Irssi's author know about it.
683 Irssi knows these channel modes:
685 i - Invite only - People can't join to channel without being
686 /INVITEd, or being in invite list (+I, see below).
687 m - Moderated - People who don't have voices (+v) can't send
689 p - Private - People who aren't joined to channel can't see it
690 for example with /WHOISing people who are in channel.
691 s - Secret - Like private, but the channel isn't displayed in
693 n - No external msgs - Without this mode, anyone can send messages
694 to channel without even being joined.
695 t - Topic can be changed only by channel operators.
697 k <key> - Channel password (aka. key) - The channel can't be joined
698 without specifying the channel key (see section 6.2).
700 l <count> - User limit - No more than <count> people can join to
701 channel. This can be overridden with /INVITE with some
704 This is usually used for protecting channel from join
705 flooding, like some bot allows max. 5 users to join in
708 a - Anonymous - No-one's nick name, host or anything else can be
709 seen. All messages, joins, parts, modes, etc. are seen as coming
710 from nick "anonymous", this could be pretty confusing but nice
711 feature if you want total anonymity. This mode can only be set,
712 never unset. This mode isn't supported by all servers.
714 NOTE: there is/was one bug :) Channel operators can guess if some
715 nick might be in the channel and try to kick it. If nick was in
716 channel, everyone will see the nick that was kicked.
718 r - Re-op - If channel becomes opless for longer than 45 (?) minutes,
719 op everyone in the channel. This works only in !channels. This
720 mode can only be set, not unset by channel creator.
722 b - Set/remove ban. For example MODE #channel +b *!*@*.org bans
723 everyone from .org domain.
725 If someone from .org domain was already in channel before the
726 ban was set, he/she couldn't be able to write any messages to
727 channel (doesn't work with all servers).
729 Ban can also be overridden with /INVITE, although many stupid
730 IRC clients automatically kick the user out because they see
731 the ban and think that because of it the user shouldn't be in
732 the channel (doesn't work with all servers).
734 e - Ban exceptions. You could for example ban everyone from
735 *!*@*.org but set ban exception to *!*@*.host.org - works only
736 in IRCnet/EFnet servers.
738 I - Invite list. If channel is invite only (+i), people in this
739 list can join it without being /INVITEd - works only in
740 IRCnet/EFnet servers.
742 This is excellent for in-country channels that don't want
743 foreigners (spammers!) to join the channel, for example setting
744 channel's mode to +i and +I *!*@*.fi allows only finnish people
745 to join the channel. In addition to this, there's usually a bot
746 in the channels and sending /MSG bot invite command to it
747 /INVITEs you to the channel.
749 The ':' feature in channel modes is quite similiar, see section
752 O - Channel owner, the nick who creates a !channel receives this
753 mode. It isn't displayed anywhere, you can't pass it to anyone
754 else and you can't regain it again. This is needed for setting
755 +r mode in channel when it's first created.
757 o <nick> - Grant or revoke channel operator status from nick
758 v <nick> - Grant or revoke voice status from nick, only people with
759 +v (or +o) can talk to channel when it's moderated (+m).
761 You can send multiple mode changes with one mode command:
763 /MODE #channel +nto-o+v nick1,nick2,nick3
765 This would set channel's mode to +nt, give ops to nick1, take ops
766 from nick2 and give voices to nick3.
768 You can set only limited number of modes that requires argument in
769 one command. In IRCnet it's 3, in EFnet it's 4 and in many others
770 it's 6. If it's not known, Irssi defaults to 3. Irssi will also
771 automatically split them, so you can use /MODE +oooooo n1,n2,..
772 command to op 6 people and Irssi will split it to two commands in
775 Instead of manually setting o, v and b modes you probably want to
776 use /OP, /DEOP, /VOICE, /DEVOICE, /BAN and /UNBAN commands.
778 /OP, /DEOP, /VOICE and /DEVOICE commands allows wildcards as their
779 argument. So /OP ni* will op all non-opped people whose nick start
780 with "ni". /DEOP * will deop everyone else except you. /VOICE and
781 /DEVOICE work the same way.
785 You can give /BAN a list of nicks or whole ban masks. /UNBAN
786 accepts wildcards, so if you have ban nick!user@reallylonghost.org,
787 you can simply unban it with /UNBAN *really*
789 Using /BAN <nicks>, Irssi will automatically create the mask. You
790 can change the way it's created with /BANTYPE command:
792 /BANTYPE normal|host|domain|custom
794 Normal - *!user@*.domain.net
795 Host - *!*@host.domain.net
796 Domain - *!*@*.domain.net
797 Custom [nick] [user] [host] [domain]
798 eg. /bantype custom nick domain - nick!*@*.domain.net
799 eg. /bantype custom user host - *!user@host.domain.net
801 Irssi has also a couple of commands to help banning people:
803 /KICKBAN [<channel>] <nick> <reason> - ban and kick the nick
804 /KNOCKOUT [<seconds>] <nick> <reason> - kickban the nick, unban
805 after waiting <seconds>, default is 5 minutes.
809 Automatic opping the nick right after joined to channel is a pretty
810 commonly used. What mostly irritates me with this is that the nick
811 may be opped multiple times by different people, or after netsplits
812 when the people join back, the server will op them, but still the
813 bots op the people again, even if it was just done by the server.
815 Irssi has this feature that it sends a "massjoin" signal a while
816 after the real join. If someone has already opped the nick, you can
817 easily check it in the massjoin signal handler.
819 The default is to report maximum of 5 joins in one massjoin signal.
820 If the 5 joins don't come in 5 seconds, the signal is sent anyway.
821 You can change these with /SET massjoin_max_wait <milliseconds> and
822 /SET massjoin_max_joins <count>.
825 7. IRC commands and features (FIXME)
829 7.x IRC operator commands
835 Notify list is generally used for knowing when someone you know
836 comes to IRC or leaves from IRC. Traditionally notify list can
837 handle only a list of nicks, no nick masks etc. I lost interest to
838 traditional notify lists long time ago, since the people I know
839 are in IRC all the time. So I made a bit more featureful notify
842 /NOTIFY [-list] [-away] [-idle [minutes]] <mask> [ircnet [ircnet...]]
844 -away: Notifies about away-status changes
845 -idle: Notifies if idle time is first larger than <minutes>
846 (default is hour) and then it drops down.
847 -list: Lists the notify list entries with all their settings
848 <mask>: Either a simple "nick" or "nick!*@*blah.org". The nick
849 can't contain wildcards, but the user/host can.
853 /NOTIFY without any arguments displays if the people in notify
854 list are online or offline.
859 Irssi supports highlighting lines that match the specified pattern.
860 You can also change the color of the nicks that match specified nick
861 mask, so you could for example show your friends' nicks with
864 /HILIGHT [-mask | -regexp | -word] [-nick] [-color <color>]
865 [-level <level>] [-channels <channels>] <text>
867 -mask: Match only for nick, <text> is a nick mask
868 -regexp: <text> is a regular expression
869 -word: <text> must match to full words
870 -nick: Hilight only the nick, not the whole line
871 -color: Print the reply with <color> - see below
872 -level: Match only for <level> messages, default is
873 publics,msgs,notices,actions
874 -channels: Match only in <channels>
876 /DEHILIGHT <ref#> | <text>
878 /HILIGHT without any arguments displays list of the hilights.
880 By default the highlighted line will be printed with white color.
881 You can change this with the -color argument. If <color> is a
882 number, Irssi will treat it as a MIRC color code. You can also use
883 bolds (^B), underlines (^_) etc. as <color> if you like.
890 Irssi's ignoring options should be enough for everyone :)
892 /IGNORE [-regexp | -word] [-pattern <pattern>] [-replies] [-except]
893 [-channels <channel>] <mask> <levels> <^levels>
895 -regexp: <pattern> is a regular expression
896 -word: <pattern> must match to full words
897 -pattern: <pattern> must match to the message's text
898 -replies: Ignore replies to nick in channels. For example
899 "/IGNORE -replies *!*@*.fi PUBLIC" ignores everyone
900 from Finland, but also anyone sending message
901 "tofinnishnick: blahblah".
902 -except: *DON'T* ignore
903 -channels: Ignore only in channels
904 <mask>: Either a nick mask or list of channels
905 <levels>: List of levels to ignore
906 <^levels>: List of levels to NOT ignore
907 (/ignore -except nick notices = /ignore nick ^notices)
909 /UNIGNORE <ref#> | <mask>
911 /IGNORE without any arguments displays list of ignores.
913 The best match always wins, so you can have:
916 /IGNORE -except *!*@host.org CTCPS
918 10.2 Automatic ignoring
920 Irssi can automatically set ignores for people who flood you.
921 Currently you can autoignore MSGS, NOTICES, CTCPS and PUBLIC.
922 Actions are placed to either MSGS or PUBLIC. See section 3.3 for
923 definition of the flood.
925 /SET autoignore_time <seconds> specifies how long to ignore the
928 /SET autoignore_levels <levels> specifies what levels to ignore
929 automatically, default is to ignore only CTCPS.
936 /LOG OPEN [-noopen] [-autoopen] [-targets <targets>]
937 [-window] <filename> [<levels>]
939 -noopen: Create the entry to log list, but don't start logging
940 -autoopen: Automatically open this log file at startup
941 -targets: Log only in specified channels/nicks
942 -window: Log the active window
943 <filename>: File name where to log, it is parsed with
944 strftime(), so %d=day, etc. see "man strftime" for
945 more info. Irssi will automatically check every hour
946 if log should be rotated.
947 <levels>: Defaults to ALL
949 /LOG CLOSE <ref#> | <fname> - Close log and remove from log list
950 /LOG START <ref#> | <fname> - Start logging to file
951 /LOG STOP <ref#> | <fname> - Stop logging to file
952 /LOG without any arguments displays the log list
954 /SET log_create_mode <mode> - Specifies what file mode to use with
955 the created log files. Default is 0644.
957 All of these are parsed with strftime():
958 /SET log_timestamp <text> - Specifies the time stamp format.
960 /SET log_open_string <text> - Text written to log when it's opened
961 /SET log_close_string <text> - Text written to log when it's closed
962 /SET log_day_changed <text> - Text written to log when day changes
964 NOTE: Log files are locked after opened, so two Irssis can't
965 accidentally try to write to the same log file.
969 /LOG OPEN -targets cras ~/irclogs/cras.log MSGS
970 - Logs all messages from/to nick `cras'
972 /LOG OPEN -targets #linux ~/irclogs/linux/linux-%Y-%m-%d
973 - Logs all messages in channel #linux. Log is rotated daily, so
974 logs in 1. May 2000 goes to file "linux-2000-05-01", when the
975 day is changed, Irssi closes the log and starts logging to
976 "linux-2000-05-02" etc.
980 /WINDOW LOG ON|OFF|TOGGLE [<filename>]
982 Start/stop logging the active window. This works exactly like
985 /WINDOW LOGFILE <filename>
987 Sets the default log file to use in the window, it can be
988 overridden with specifying the file name in /WINDOW LOG. If no file
989 name isn't given, Irssi defaults to ~/irc.log.<windowname> or
990 ~/irc.log.Window<ref#> if window doesn't have name.
992 Creates the entry to log list, same as /LOG OPEN -window -noopen.
993 Also, if /WINDOW LOG ON is used it starts logging to this file.
995 11.3 Automatic logging
997 This is the logging method that I had been asked to implement for
998 ages, and it is really simple to use too. It logs only messages
999 that have "targets", ie. private messages and channel specific
1000 messages (msgs, modes, topics, etc). WHOIS replies and such aren't
1001 logged. If you with to log them too, use the /LOG command.
1003 So, when for example a private messages comes to you from "guy"
1004 nick, Irssi creates a log file ~/irclogs/guy.log for it. After few
1005 minutes of inactivity, the log file is closed.
1007 /SET AUTOLOG ON|OFF|TOGGLE - Enable/disable autolog.
1009 /SET AUTOLOG_LEVEL <level> - Specifies what levels to log, default
1012 /SET AUTOLOG_PATH <path> - expandos (see special_vars.txt) can be
1013 used, $0 is the target. If you are using multiple servers, it makes
1014 sense to use the server tag as part of the file name, for example
1015 ~/irclogs/$tag/$0.log (this is the default). The directories are
1016 created automatically.
1020 Irssi logs specified messages when you're away. After you set
1021 yourself unaway, Irssi will display all the messages in the awaylog.
1023 /SET awaylog_level <level> - Default is MSGS HILIGHT
1024 /SET awaylog_file <filename> - Default is ~/.irssi/away.log
1026 You can disable this feature by setting awaylog_level to NONE.
1029 .. no, the docs end here, I got bored of writing these after a few days and
1030 haven't touched these since then.