diff options
author | Timo Sirainen <cras@irssi.org> | 2000-04-26 08:11:21 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2000-04-26 08:11:21 +0000 |
commit | 94b37a898bd306c66ef3cc7b98832f983532cbac (patch) | |
tree | 76205495b9ee0e88431f5819b9258655d035fa02 /docs | |
parent | d29ca0b107a5b6abb4eadd036f37acd33bb72ed0 (diff) | |
download | irssi-94b37a898bd306c66ef3cc7b98832f983532cbac.zip |
and the docs
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@173 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'docs')
-rw-r--r-- | docs/Makefile.am | 11 | ||||
-rw-r--r-- | docs/commands.txt | 423 | ||||
-rw-r--r-- | docs/design.txt | 117 | ||||
-rw-r--r-- | docs/formats.txt | 19 | ||||
-rw-r--r-- | docs/perl.txt | 621 | ||||
-rw-r--r-- | docs/signals.txt | 222 | ||||
-rw-r--r-- | docs/special_vars.txt | 99 |
7 files changed, 1507 insertions, 5 deletions
diff --git a/docs/Makefile.am b/docs/Makefile.am index c2d6f6c2..b1fb7b24 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -1,9 +1,10 @@ EXTRA_DIST = \ FAQ \ - COMMANDS \ - FORMATS \ - PERL \ - SIGNALS \ - botnet.txt + botnet.txt \ + commands.txt \ + formats.txt \ + perl.txt \ + signals.txt \ + special_vars.txt SUBDIRS = help diff --git a/docs/commands.txt b/docs/commands.txt new file mode 100644 index 00000000..71d99396 --- /dev/null +++ b/docs/commands.txt @@ -0,0 +1,423 @@ + + ** Some definitions + + +"Level" usually means that you can use these words there: + + CRAP - Can be almost anything + MSGS - Private messages + PUBLIC - Public messages in channel + NOTICES - Notices + SNOTES - Server notices + CTCPS - CTCP messages + ACTIONS - Actions (/me) + JOINS - Someone joins a channel + PARTS - Someone parts a channel + QUITS - Someone quits IRC + KICKS - Someone gets kicked from channel + MODES - Channel mode is changed + TOPICS - Channel topic is changed + WALLS - WALL is received (not all servers support this) + WALLOPS - Wallop is received + INVITES - Invite is received + NICKS - Someone changes nick + DCC - DCC messages + CLIENTNOTICES - Irssi's notices + CLIENTERRORS - Irssi's error messages + CLIENTCRAP - Some other messages from Irssi + HILIGHT - Hilighted text + + + ** Server handling + + +CONNECT <address> [port [password [nick]]] + + Connect to specified server, if there's no password set it to - + +DISCONNECT <* / tag> [message] + + Disconnect from server + +SERVER [+]<address> [port [password [nick]]] + + Disconnect from current server and connect to new one, or with + /SERVER +address it creates a new window and connects to server + there without disconnecting. + +SERVERS + + Display a list of servers + +RMRECONNS + + Remove all servers from reconnection list + + + ** Basic IRC commands + + +QUIT [message] + + Quit irssi + +JOIN <channel> [key] [, channel...] + + Join to channel(s) + +PART [channel] [message] + + Leave from channel + +QUERY <nick> + + Create query window + +UNQUERY <nick> + + Close query window + +MSG <nick/channel> <message> + + Send message to nick/channel + +ME <message> + + Send action to channel (/me thinks..) + +NOTICE <nick/channel> <message> + + Send notice to nick/channel + +WHOIS [server/nick] <nick> + + Send WHOIS query, you can also specify from what server to ask the + information. If you type the nick twice it will ask from the same + server what nick is using. + +AWAY [-all] [message] + + Sets yourself away/unaway. If -all is used, it will set away + status in all servers + +WHO <nick/channel> + + Show WHO list + +NAMES [channel] + + List nicks (in channel) + + + ** Bit more advanced commands + + +MODE <channel/nick> <mode> + + Get/set channel/nick mode. + + Get channel modes: + b - Get ban list + e - Get ban exception list + I - Get invite list + + Set channel modes (use +/- before these): + b *!ban@mask - Set/remove ban + e *!ban@mask - Set/remove ban exception + I *!ban@mask - Set/remove channel invite + o nick - Set/remove op status + v nick - Set/remove voice status + l limit - Set remove max. people limit in channel + k key - Set/remove channel key + s - Secret + p - Private + m - Moderated + i - Invite only + n - No external messages + t - Only ops can change topic + + User modes: + i - Invisible + w - Show wallops + s - Show server notices + +TOPIC [channel] [topic] + + Get/set channel topic + +INVITE <nick> [channel] + + Invite nick to channel + +CTCP <nick/channel> <command> + + Send CTCP request to nick/channel (PING, VERSION, ..) + +NCTCP <nick/channel> <reply> + + Send CTCP reply to nick/channel + +PING <nick> + + Send CTCP PING to nick and tell how long it took to receive the reply + +ISON [nick [nick...]] + + Ask if nicks are in IRC. + +WALL [channel] <message> + + Send notice message to all operators in channel. + +OP, DEOP, VOICE, DEVOICE [channel] [nick [nick...] + + Op/deop/voice/devoice nick(s) in channel + +KICK [channel] <nick> <reason> + + Kick nick from channel + +KICKBAN [channel] <nick> <reason> + + Kick+ban nick from channel + +KNOCKOUT [secs] <nick> <reason> + + Kick+ban+delay (default to 5min)+unban + +BAN [channel] [nick [nick...]] + + Ban nick(s) in channel + +UNBAN [channel] [mask [mask...]] + + Remove ban(s) from channel + +BANSTAT [channel] + + List bans and ban exceptions in channel + +BANTYPE <normal/host/domain/custom> + + Set ban type: + + Normal - *!user@*.domain.net + Host - *!*@host.domain.net + Domain - *!*@*.domain.net + Custom [nick] [user] [host] [domain] + eg. /bantype custom nick domain - nick!*@*.domain.net + eg. /bantype custom user host - *!user@host.domain.net + +INVITELIST [channel] + + List invites (+I) in channel + +VERSION [server] + + Displays irssi version and asks IRC server's version + +VER [nick/channel] + + Sends CTCP VERSION request to nick/channel + +SV [nick/channel] + + Sends irssi version text to nick/channel + +KILL <nick> <message> + + Kill nick from irc network. [irc ops only] + +WALLOPS <message> + + Write wallops message. [irc ops only] + +QUOTE <message> + + Send raw data to irc server - DON'T USE THIS unless you really know + what you're doing! + + + ** DCC handling + + +DCC + + List DCC connections (same as DCC LIST) + +DCC CHAT <nick> + + Open DCC chat + +DCC SEND <nick> <filename> + + Send file to nick + +DCC GET <nick> [filename] + + Get file offered by nick + +DCC RESUME <nick> [filename] + + (MIRC) Resume getting file offered by nick + +DCC CLOSE <type> <nick> [filename] + + Close DCC connection + +DCC LIST + + List DCC connections + +MIRCDCC [n] + + Set MIRC style CTCPs on/off + + + ** User interface handling + + +WINDOW <NEW/CLOSE/SERVER/PREV/NEXT/GOTO/LEVEL> + + NEW [HIDDEN/TAB] + + Create new window (in tab) + + CLOSE + + Close the current window + + SERVER <tag> + + Change which server to use in current window + + PREV/NEXT/GOTO <N> + + Go to previous/next/Nth window + + LEVEL <[+/-]pub/msgs/...> + + Change window level, eg. + /window level msgs - creates messages window + /window level all -msgs - creates status window + +CLEAR + + Clear screen + +ECHO <text> + + Print text to screen + +MODES + + Open channel modes dialog (GTK/GNOME version) + +GWHOIS <nick> + + Display WHOIS information in dialog (GTK/GNOME version) + +LAST [-pub -msgs...] <text> + + Display (only public/msgs/..) lines where <text> appears + (Text version only) + + + ** Configuration + + +SET [key [value]] + + Get/set configuration. Boolean values also need to be changed + with ON/OFF/TOGGLE values (not yes/no). Settings aren't saved + to disk until you use /SAVE. + +TOGGLE key [ON|OFF] + + Same as /SET <key> TOGGLE, or if ON or OFF parameter is given + it will work just like /SET. + +SAVE + + Save configuration to disk. + +/ALIAS [-]<alias> [<command>] + + Show, add or remove aliases. Typing extra / before /command + (//command) ignores any aliases + +/UNALIAS <alias> + + Remove alias, same as /ALIAS -alias + +IGNORE [-regexp | -word] [-pattern <pattern>] [-except] + [-channels <channel>] <mask> <levels> <^levels> + + -regexp: `pattern' is a regular expression + -word: `pattern' must match to full words + -pattern: <pattern> must match to the message's text + -except: *DON'T* ignore + -channels: ignore only in channels + <mask>: either a nick mask or list of channels + <levels>: list of levels to ignore + <^levels>: list of levels to NOT ignore + (/ignore -except nick notices = /ignore nick ^notices) + +UNIGNORE <ref#> | <mask> + + Remove ignore. + +NOTIFY [-away] [-idle [minutes]] <mask> [ircnet [ircnet...]] + + Add mask (nick) to notify list for specified ircnets.. + + -away notifies about away-status changes + -idle notifies if idle time is first larger than `minutes' + (default is hour) and then it drops down. + +UNNOTIFY <mask> + + Remove mask from notify list. + +HILIGHT [-nick | -regexp | -fullword] [-color <color>] + [-level <level>] [-channels <channels>] <text> + + -nick: match only for nick + -regexp: `text' is a regular expression + -fullword: `text' must match to full words + -color: print the reply with `color' - color can be a bold (^B), + underline (^_) etc. too + -level: match only for `level' messages, default is + publics,msgs,notices,actions + -channels: match only in `channels' + +DEHILIGHT <ref#> | <text> + + Remove hilight + +LOG <CREATE/CLOSE/START/STOP/LIST> + + CREATE <filename> [<+/->level ...] [#channel/nick [ + [<+/->level ...] ...] + + Create and start logging to file + + Example: /log create mylog -all +msgs #linux +chan +public + (or simply #linux +all logs everything that appears in #linux + window). + + CLOSE <filename> + + Close log and remove from configuration + + START <filename> + + Start logging to file + + STOP <filename> + + Stop logging to file + + LIST + + List logs. diff --git a/docs/design.txt b/docs/design.txt new file mode 100644 index 00000000..66790b6a --- /dev/null +++ b/docs/design.txt @@ -0,0 +1,117 @@ + + Irssi's hierarchy is something like this: + + + sub1 sub2 + \ / + xxx IRC COMMON ICQ yyy + |____|___________|____|____| + | + GUI (gtk/gnome, qt/kde, text, none) + | + sub1 sub2 | + \ / | + xxx IRC | COMMON ICQ yyy + |____|_____|_____|____|____| + | + COMMON UI + | + sub1 sub2 | + \ / | + xxx IRC | ICQ yyy + |____|_____|_____|____| + | + CORE + / \ + lib-config lib-popt + + + (IRC, ICQ, xxx and yyy are chat protocols ..) + (sub1 and sub2 are submodules of IRC module, like DCC and flood protect) + + + Chat protocols and frontends are kept in separate modules. Common UI + and GUI modules also have the common parts which don't know anything + about the chat protocols. This should allow implementing modules to + whatever chat protocols and with whatever frontends easily. + + + ** lib-popt + + CORE depends on this for command line parameter handling. + (distributed with irssi) + + + ** lib-config + + Irssi depends on this for reading and saving configuration. + (created by me for irssi) + + + ** CORE module + + Provides some functionality that all other modules can use: + - signal handling + - keeping list of settings + - keeping list of /commands + - keeping track of loaded modules + - networking functions (with nonblocking connects, IPv6 support) + - handles connecting to servers + - raw logging of server's input/output data + - /EVAL support + - fgets() like function line_split() without any maximum line limits + - command line parameter handling + - miscellaneous useful little functions + - handles logging + + + ** COMMON UI module + + - knows basics about windows and window items (=channels, queries, ..) + - printtext() - parsing texts and feeding it for GUI to print. + - themes + - translation tables + - text hilighting + - command history + - user interface (/commands) for CORE's functionality + + + ** GUI modules + + - all the rest of the functionality needed for a working client. + + + ** IRC module + + * CORE + + - IRC specific /commands + - flood protecting commands sent to server + - creating IRC masks based on nick/address for bans, ignores, etc. + - keeps list of channels, nicks, channel modes, bans, etc. + - keeps list of servers, server settings, irc networks, + server reconnections and irc network splits + - redirection of commands' replies + - lag detection + - ctcp support and flood protection + - Handles ignoring people + + * DCC + + - DCC chat, send and get + + * FLOOD + + - detects private or channel flooding and sends "flood" signal + - automatic ignoring when flooding + + * NOTIFYLIST + + - handles notifylist + + + ** IRC UI module + + - placing channels and queries in windows + - nick completion + - printing infomation of some events diff --git a/docs/formats.txt b/docs/formats.txt new file mode 100644 index 00000000..633b0e42 --- /dev/null +++ b/docs/formats.txt @@ -0,0 +1,19 @@ + text text background + --------------------------------------------------------------------- + %k %K %0 black bold black black + %r %R %1 red bold red red + %g %G %2 green bold green green + %y %Y %3 yellow bold yellow yellow + %b %B %4 blue bold blue blue + %m %M %5 magenta bold magenta magenta + %p %P magenta (think: purple) + %c %C %6 cyan bold cyan cyan + %w %W %7 white bold white white + %n All colors turned off + %U Underline on/off + %8 Reverse on/off + %9 %_ Bold on/off + %: Insert newline + %| Marks the indentation position + %% A single % + diff --git a/docs/perl.txt b/docs/perl.txt new file mode 100644 index 00000000..94b83e11 --- /dev/null +++ b/docs/perl.txt @@ -0,0 +1,621 @@ + Running Perl scripts + -------------------- + +Place new scripts to ~/.irssi/scripts/, or /usr/lib/irssi/scripts/ +directory and run then with /RUN script. Or you could also run the +script from another place by specifying the whole path to it. Scripts +in ~/.irssi/scripts/autorun/ directory are automatically run at +startup. + +Using /PERLFLUSH closes and reopens the perl interpreter removing all +Perl scripts from memory. There's currently no way to unload a single Perl +script. Also, Irssi doesn't check if you run the same script twice or +different scripts use signal_add() for the same named function - it will +probably crash or do some weird things then. + + + Irssi's signals + --------------- + +Irssi is pretty much based on sending and handling different signals. +Like when you receive a message from server, say, +":nick!user@there.org PRIVMSG you :blahblah". Irssi will first send a +"server incoming" signal with the raw line as it's first parameter. You +probably don't want to use this signal. Next thing Irssi does is to +interpret the header and send a "server event" signal with arguments +"PRIVMSG you...", server, "nick", "user@there.org". You probably don't +want to use this either, since next irssi will send an "event privmsg" +signal with the "you :blahblah" as it's argument. You can at any point +grab the signal, do whatever you want to do with it and optionally stop +it from going any further by returning from the function with value 1. + +For example: + +-------------------------------------------------------- +sub event_privmsg { + # $data = "nick/#channel :text" + my ($data, $server, $nick, $address) = @_; + my ($target, $text) = $data =~ /^(\S*)\s:(.*)/; + + return 1 if ($text =~ /free.*porn/); + return 1 if ($nick =~ /idiot/); +} + +Irssi::signal_add("event privmsg", "event_privmsg") +-------------------------------------------------------- + +This will hide all public or private messages that match the regexp +"free.*porn" or the sender's nick contain the word "idiot". + +You can also use signal_add_last() if you wish to let the Irssi's internal +functions be run before yours. + +A list of signals that irssi send can be found from SIGNALS file. + + + Message levels + -------------- + +Several functions expect message levels. Sometimes numeric and sometimes +alphabetic. Yes, it's stupid, will fix it :) For now you can use +Irssi::level2bits() function to convert the level string to numeric. Here's +all the levels that irssi supports currently: + +CRAP, MSGS, PUBLIC, NOTICES, SNOTES, CTCPS, ACTIONS, JOINS, PARTS +QUITS, KICKS, MODES, SMODES, TOPICS, WALLOPS, INVITES, NICKS, PONGS +DCC, CLIENTNOTICE, CLIENTCRAP, CLIENTERROR, HILIGHT +(and NOHILIGHT if you don't want the message to be hilighted ever..) + +For example: + +$server->printtext("#channel", Irssi::level2bits('clientcrap'), 'Hello, world'); + +Writes text to #channel window with clientcrap level. + + + Functions that you can use in Irssi's Perl scripts + -------------------------------------------------- + +This is just my very first implementation and things will probably change. + +Commands marked with (!!) mean that you shouldn't use it unless you +know what you're doing.. + +If there's a "Xxxx::" text before the command, it means that it belongs to +that package. Like "Server::command" means that you should either call it as + Irssi::Server::command($server, $cmd); +or more easily: + $server->command($cmd); + +Commands that don't have the Xxxx prefix are called as Irssi::command(); + + + *** General + +Channel cur_channel() - return current channel +Server cur_server() - return current server + +channels() - return list of all channels +servers() - return list of all servers +commands() - return list of all commands +dccs() - return list of all dcc connections +logs() - return list of all log files +plugins() - return list of all plugins + +print(str) + Print `str' to current window as "Irssi notice". + +command(cmd, [Server server, [Channel channel]]) + Send a command `cmd' (in current channel). This will work just as if you + had typed `cmd' in command line, so you'll need to use /COMMANDS or the + text will be sent to the channel. + +Server::command(cmd, [Channel channel]) + Just like above, except different calling method. + +Channel::command(cmd) + Just like above, except different calling method. + +Server::printtext(channel, level, str) + Print `str'. + +setup_get(option) + Get value of `option' from setup and return it. + + + *** Message levels + +level2bits(level) + Level string -> number + +bits2level(bits) + Level number -> string + +combine_level(level, str) + Combine level number to level string ("+level -level"). + Return new level number. + + + *** Signals / timeouts + +signal_emit(signal, ...) + Send signal `signal' + +signal_add(signal, func) + Bind `signal' to function `func' + +signal_add_last(signal, func) + Bind `signal' to function `func'. Call `func' as late as possible. + +signal_remove(signal, func) + Unbind `signal' from function `func' + +tag timeout_add(msecs, func, data) + Call `func' every `msecs' milliseconds (1000 = 1 second) with + parameter `data'. Returns tag which can be used to stop the timeout. + +timeout_remove(tag) + Remove timeout with tag. + + + *** Commands + +Command::values() + Get some information about command. This function returns a reference to + hash table. Hash table has keys: + "cmd" - Command + "category" - Category + +command_bind(cmd, category, func) + Bind command `cmd' to call function `func'. `category' is the + category where the command is displayed in /HELP. + +command_unbind(cmd, func) + Unbind command `cmd' from function 'func. + +Server::irc_send_cmd_split(cmd, arg, max_nicks) + Split the `cmd' into several commands so `arg' argument has only + `max_nicks' number of nicks. + + Example: $server->irc_send_cmd_split("KICK #channel nick1,nick2,nick3 :byebye", 2, 2); + Irssi will send commands "KICK #channel nick1,nick2 :byebye" and + "KICK #channel nick3 :byebye" to server. + + + *** Server Connects + +This is a record where we keep connection information. All Servers and +Reconnects records have pointer to one of these. + +Connect::values() + Get some information about connect. This function returns a reference to + hash table. Hash table has keys: + "address" - Address where we connected (irc.blah.org) + "port" - Port where we connected + "password" - Password we used in connection. + + "ircnet" - IRC network + "wanted_nick" - Nick which we would prefer to use + "alternate_nick" - Alternate nick which we would prefer to use + "username" - User name + "realname" - Real name + +Connect server_create_conn(address, [port=6667, [password='', [nick='', [channels='']]]]) + Create new server connection. + + *** Server functions + +Server::values() + Get some information about server. This function returns a reference to + hash table. Hash table has keys: + "address" - Address where we connected (irc.blah.org) + "port" - Port where we connected + "password" - Password we used in connection. + + "ircnet" - IRC network + "wanted_nick" - Nick which we would prefer to use + "alternate_nick" - Alternate nick which we would prefer to use + "username" - User name + "realname" - Real name + + "tag" - Unique server tag. + "real_address" - Who the server thinks it is (irc1.blah.org) + "nick" - Current nick + "usermode" - Current user mode + "usermode_away" - Are we marked as away? 1|0 + "away_reason" - Away reason + "connected" - Is connection finished? 1|0 + "connection_lost" - Did we lose the connection (1) or was + the connection meant to be disconnected (0) + Example: + %server_info = %{Irssi::cur_server->values()}; + Irssi::print("Current server = ".$server_info{'address'}); + +Server Connect::connect() + Connect to server. + +Server::disconnect() + Disconnect from server. + +Server server_find_tag(tag) + Find server with tag + +Server server_find_ircnet(ircnet) + Find first server that is in `ircnet' + +Channel channel_find(channel) + Find `channel' from any server + +Channel Server::channel_find_level(level) + Find channel with level `level' preferably from specified server, but + fallbacks to any channel the matching level. + +Server::send_raw(cmd) + Send raw message to server, it will be flood protected so you + don't need to worry about it. + +Server::ctcp_send_reply(data) + Send CTCP reply. This will be "CTCP flood protected" so if there's too + many CTCP requests in buffer, this reply might not get sent. + + + *** Server redirections + +WARNING: It's easy to mess up the Irssi's internal server expectations with +these commands! + +This is a powerful feature of Irssi that I can't seen in other IRC clients. +You can EASILY grab the server's reply for a command you send to server +without any horrible kludges. + +Server::redirect_init(command, last, ...) + Initialize redirection for specified command. This needs to be done only + once. Irssi already initializes commands "WHOIS", "WHO", "LIST" and "ISON". + `command' is the whole name of the signal, like "command whois". + `last' specifies how many of the items in `...' is considered as the + "last event" from the command. + + Example: $server->redirection_init('command who', + 2, # 2 first events will finish the command + 'event 401', # unknown nick (finished) + 'event 315', # end of who (finished) + 'event 352'); # who line (wait..) + +Server::redirect_event(arg, last, ...) + Add redirection. `arg' is a space separated list of arguments that should + match before Irssi will redirect the event (think of /WHOIS nick nick and + doing another to different nick immediately after it, there's no way of + knowing which will return first. so, arg would be in this case 'nick'). + + `last' specifies how many of the following events are considered as + "last event" from command - just like in redirect_init(). + + `...' is `event, signal, argpos, ...`, where + `event' is the event we're waiting from server. + `signal' is the signal we will send after receiving the event. It should + always start with 'redir ' so that Irssi's perl handler knows to + send correct arguments to signal handler. + `argpos' is the argument position in event's data or -1 if it + should be ignored. + + Example: + $server->send_raw('WHOIS :cras'); + $server->redirect_event('cras', 2, + "event 318", "redir end_of_whois", -1, + "event 402", "redir no_such_server", -1, + "event 401", "redir no_such_nick", 1, + "event 311", "redir whois", 1, + "event 301", "redir whois_away", 1, + "event 312", "redir whois_server", 1, + "event 313", "redir whois_oper", 1, + "event 317", "redir whois_idle", 1, + "event 319", "redir whois_channels", 1); + In the 402-case we tried "/WHOIS nick nick" but nick didn't exist.. + +group Server::redirect_single_event(arg, last, group, event, signal, argpos) + Same as redirect_event() except you can set it up in pieces. + If `group' is 0, it will create new group and return it's id. + + + *** IRC masks + +irc_mask_match(mask, nick, user, host) + Return 1 if `mask' matches nick!user@host. + +irc_mask_match_address(mask, nick, address) + Return 1 if `mask' matches nick!address. + +irc_masks_match(masks, nick, address) + Return 1 if any mask in the `masks' (string separated with spaces) + matches nick!address. + +irc_get_mask(nick, host, flags) + Create IRC mask from nick!host. + flags = you need to combine these: + (FIXME: export the IRC_xxx defines to perl (or something)) + IRC_MASK_NICK 0x01 + IRC_MASK_USER 0x02 + IRC_MASK_HOST 0x04 + IRC_MASK_DOMAIN 0x08 + + + *** Channels + +Channel::values() + Get some information about channel. This function returns a reference to + hash table. Hash table has keys: + "server" - Server of the channel + "name" - Channel name + "type" - Channel type ("channel", "query", "dcc chat", "empty") + "topic" - Channel topic + "key" - Channel key (password) + "limit" - Max. users in channel (+l mode) + "level" - Channel's level number. + "new_data" - 0=no new data, 1=text, 2=msg, 3=msg for you + "synced" - Channel is synchronized + "wholist" - Channel has received /WHO list + "names_got" - Channel has received /NAMES list + "chanop" - You are channel operator + "left" - You just left the channel (for "channel destroyed" event) + "kicked" - You was just kicked out of the channel (for + "channel destroyed" event) + +Channel Server::channel_create(channel, type, automatic) + Create new channel with name `channel'. `type' is one of: + (FIXME: export these to perl somehow) + CHANNEL_TYPE_CHANNEL 0 + CHANNEL_TYPE_QUERY 1 + CHANNEL_TYPE_DCC_CHAT 2 + CHANNEL_TYPE_EMPTY 3 + `automatic' means that channel is created "automatically" and + Irssi will NOT change the active window to it. + +Channel::destroy() + Destroy channel. + +Channel::change_name(name) + Change channel's name + +Channel::get_mode() + Return channel's mode + +Channel Server::channel_find(channel) + Find `channel' in server. + +Channel Server::channel_find_closest(channel, level) + Find `channel' or if not found, some other channel that has + level `level' (number). + +Channel channel_find_level(level) + Find channel with level `level'. + + + *** Channel modes + +Ban::values() + Get some information about ban. This function returns a reference to + hash table. Hash table has keys: + "ban" - The ban + "setby" - Nick of who set the ban + "time" - Timestamp when ban was set + +Ban Channel::ban_add(ban, nick, time) + Add new ban. (!!) + +Channel::ban_remove(ban) + Remove ban. (!!) + +Ban Channel::ban_exception_add(ban, nick, time) + Add ban exception (!!) + +Channel::ban_exception_remove(ban) + Remove ban exception (!!) + +Channel::invitelist_add(mask) + Add invite (!!) + +Channel::invitelist_remove(mask) + Remove invite (!!) + +Channel::modes_parse_channel(setby, modestr) + Parse mode string (!!) + +Channel::ban_get_mask(nick) + Get ban mask for `nick'. + +Channel::modes_set(data, mode) + Set mode `mode' ("+o", "-o", etc.) to all nicks in `data' + separated with spaces. + + + *** Nick list + +Nick::values() + Get some information about nick. This function returns a reference to + hash table. Hash table has keys: + "nick" - Plain nick + "host" - Host (blah@there.org) + "name" - Real name + "hops" - Hop count to the server nick is using + "op", "voice", "gone", "ircop" - 1 or 0 + "last_check" - timestamp when last checked gone/ircop status. + "send_massjoin" - Waiting to be sent in a "massjoin" signal - 1 or 0 + +Nick Channel::nicklist_insert(nick, op, voice, send_massjoin) + Add nick to nicklist. (!!) + +Channel::nicklist_remove(nick) + Remove nick from nicklist. (!!) + +Nick Channel::nicklist_find(mask) + Find nick from nicklist. + +Channel::nicklist_getnicks(channel) + Return a list of all nicks (Nick packages) in channel. + + + *** DCC + +Dcc:destroy() + Destroy DCC connection. (!!) + +dcc_type2str(type) + DCC type number to string + +dcc_str2type(type) + DCC type string to number + +Dcc dcc_find_item(type, nick, arg) + Find DCC connection. + +Dcc dcc_find_by_port(nick, port) + Find DCC connection by port. + + + *** Reconnects + +Reconnect::values() + Get some information about reconnect. This function returns a reference to + hash table. Hash table has keys: + "tag" - Unique numeric tag + "next_connect" - Unix time stamp when the next connection occurs + + "address" - Address where we connected (irc.blah.org) + "port" - Port where we connected + "password" - Password we used in connection. + + "ircnet" - IRC network + "wanted_nick" - Nick which we would prefer to use + "alternate_nick" - Alternate nick which we would prefer to use + "username" - User name + "realname" - Real name + + + *** Netsplits + +Netsplit::values() + Get some information about netsplit. This function returns a reference to + hash table. Hash table has keys: + "nick" - Nick + "address" - Nick's host + "server" - The server nick was in + "destserver" - The other server where split occured. + "destroy" - Timestamp when this record should be destroyed + /*FIXME: add list of channels the nick was in;*/ + +Netsplit Server::netsplit_find(nick, address) + Check if nick!address is on the other side of netsplit. Netsplit records + are automatically removed after 30 minutes (current default).. + +Nick Server::netsplit_find_channel(nick, address, channel) + Find nick record for nick!address in channel `channel'. + + + *** Notify list + +notifylist_add(nick, ircnet) + Add `nick' to notify list in irc network `ircnet' + +Server notifylist_ison(nick, ircnets) + Check if `nick' is in IRC. `ircnets' is a space separated + list of irc networks. If it's empty string, all servers will be checked. + +Server::notifylist_ison_server(nick) + Check if `nick' is on IRC server. + + + *** Rawlog + +Server::rawlog_input(str) + Send `str' to raw log as input text. (!!) + +Server::rawlog_output(str) + Send `str' to raw log as output text. (!!) + +Server::rawlog_redirect(str) + Send `str' to raw log as redirection text. (!!) + + + *** Ignores + +Autoignore::values() + Get some information about autoignore. This function returns a reference to + hash table. Hash table has keys: + "nick" - Ignored nick + "timeleft" - Seconds left to ignore + "level" - Ignoring level number + +ignore_add(mask, level) + Ignore `mask' with level string + +ignore_remove(mask, level) + Unignore level string from `mask' + +Server::ignore_check(nick, host, type) + Return 1 if nick!host is ignored with level number `type'. + +Server::autoignore_add(type, nick) + Autoignore `nick' in server with level number `type'. + +Server::autoignore_remove(mask, level) + Remove autoignoring `nick' from server. `level' is a string. + + + *** Logging + +Log::values() + Get some information about log. This function returns a reference to + hash table. Hash table has keys: + "fname" - Log file name + "autoopen_log" - Automatically open log at startup + "last" - Timestamp when last write occured. + "level" - Global logging level. + /*FIXME: add list of Logitems;*/ + +Logitem::values() + Get some information about logitem. This function returns a reference to + hash table. Hash table has keys: + "name" - Log item name. + "level" - Logging level number. + +Log log_create(fname, data) + Create log file. `data' = logging level ("-all #channel +public") + +Log log_create_with_level(fname, level) + Create log file with level number. + +Log log_file_find(fname) + Find log file. + +Log::destroy() + Destroy log file + +Log::open() + Start logging + +Log::close() + Stop logging + +Log::append_item(name, level) + Append log item with level number `level' to log file. (!!) + +Log::remove_item(log, name) + Remove log item. (!!) + + + *** Plugins + +Plugin::values() + Get some information about plugin. This function returns a reference to + hash table. Hash table has keys: + "name" - Plugin name + "description" - Plugin description + +plugin_load(name, args) + Load plugin. + +plugin_get_description(name) + Get plugin description string. + +Plugin plugin_find(name) + Find plugin. diff --git a/docs/signals.txt b/docs/signals.txt new file mode 100644 index 00000000..f3c4881c --- /dev/null +++ b/docs/signals.txt @@ -0,0 +1,222 @@ +IRC base +-------- + +* Requires to work properly: + + "gui exit" + "gui channel open", CHANNEL_REC + "send command", char *command, SERVER_REC, CHANNEL_REC + +* Provides signals: + +irc.c: + + "send command", char *args, SERVER_REC + "command "<cmd>, char *args, SERVER_REC, CHANNEL_REC + "default command", char *args, SERVER_REC, CHANNEL_REC + + "server event", char *data, SERVER_REC, char *sender_nick, char *sender_address + "event "<cmd>, char *args, SERVER_REC, char *sender_nick, char *sender_address + "default event", char *data, SERVER_REC, char *sender_nick, char *sender_address + + "server incoming", SERVER_REC, char *data + +(for perl parser..) + "redir "<cmd>, char *args, SERVER_REC, char *sender_nick, char *sender_address + +bans.c: + + "ban new", BAN_REC + "ban remove", BAN_REC + "ban exception new", BAN_REC + "ban exception remove", BAN_REC + "ban type changed", char *bantype + +commands.c: + "commandlist new", COMMAND_REC + "commandlist remove", COMMAND_REC + +channels.c: + + "channel created", CHANNEL_REC + "channel destroyed", CHANNEL_REC + "channel name changed", CHANNEL_REC + "channel topic changed", CHANNEL_REC + "channel server changed", CHANNEL_REC, SERVER_REC *oldserver + + "channel query", CHANNEL_REC + "channel wholist", CHANNEL_REC + "channel sync", CHANNEL_REC + +ctcp.c: + + "ctcp msg "<cmd>, char *args, SERVER_REC, char *nick, char *addr, char *target + "default ctcp msg", char *args, SERVER_REC, char *nick, char *addr, char *target + "ctcp reply "<cmd>, char *args, SERVER_REC, char *nick, char *addr, char *target + "default ctcp reply", char *args, SERVER_REC, char *nick, char *addr, char *target + +lag.c: + + "server lag", SERVER_REC + "server lag disconnect", SERVER_REC + "lag", char *server, int lag + +modes.c: + + "invitelist new", CHANNEL_REC, char *mask + "invitelist remove", CHANNEL_REC, char *mask + + "channel mode changed", CHANNEL_REC + "user mode changed", SERVER_REC + "nick mode changed", CHANNEL_REC, NICK_REC + +netsplit.c: + + "netsplit add", NETSPLIT_REC + "netsplit remove", NETSPLIT_REC + +nicklist.c: + + "nicklist new", CHANNEL_REC, NICK_REC + "nicklist remove", CHANNEL_REC, NICK_REC + "nicklist changed", CHANNEL_REC, NICK_REC, char *oldnick + "nick gone changed", CHANNEL_REC, NICK_REC + "nick ircop changed", CHANNEL_REC, NICK_REC + "server nick changed", SERVER_REC + "massjoin", CHANNEL_REC, GSList of NICK_RECs + +rawlog.c: + + "rawlog", SERVER_REC, char *data + +server.c: + + "server connect failed", SERVER_REC + "server connected", SERVER_REC + "server connecting", SERVER_REC, ulong *ip + "server looking", SERVER_REC + "server disconnected", SERVER_REC + "event connected", SERVER_REC + +server-reconnect.c: + + "server reconnect new", RECONNECT_REC + "server reconnect remove", RECONNECT_REC + "server reconnect not found", char *tag + +signal.c: + + "signal", char *name, ... + "last signal", char *name, ... + +IRC extra +--------- + +* Requires to work properly: + + "print text stripped", SERVER_REC, char *channel, int level, char *text + "plugin add menu", char *menuitem, void (*func) (gpointer, PLUGIN_REC), PLUGIN_REC + +* Provides signals: + +dcc.c: + + "dcc ctcp "<cmd>, char *args, DCC_REC + "default dcc ctcp", char *args, DCC_REC + "dcc unknown ctcp", char *args, char *sender, char *sendaddr + + "dcc reply "<cmd>, char *args, DCC_REC + "default dcc reply", char *args, DCC_REC + "dcc unknown reply", char *args, char *sender, char *sendaddr + + "dcc chat message", DCC_REC, char *msg + + "dcc created", DCC_REC + "dcc destroyed", DCC_REC + "dcc connected", DCC_REC + "dcc rejecting", DCC_REC + "dcc closed", DCC_REC + "dcc chat message", DCC_REC, char *msg + "dcc transfer update", DCC_REC + "dcc request", DCC_REC + "dcc get receive", DCC_REC + "dcc error connect", DCC_REC + "dcc error file create", DCC_REC, char *filename + "dcc error file not found", char *nick, char *filename + "dcc error get not found", char *nick + "dcc error send exists", char *nick, char *filename + "dcc error unknown type", char *type + "dcc error close not found", char *type, char *nick, char *filename + +flood.c: + + "flood", SERVER_REC, char *nick, char *host, char *level, char *target + +ignore.c: + + "autoignore new", SERVER_REC, AUTOIGNORE_REC + "autoignore remove", SERVER_REC, AUTOIGNORE_REC + +log.c: + + "log new", LOG_REC + "log remove", LOG_REC + "log locked", LOG_REC + "log started", LOG_REC + "log stopped", LOG_REC + "log written", LOG_REC, char *line + +notifylist.c: + + "notifylist new", NOTIFYLIST_REC + "notifylist remove", NOTIFYLIST_REC + "notifylist joined", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg + "notifylist away changed", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg + "notifylist unidle", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg + "notifylist left", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg + +plugins.c: + + "plugin created", PLUGIN_REC + "plugin loaded", PLUGIN_REC + "plugin destroyed", PLUGIN_REC + + "plugin error already loaded", char *plugin + "plugin error invalid", char *plugin + "plugin error load", char *plugin, char *error + "plugin error not loaded", char *plugin + "plugin error version", char *plugin + +UI common +--------- + +* Requires to work properly: + + "gui print text", CHANNEL_REC, int fg, int bg, int flags, char *text + "gui window goto", int number + +* Can be used to determine when all "gui print text"s are sent (not required) + + "print text finished", CHANNEL_REC + +* Provides signals: + +ui-keyboard.c: + + "keyinfo created", KEYINFO_REC + "keyinfo destroyed", KEYINFO_REC + +ui-printtext.c: + + "print text", SERVER_REC, char *channel, int level, char *text + "print text stripped", SERVER_REC, char *channel, int level, char *text + +ui-themes.c: + + "theme created", THEME_REC + "theme destroyed", THEME_REC + +ui-windows.c: + + "window created", WINDOW_REC + "window destroyed", WINDOW_REC diff --git a/docs/special_vars.txt b/docs/special_vars.txt new file mode 100644 index 00000000..4890b55a --- /dev/null +++ b/docs/special_vars.txt @@ -0,0 +1,99 @@ +NOTE: This is just a slightly modified file taken from EPIC's help. +'!' at start of the line means that the feature doesn't work yet.. + +Special Variables and Expandos + +Irssi supports a number of reserved, dynamic variables, sometimes +referred to as expandos. They are special in that the client is +constantly updating their values automatically. There are also +numerous variable modifiers available. + + Modifier Description + $variable A normal variable, expanding to the first match of: + | 1) an internal SET variable + | 2) an environment variable + $[num]variable Expands to the variables value, with 'num' width. If + | the number is negative, the value is right-aligned. + | The value is padded to meet the width with the + | character given after number (default is space). + | The value is truncated to specified width unless + | '!' character precedes the number. + $#variable Expands to the number of words in $variable. If $variable + | is omitted, it assumes $* + $@variable Expands to the number of characters in $variable. if + | $variable is omitted, it assumes $* + $($subvariable) This is somewhat similar to a pointer, in that the + | value of $subvar is taken as the name of the + | variable to expand to. Nesting is allowed. + ${expression} Permits the value to be embedded in another string + | unambiguously. + $!history! Expands to a matching entry in the client's command + | history, wildcards allowed. + +Whenever an alias is called, these expandos are set to the arguments passed +to it. If none of these expandos are used in the alias, or the $() form +shown above, any arguments passed will automatically be appended to the last +command in the alias. + + Expando Description + $* expands to all arguments passed to an alias + $n expands to argument 'n' passed to an alias (counting from zero) + $n-m expands to arguments 'n' through 'm' passed to an alias + $n- expands to all arguments from 'n' on passed to an alias + $-m expands to all arguments up to 'm' passed to an alias + $~ expands to the last argument passed to an alias + +These variables are set and updated dynamically by the client. The case of +$A .. $Z is important. + + Variable Description + $, last person who sent you a MSG + $. last person to whom you sent a MSG + $: last person to join a channel you are on + $; last person to send a public message to a channel you are on + $A text of your AWAY message, if any + $B body of last MSG you sent + $C current channel + $D last person that NOTIFY detected a signon for + $E idle time + $F time client was started, $time() format + $H current server numeric being processed + $I channel you were last INVITEd to + $J client version text string + $K current value of CMDCHARS + $L current contents of the input line + $M modes of current channel, if any + $N current nickname + $O value of STATUS_OPER if you are an irc operator + $P if you are a channel operator in $C, expands to a '@' + $Q nickname of whomever you are QUERYing + $R version of current server + $S current server name + $T target of current input (channel or QUERY nickname) +! $U value of cutbuffer + $V client release date (numeric version string) + $W current working directory + $X your /userhost $N address (user@host) + $Y value of REALNAME + $Z time of day (hh:mm) + $$ a literal '$' + +For example, assume you have the following alias: + + alias blah msg $D Hi there! + +If /blah is passed any arguments, they will automatically be appended to the +MSG text. For example: + + /blah oops /* command as entered */ + "Hi there! oops" /* text sent to $D */ + +Another useful form is ${}. In general, variables can be embedded inside +strings without problems, assuming the surrounding text could not be +misinterpreted as part of the variable name. This form guarantees that +surrounding text will not affect the expression's return value. + + /eval echo foo$Nfoo /* breaks, looks for $nfoo */ + /eval echo foo${N}foo /* ${N} returns current nickname */ + fooYourNickfoo /* returned by above command */ + |