diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2006-05-13 21:04:27 +0000 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2006-05-13 21:04:27 +0000 |
commit | 01aa8472c0d7a6424dc40d8014844eb623563b52 (patch) | |
tree | c73964324749dc72d1db8e42ae094e12c3b924b2 /src | |
parent | c1ce18e2f67a3cd64e21f6dc507d387abe837803 (diff) | |
download | weechat-01aa8472c0d7a6424dc40d8014844eb623563b52.zip |
Added charset encoding for some command arguments (like /me, /msg, /query, ..)
Diffstat (limited to 'src')
-rw-r--r-- | src/common/command.c | 79 | ||||
-rw-r--r-- | src/common/command.h | 2 | ||||
-rw-r--r-- | src/irc/irc-commands.c | 396 | ||||
-rw-r--r-- | src/irc/irc.h | 2 |
4 files changed, 250 insertions, 229 deletions
diff --git a/src/common/command.c b/src/common/command.c index 3c5644ab8..65165683d 100644 --- a/src/common/command.c +++ b/src/common/command.c @@ -52,7 +52,7 @@ t_weechat_command weechat_commands[] = " command: command name (WeeChat or IRC command, many commands " "can be separated by semicolons)\n" "arguments: arguments for command"), - "%- %A", 0, MAX_ARGS, NULL, weechat_cmd_alias }, + "%- %A", 0, MAX_ARGS, 1, NULL, weechat_cmd_alias }, { "buffer", N_("manage buffers"), N_("[action [args] | number | [[server] [channel]]]"), N_(" action: action to do:\n" @@ -63,50 +63,50 @@ t_weechat_command weechat_commands[] = "server\n" "channel: jump to buffer by server and/or channel name\n" " number: jump to buffer by number"), - "move|close|list|notify", 0, MAX_ARGS, NULL, weechat_cmd_buffer }, + "move|close|list|notify", 0, MAX_ARGS, 0, NULL, weechat_cmd_buffer }, { "builtin", N_("launch WeeChat/IRC builtin command (do not look at plugins handlers or aliases)"), N_("command"), N_("command: command to execute (a '/' is automatically added if not found at beginning of command)\n"), - "%w|%i", 0, MAX_ARGS, NULL, weechat_cmd_builtin }, + "%w|%i", 0, MAX_ARGS, 1, NULL, weechat_cmd_builtin }, { "charset", N_("change charset for server or channel"), N_("[(decode_iso | decode_utf | encode) charset]"), N_("decode_iso: charset used for decoding ISO\n" "decode_utf: charset used for decoding UTF\n" " encode: charset used for encoding messages\n" " charset: charset to use (for example: ISO-8859-15, UTF-8,..)"), - "decode_iso|decode_utf|encode", 0, 2, weechat_cmd_charset, NULL }, + "decode_iso|decode_utf|encode", 0, 2, 0, weechat_cmd_charset, NULL }, { "clear", N_("clear window(s)"), N_("[-all]"), N_("-all: clear all windows"), - "-all", 0, 1, weechat_cmd_clear, NULL }, + "-all", 0, 1, 0, weechat_cmd_clear, NULL }, { "connect", N_("connect to a server"), N_("[servername]"), N_("servername: server name to connect"), - "%S", 0, 1, weechat_cmd_connect, NULL }, + "%S", 0, 1, 0, weechat_cmd_connect, NULL }, { "disconnect", N_("disconnect from a server"), N_("[servername]"), N_("servername: server name to disconnect"), - "%S", 0, 1, weechat_cmd_disconnect, NULL }, + "%S", 0, 1, 0, weechat_cmd_disconnect, NULL }, { "dcc", N_("starts DCC (file or chat) or close chat"), N_("action [nickname [file]]"), N_(" action: 'send' (file) or 'chat' or 'close' (chat)\n" "nickname: nickname to send file or chat\n" " file: filename (on local host)"), - "chat|send|close %n %f", 1, MAX_ARGS, NULL, weechat_cmd_dcc }, + "chat|send|close %n %f", 1, MAX_ARGS, 0, NULL, weechat_cmd_dcc }, { "debug", N_("print debug messages"), N_("dump | windows"), N_(" dump: save memory dump in WeeChat log file (same dump is written when WeeChat crashes)\n" "windows: display windows tree"), - "dump|windows", 1, 1, weechat_cmd_debug, NULL }, + "dump|windows", 1, 1, 0, weechat_cmd_debug, NULL }, { "help", N_("display help about commands"), N_("[command]"), N_("command: name of a WeeChat or IRC command"), - "%w|%i|%h", 0, 1, weechat_cmd_help, NULL }, + "%w|%i|%h", 0, 1, 0, weechat_cmd_help, NULL }, { "history", N_("show buffer command history"), N_("[clear | value]"), N_("clear: clear history\n" "value: number of history entries to show"), - "clear", 0, 1, weechat_cmd_history, NULL }, + "clear", 0, 1, 0, weechat_cmd_history, NULL }, { "ignore", N_("ignore IRC messages and/or hosts"), N_("[mask [[type | command] [channel [server]]]]"), N_(" mask: nick or host mask to ignore\n" @@ -117,7 +117,7 @@ t_weechat_command weechat_commands[] = "For each argument, '*' means all.\n" "Without argument, /ignore command lists all defined ignore."), "*|%n *|action|ctcp|dcc|pv|%I *|%c *|%s", - 0, 4, weechat_cmd_ignore, NULL }, + 0, 4, 0, weechat_cmd_ignore, NULL }, { "key", N_("bind/unbind keys"), N_("[key function/command] [unbind key] [functions] [reset -yes]"), N_(" key: bind this key to an internal function or a command " @@ -126,12 +126,12 @@ t_weechat_command weechat_commands[] = "functions: list internal functions for key bindings\n" " reset: restore bindings to the default values and delete ALL " "personal bindings (use carefully!)"), - "unbind|functions|reset %k", 0, MAX_ARGS, NULL, weechat_cmd_key }, + "unbind|functions|reset %k", 0, MAX_ARGS, 0, NULL, weechat_cmd_key }, { "plugin", N_("list/load/unload plugins"), N_("[load filename] | [autoload] | [reload] | [unload]"), N_("filename: WeeChat plugin (file) to load\n\n" "Without argument, /plugin command lists all loaded plugins."), - "load|autoload|reload|unload", 0, 2, weechat_cmd_plugin, NULL }, + "load|autoload|reload|unload", 0, 2, 0, weechat_cmd_plugin, NULL }, { "server", N_("list, add or remove servers"), N_("[servername] | " "[servername hostname port [-auto | -noauto] [-ipv6] [-ssl] [-pwd password] [-nicks nick1 " @@ -149,10 +149,10 @@ t_weechat_command weechat_commands[] = " nick3: second alternate nick for server\n" " username: user name\n" " realname: real name of user"), - NULL, 0, MAX_ARGS, weechat_cmd_server, NULL }, + NULL, 0, MAX_ARGS, 0, weechat_cmd_server, NULL }, { "save", N_("save config to disk"), N_("[file]"), N_("file: filename for writing config"), - NULL, 0, 1, weechat_cmd_save, NULL }, + NULL, 0, 1, 0, weechat_cmd_save, NULL }, { "set", N_("set config options"), N_("[option [ = value]]"), N_("option: name of an option (if name is full " @@ -160,16 +160,16 @@ t_weechat_command weechat_commands[] = " value: value for option\n\n" "Option may be: servername.server_xxx where \"servername\" is an " "internal server name and \"xxx\" an option for this server."), - "%o = %v", 0, MAX_ARGS, NULL, weechat_cmd_set }, + "%o = %v", 0, MAX_ARGS, 0, NULL, weechat_cmd_set }, { "setp", N_("set plugin config options"), N_("[option [ = value]]"), N_("option: name of a plugin option\n" " value: value for option\n\n" "Option is format: plugin.option, example: perl.myscript.item1"), - "%O = %V", 0, MAX_ARGS, NULL, weechat_cmd_setp }, + "%O = %V", 0, MAX_ARGS, 0, NULL, weechat_cmd_setp }, { "unalias", N_("remove an alias"), N_("alias_name"), N_("alias_name: name of alias to remove"), - "%a", 1, 1, NULL, weechat_cmd_unalias }, + "%a", 1, 1, 0, NULL, weechat_cmd_unalias }, { "unignore", N_("unignore IRC messages and/or hosts"), N_("[number | [mask [[type | command] [channel [server]]]]]"), N_(" number: # of ignore to unignore (number is displayed by list of ignore)\n" @@ -181,16 +181,16 @@ t_weechat_command weechat_commands[] = "For each argument, '*' means all.\n" "Without argument, /unignore command lists all defined ignore."), "*|%n *|action|ctcp|dcc|pv|%I *|%c *|%s", - 0, 4, weechat_cmd_unignore, NULL }, + 0, 4, 0, weechat_cmd_unignore, NULL }, { "upgrade", N_("upgrade WeeChat without disconnecting from servers"), "", N_("This command run again WeeChat binary, so it should have been compiled " "or installed with a package manager before running this command."), - NULL, 0, 0, weechat_cmd_upgrade, NULL }, + NULL, 0, 0, 0, weechat_cmd_upgrade, NULL }, { "uptime", N_("show WeeChat uptime"), N_("[-o]"), N_("-o: send uptime on current channel as an IRC message"), - "-o", 0, 1, weechat_cmd_uptime, NULL }, + "-o", 0, 1, 0, weechat_cmd_uptime, NULL }, { "window", N_("manage windows"), N_("[list | -1 | +1 | b# | up | down | left | right | splith [pct] " "| splitv [pct] | resize pct | merge [all]]"), @@ -210,8 +210,8 @@ t_weechat_command weechat_commands[] = "size of new window, computed with current window as size reference. " "For example 25 means create a new window with size = current_size / 4"), "list|-1|+1|up|down|left|right|splith|splitv|resize|merge all", - 0, 2, weechat_cmd_window, NULL }, - { NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL } + 0, 2, 0, weechat_cmd_window, NULL }, + { NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL } }; t_weechat_alias *weechat_alias = NULL; @@ -672,8 +672,8 @@ int exec_weechat_command (t_irc_server *server, t_irc_channel *channel, char *string, int only_builtin) { - int i, rc, argc, return_code, length1, length2; - char *command, *pos, *ptr_args, **argv, *alias_command; + int i, rc, argc, argc2, return_code, length1, length2; + char *command, *pos, *ptr_args, *ptr_args2, **argv, **argv2, *alias_command; char **commands, **ptr_cmd, **ptr_next_cmd; t_weechat_alias *ptr_alias; @@ -797,7 +797,6 @@ exec_weechat_command (t_irc_server *server, t_irc_channel *channel, char *string free_multi_command (commands); } } - free_exploded_string (argv); free (command); return 1; @@ -842,12 +841,19 @@ exec_weechat_command (t_irc_server *server, t_irc_channel *channel, char *string } else { + ptr_args2 = (weechat_commands[i].charset_conversion && ptr_args) ? + channel_iconv_encode (server, channel, ptr_args) : NULL; if (weechat_commands[i].cmd_function_args) + { + argv2 = explode_string ((ptr_args2) ? ptr_args2 : ptr_args, + " ", 0, &argc2); return_code = (int) (weechat_commands[i].cmd_function_args) - (server, channel, argc, argv); + (server, channel, argc2, argv2); + free_exploded_string (argv2); + } else return_code = (int) (weechat_commands[i].cmd_function_1arg) - (server, channel, ptr_args); + (server, channel, (ptr_args2) ? ptr_args2 : ptr_args); if (return_code < 0) { irc_display_prefix (NULL, NULL, PREFIX_ERROR); @@ -855,6 +861,8 @@ exec_weechat_command (t_irc_server *server, t_irc_channel *channel, char *string _("%s command \"%s\" failed\n"), WEECHAT_ERROR, command + 1); } + if (ptr_args2) + free (ptr_args2); } free_exploded_string (argv); free (command); @@ -920,12 +928,19 @@ exec_weechat_command (t_irc_server *server, t_irc_channel *channel, char *string free (command); return 0; } + ptr_args2 = (irc_commands[i].charset_conversion && ptr_args) ? + channel_iconv_encode (server, channel, ptr_args) : NULL; if (irc_commands[i].cmd_function_args) + { + argv2 = explode_string ((ptr_args2) ? ptr_args2 : ptr_args, + " ", 0, &argc2); return_code = (int) (irc_commands[i].cmd_function_args) - (server, channel, argc, argv); + (server, channel, argc2, argv2); + free_exploded_string (argv2); + } else return_code = (int) (irc_commands[i].cmd_function_1arg) - (server, channel, ptr_args); + (server, channel, (ptr_args2) ? ptr_args2 : ptr_args); if (return_code < 0) { irc_display_prefix (NULL, NULL, PREFIX_ERROR); @@ -933,6 +948,8 @@ exec_weechat_command (t_irc_server *server, t_irc_channel *channel, char *string _("%s command \"%s\" failed\n"), WEECHAT_ERROR, command + 1); } + if (ptr_args2) + free (ptr_args2); } free_exploded_string (argv); free (command); diff --git a/src/common/command.h b/src/common/command.h index a22b5bf2c..ae41d501c 100644 --- a/src/common/command.h +++ b/src/common/command.h @@ -38,6 +38,8 @@ struct t_weechat_command char *completion_template; /* template for completion */ /* NULL=no completion, ""=default (nick) */ int min_arg, max_arg; /* min & max number of arguments */ + int charset_conversion; /* = 1 if cmd args are converted before */ + /* they're executed */ int (*cmd_function_args)(t_irc_server *, t_irc_channel *, int, char **); /* function called when user enters cmd */ int (*cmd_function_1arg)(t_irc_server *, t_irc_channel *, char *); diff --git a/src/irc/irc-commands.c b/src/irc/irc-commands.c index d5efa868f..e10fb660b 100644 --- a/src/irc/irc-commands.c +++ b/src/irc/irc-commands.c @@ -34,105 +34,105 @@ t_irc_command irc_commands[] = { { "admin", N_("find information about the administrator of the server"), N_("[target]"), N_("target: server"), - NULL, 0, 1, 1, NULL, irc_cmd_send_admin, NULL }, + NULL, 0, 1, 0, 1, NULL, irc_cmd_send_admin, NULL }, { "ame", N_("send a CTCP action to all channels of all connected servers"), N_("message"), N_("message: message to send"), - "", 1, MAX_ARGS, 1, NULL, irc_cmd_send_ame, NULL }, + "", 1, MAX_ARGS, 1, 1, NULL, irc_cmd_send_ame, NULL }, { "amsg", N_("send message to all channels of all connected servers"), N_("text"), N_("text: text to send"), - "", 1, MAX_ARGS, 1, NULL, irc_cmd_send_amsg, NULL }, + "", 1, MAX_ARGS, 1, 1, NULL, irc_cmd_send_amsg, NULL }, { "away", N_("toggle away status"), N_("[-all] [message]"), N_(" -all: toggle away status on all connected servers\n" "message: message for away (if no message is given, away status is removed)"), - "-all", 0, MAX_ARGS, 1, NULL, irc_cmd_send_away, NULL }, + "-all", 0, MAX_ARGS, 1, 1, NULL, irc_cmd_send_away, NULL }, { "ban", N_("bans nicks or hosts"), N_("[channel] [nickname [nickname ...]]"), N_(" channel: channel for ban\n" "nickname: user or host to ban"), - "%N", 0, MAX_ARGS, 1, NULL, irc_cmd_send_ban, NULL }, + "%N", 0, MAX_ARGS, 0, 1, NULL, irc_cmd_send_ban, NULL }, { "ctcp", N_("send a CTCP message (Client-To-Client Protocol)"), N_("nickname type [arguments]"), N_(" nickname: user to send CTCP to\n" " type: CTCP type (examples: \"version\", \"ping\", ..)\n" "arguments: arguments for CTCP"), - "%n action|ping|version", 2, MAX_ARGS, 1, NULL, irc_cmd_send_ctcp, NULL }, + "%n action|ping|version", 2, MAX_ARGS, 1, 1, NULL, irc_cmd_send_ctcp, NULL }, { "cycle", N_("leave and rejoin a channel"), N_("[channel[,channel]] [part_message]"), N_(" channel: channel name for cycle\n" "part_message: part message (displayed to other users)"), - "%p", 0, MAX_ARGS, 1, NULL, irc_cmd_send_cycle, NULL }, + "%p", 0, MAX_ARGS, 0, 1, NULL, irc_cmd_send_cycle, NULL }, { "dehalfop", N_("removes half channel operator status from nickname(s)"), N_("[nickname [nickname]]"), "", - "", 0, MAX_ARGS, 1, irc_cmd_send_dehalfop, NULL, NULL }, + "", 0, MAX_ARGS, 0, 1, irc_cmd_send_dehalfop, NULL, NULL }, { "deop", N_("removes channel operator status from nickname(s)"), N_("[nickname [nickname]]"), "", - "", 0, MAX_ARGS, 1, irc_cmd_send_deop, NULL, NULL }, + "", 0, MAX_ARGS, 0, 1, irc_cmd_send_deop, NULL, NULL }, { "devoice", N_("removes voice from nickname(s)"), N_("[nickname [nickname]]"), "", - "", 0, MAX_ARGS, 1, irc_cmd_send_devoice, NULL, NULL }, + "", 0, MAX_ARGS, 0, 1, irc_cmd_send_devoice, NULL, NULL }, { "die", N_("shutdown the server"), "", "", - NULL, 0, 0, 1, NULL, irc_cmd_send_die, NULL }, + NULL, 0, 0, 0, 1, NULL, irc_cmd_send_die, NULL }, { "error", N_("error received from IRC server"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_error }, { "halfop", N_("gives half channel operator status to nickname(s)"), N_("[nickname [nickname]]"), "", - "", 0, MAX_ARGS, 1, irc_cmd_send_halfop, NULL, NULL }, + "", 0, MAX_ARGS, 0, 1, irc_cmd_send_halfop, NULL, NULL }, { "info", N_("get information describing the server"), N_("[target]"), N_("target: server name"), - NULL, 0, 1, 1, NULL, irc_cmd_send_info, NULL }, + NULL, 0, 1, 0, 1, NULL, irc_cmd_send_info, NULL }, { "invite", N_("invite a nick on a channel"), N_("nickname channel"), N_("nickname: nick to invite\n" " channel: channel to invite"), - "%n %c", 1, 2, 1, irc_cmd_send_invite, NULL, irc_cmd_recv_invite }, + "%n %c", 1, 2, 0, 1, irc_cmd_send_invite, NULL, irc_cmd_recv_invite }, { "ison", N_("check if a nickname is currently on IRC"), N_("nickname [nickname ...]"), N_("nickname: nickname"), - "", 1, MAX_ARGS, 1, NULL, irc_cmd_send_ison, NULL }, + "", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_ison, NULL }, { "join", N_("join a channel"), N_("channel[,channel] [key[,key]]"), N_("channel: channel name to join\n" " key: key to join the channel"), - NULL, 1, MAX_ARGS, 1, NULL, irc_cmd_send_join, irc_cmd_recv_join }, + NULL, 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_join, irc_cmd_recv_join }, { "kick", N_("forcibly remove a user from a channel"), N_("[channel] nickname [comment]"), N_(" channel: channel where user is\n" "nickname: nickname to kick\n" " comment: comment for kick"), - "%n %-", 1, MAX_ARGS, 1, NULL, irc_cmd_send_kick, irc_cmd_recv_kick }, + "%n %-", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_kick, irc_cmd_recv_kick }, { "kickban", N_("kicks and bans a nick from a channel"), N_("[channel] nickname [comment]"), N_(" channel: channel where user is\n" "nickname: nickname to kick and ban\n" " comment: comment for kick"), - "%n %-", 1, MAX_ARGS, 1, NULL, irc_cmd_send_kickban, NULL }, + "%n %-", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_kickban, NULL }, { "kill", N_("close client-server connection"), N_("nickname comment"), N_("nickname: nickname\n" " comment: comment for kill"), - "%n %-", 2, MAX_ARGS, 1, NULL, irc_cmd_send_kill, irc_cmd_recv_kill }, + "%n %-", 2, MAX_ARGS, 0, 1, NULL, irc_cmd_send_kill, irc_cmd_recv_kill }, { "links", N_("list all servernames which are known by the server answering the query"), N_("[[server] server_mask]"), N_(" server: this server should answer the query\n" "server_mask: list of servers must match this mask"), - NULL, 0, 2, 1, NULL, irc_cmd_send_links, NULL }, + NULL, 0, 2, 0, 1, NULL, irc_cmd_send_links, NULL }, { "list", N_("list channels and their topic"), N_("[channel[,channel] [server]]"), N_("channel: channel to list (a regexp is allowed)\nserver: server name"), - NULL, 0, MAX_ARGS, 1, NULL, irc_cmd_send_list, NULL }, + NULL, 0, MAX_ARGS, 0, 1, NULL, irc_cmd_send_list, NULL }, { "lusers", N_("get statistics about the size of the IRC network"), N_("[mask [target]]"), N_(" mask: servers matching the mask only\n" "target: server for forwarding request"), - NULL, 0, 2, 1, NULL, irc_cmd_send_lusers, NULL }, + NULL, 0, 2, 0, 1, NULL, irc_cmd_send_lusers, NULL }, { "me", N_("send a CTCP action to the current channel"), N_("message"), N_("message: message to send"), - "", 0, MAX_ARGS, 1, NULL, irc_cmd_send_me, NULL }, + "", 0, MAX_ARGS, 1, 1, NULL, irc_cmd_send_me, NULL }, { "mode", N_("change channel or user mode"), N_("{ channel {[+|-]|o|p|s|i|t|n|b|v} [limit] [user] [ban mask] } | " "{ nickname {[+|-]|i|w|s|o} }"), @@ -156,436 +156,436 @@ t_irc_command irc_commands[] = " s: mark a user for receive server notices\n" " w: user receives wallops\n" " o: operator flag"), - "", 1, MAX_ARGS, 1, NULL, irc_cmd_send_mode, irc_cmd_recv_mode }, + "", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_mode, irc_cmd_recv_mode }, { "motd", N_("get the \"Message Of The Day\""), N_("[target]"), N_("target: server name"), - NULL, 0, 1, 1, NULL, irc_cmd_send_motd, NULL }, + NULL, 0, 1, 0, 1, NULL, irc_cmd_send_motd, NULL }, { "msg", N_("send message to a nick or channel"), N_("receiver[,receiver] text"), N_("receiver: nick or channel (may be mask, '*' = current channel)\n" "text: text to send"), - "", 2, MAX_ARGS, 1, NULL, irc_cmd_send_msg, NULL }, + "", 2, MAX_ARGS, 1, 1, NULL, irc_cmd_send_msg, NULL }, { "names", N_("list nicknames on channels"), N_("[channel[,channel]]"), N_("channel: channel name"), - NULL, 0, 1, 1, NULL, irc_cmd_send_names, NULL }, + NULL, 0, 1, 0, 1, NULL, irc_cmd_send_names, NULL }, { "nick", N_("change current nickname"), N_("[-all] nickname"), N_(" -all: set new nickname for all connected servers\n" "nickname: new nickname"), - "-all", 1, 2, 0, irc_cmd_send_nick, NULL, irc_cmd_recv_nick }, + "-all", 1, 2, 0, 0, irc_cmd_send_nick, NULL, irc_cmd_recv_nick }, { "notice", N_("send notice message to user"), N_("nickname text"), N_("nickname: user to send notice to\n" " text: text to send"), - "%n %-", 2, MAX_ARGS, 1, NULL, irc_cmd_send_notice, irc_cmd_recv_notice }, + "%n %-", 2, MAX_ARGS, 1, 1, NULL, irc_cmd_send_notice, irc_cmd_recv_notice }, { "op", N_("gives channel operator status to nickname(s)"), N_("nickname [nickname]"), "", - "", 1, MAX_ARGS, 1, irc_cmd_send_op, NULL, NULL }, + "", 1, MAX_ARGS, 0, 1, irc_cmd_send_op, NULL, NULL }, { "oper", N_("get operator privileges"), N_("user password"), N_("user/password: used to get privileges on current IRC server"), - NULL, 2, 2, 1, NULL, irc_cmd_send_oper, NULL }, + NULL, 2, 2, 0, 1, NULL, irc_cmd_send_oper, NULL }, { "part", N_("leave a channel"), N_("[channel[,channel]] [part_message]"), N_(" channel: channel name to leave\n" "part_message: part message (displayed to other users)"), - "%p", 0, MAX_ARGS, 1, NULL, irc_cmd_send_part, irc_cmd_recv_part }, + "%p", 0, MAX_ARGS, 0, 1, NULL, irc_cmd_send_part, irc_cmd_recv_part }, { "ping", N_("ping server"), N_("server1 [server2]"), N_("server1: server to ping\nserver2: forward ping to this server"), - NULL, 1, 2, 1, NULL, irc_cmd_send_ping, irc_cmd_recv_ping }, + NULL, 1, 2, 0, 1, NULL, irc_cmd_send_ping, irc_cmd_recv_ping }, { "pong", N_("answer to a ping message"), N_("daemon [daemon2]"), N_(" daemon: daemon who has responded to Ping message\n" "daemon2: forward message to this daemon"), - NULL, 1, 2, 1, NULL, irc_cmd_send_pong, irc_cmd_recv_pong }, + NULL, 1, 2, 0, 1, NULL, irc_cmd_send_pong, irc_cmd_recv_pong }, { "privmsg", N_("message received"), "", "", - "", 0, 0, 1, NULL, NULL, irc_cmd_recv_privmsg }, + "", 0, 0, 1, 1, NULL, NULL, irc_cmd_recv_privmsg }, { "query", N_("send a private message to a nick"), N_("nickname [text]"), N_("nickname: nickname for private conversation\n" " text: text to send"), - "%n %-", 1, MAX_ARGS, 1, NULL, irc_cmd_send_query, NULL }, + "%n %-", 1, MAX_ARGS, 1, 1, NULL, irc_cmd_send_query, NULL }, { "quit", N_("close all connections and quit"), N_("[quit_message]"), N_("quit_message: quit message (displayed to other users)"), - "%q", 0, MAX_ARGS, 0, NULL, irc_cmd_send_quit, irc_cmd_recv_quit }, + "%q", 0, MAX_ARGS, 1, 0, NULL, irc_cmd_send_quit, irc_cmd_recv_quit }, { "quote", N_("send raw data to server without parsing"), N_("data"), N_("data: raw data to send"), - "", 1, MAX_ARGS, 1, NULL, irc_cmd_send_quote, NULL }, + "", 1, MAX_ARGS, 1, 1, NULL, irc_cmd_send_quote, NULL }, { "rehash", N_("tell the server to reload its config file"), "", "", - NULL, 0, 0, 1, NULL, irc_cmd_send_rehash, NULL }, + NULL, 0, 0, 0, 1, NULL, irc_cmd_send_rehash, NULL }, { "restart", N_("tell the server to restart itself"), "", "", - NULL, 0, 0, 1, NULL, irc_cmd_send_restart, NULL }, + NULL, 0, 0, 0, 1, NULL, irc_cmd_send_restart, NULL }, { "service", N_("register a new service"), N_("nickname reserved distribution type reserved info"), N_("distribution: visibility of service\n" " type: reserved for future usage"), - NULL, 6, 6, 1, NULL, irc_cmd_send_service, NULL }, + NULL, 6, 6, 0, 1, NULL, irc_cmd_send_service, NULL }, { "servlist", N_("list services currently connected to the network"), N_("[mask [type]]"), N_("mask: list only services matching this mask\n" "type: list only services of this type"), - NULL, 0, 2, 1, NULL, irc_cmd_send_servlist, NULL }, + NULL, 0, 2, 0, 1, NULL, irc_cmd_send_servlist, NULL }, { "squery", N_("deliver a message to a service"), N_("service text"), N_("service: name of service\ntext: text to send"), - NULL, 2, 2, 1, NULL, irc_cmd_send_squery, NULL }, + NULL, 2, 2, 1, 1, NULL, irc_cmd_send_squery, NULL }, { "squit", N_("disconnect server links"), N_("server comment"), N_( "server: server name\n" "comment: comment for quit"), - NULL, 2, 2, 1, NULL, irc_cmd_send_squit, NULL }, + NULL, 2, 2, 1, 1, NULL, irc_cmd_send_squit, NULL }, { "stats", N_("query statistics about server"), N_("[query [server]]"), N_(" query: c/h/i/k/l/m/o/y/u (see RFC1459)\n" "server: server name"), - NULL, 0, 2, 1, NULL, irc_cmd_send_stats, NULL }, + NULL, 0, 2, 0, 1, NULL, irc_cmd_send_stats, NULL }, { "summon", N_("give users who are on a host running an IRC server a message " "asking them to please join IRC"), N_("user [target [channel]]"), N_(" user: username\ntarget: server name\n" "channel: channel name"), - NULL, 1, 3, 1, NULL, irc_cmd_send_summon, NULL }, + NULL, 1, 3, 0, 1, NULL, irc_cmd_send_summon, NULL }, { "time", N_("query local time from server"), N_("[target]"), N_("target: query time from specified server"), - NULL, 0, 1, 1, NULL, irc_cmd_send_time, NULL }, + NULL, 0, 1, 0, 1, NULL, irc_cmd_send_time, NULL }, { "topic", N_("get/set channel topic"), N_("[channel] [topic]"), N_("channel: channel name\ntopic: new topic for channel " "(if topic is \"-delete\" then topic is deleted)"), - "%t", 0, MAX_ARGS, 1, NULL, irc_cmd_send_topic, irc_cmd_recv_topic }, + "%t", 0, MAX_ARGS, 1, 1, NULL, irc_cmd_send_topic, irc_cmd_recv_topic }, { "trace", N_("find the route to specific server"), N_("[target]"), N_("target: server"), - NULL, 0, 1, 1, NULL, irc_cmd_send_trace, NULL }, + NULL, 0, 1, 0, 1, NULL, irc_cmd_send_trace, NULL }, { "unban", N_("unbans nicks or hosts"), N_("[channel] nickname [nickname ...]"), N_(" channel: channel for unban\n" "nickname: user or host to unban"), - "", 1, MAX_ARGS, 1, NULL, irc_cmd_send_unban, NULL }, + "", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_unban, NULL }, { "userhost", N_("return a list of information about nicknames"), N_("nickname [nickname ...]"), N_("nickname: nickname"), - "%n", 1, MAX_ARGS, 1, NULL, irc_cmd_send_userhost, NULL }, + "%n", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_userhost, NULL }, { "users", N_("list of users logged into the server"), N_("[target]"), N_("target: server"), - NULL, 0, 1, 1, NULL, irc_cmd_send_users, NULL }, + NULL, 0, 1, 0, 1, NULL, irc_cmd_send_users, NULL }, { "version", N_("gives the version info of nick or server (current or specified)"), N_("[server | nickname]"), N_(" server: server name\n" "nickname: nickname"), - NULL, 0, 1, 1, NULL, irc_cmd_send_version, NULL }, + NULL, 0, 1, 0, 1, NULL, irc_cmd_send_version, NULL }, { "voice", N_("gives voice to nickname(s)"), N_("[nickname [nickname]]"), "", - "", 0, MAX_ARGS, 1, irc_cmd_send_voice, NULL, NULL }, + "", 0, MAX_ARGS, 0, 1, irc_cmd_send_voice, NULL, NULL }, { "wallops", N_("send a message to all currently connected users who have " "set the 'w' user mode for themselves"), N_("text"), N_("text to send"), - NULL, 1, MAX_ARGS, 1, NULL, irc_cmd_send_wallops, NULL }, + NULL, 1, MAX_ARGS, 1, 1, NULL, irc_cmd_send_wallops, NULL }, { "who", N_("generate a query which returns a list of information"), N_("[mask [\"o\"]]"), N_("mask: only information which match this mask\n" " o: only operators are returned according to the mask supplied"), - "%C", 0, 2, 1, NULL, irc_cmd_send_who, NULL }, + "%C", 0, 2, 0, 1, NULL, irc_cmd_send_who, NULL }, { "whois", N_("query information about user(s)"), N_("[server] nickname[,nickname]"), N_(" server: server name\n" "nickname: nickname (may be a mask)"), - "", 1, MAX_ARGS, 1, NULL, irc_cmd_send_whois, NULL }, + "", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_whois, NULL }, { "whowas", N_("ask for information about a nickname which no longer exists"), N_("nickname [,nickname [,nickname ...]] [count [target]]"), N_("nickname: nickname to search\n" " count: number of replies to return (full search if negative number)\n" " target: reply should match this mask"), - "", 1, MAX_ARGS, 1, NULL, irc_cmd_send_whowas, NULL }, + "", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_whowas, NULL }, { "001", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "002", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "003", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "004", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_004 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_004 }, { "005", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "008", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "020", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "042", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "212", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "219", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "221", N_("user mode string"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_221 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_221 }, { "250", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "251", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "252", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "253", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "254", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "255", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "256", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "257", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "258", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "259", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "260", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "261", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "262", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "263", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "264", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "265", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "266", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "267", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "268", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "269", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "290", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "292", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "301", N_("away message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_301 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_301 }, { "302", N_("userhost"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_302 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_302 }, { "303", N_("ison"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_303 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_303 }, { "305", N_("unaway"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_305 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_305 }, { "306", N_("now away"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_306 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_306 }, { "307", N_("whois (registered nick)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_307 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_307 }, { "311", N_("whois (user)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_311 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_311 }, { "312", N_("whois (server)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_312 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_312 }, { "313", N_("whois (operator)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_313 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_313 }, { "314", N_("whowas"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_314 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_314 }, { "315", N_("end of /who list"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_315 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_315 }, { "317", N_("whois (idle)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_317 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_317 }, { "318", N_("whois (end)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_318 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_318 }, { "319", N_("whois (channels)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_319 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_319 }, { "320", N_("whois (identified user)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_320 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_320 }, { "321", N_("/list start"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_321 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_321 }, { "322", N_("channel (for /list)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_322 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_322 }, { "323", N_("/list end"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_323 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_323 }, { "324", N_("channel mode"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_324 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_324 }, { "329", "???", "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_329 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_329 }, { "331", N_("no topic for channel"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_331 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_331 }, { "332", N_("topic of channel"), N_("channel :topic"), N_("channel: name of channel\n" " topic: topic of the channel"), - NULL, 2, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_332 }, + NULL, 2, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_332 }, { "333", N_("infos about topic (nick and date changed)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_333 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_333 }, { "341", N_("inviting"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_341 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_341 }, { "344", N_("channel reop"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_344 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_344 }, { "345", N_("end of channel reop list"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_345 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_345 }, { "348", N_("channel exception list"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_348 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_348 }, { "349", N_("end of channel exception list"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_349 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_349 }, { "351", N_("server version"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_351 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_351 }, { "352", N_("who"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_352 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_352 }, { "353", N_("list of nicks on channel"), N_("channel :[[@|+]nick ...]"), N_("channel: name of channel\n" " nick: nick on the channel"), - NULL, 2, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_353 }, + NULL, 2, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_353 }, { "364", N_("links"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "365", N_("end of /links list"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "366", N_("end of /names list"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_366 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_366 }, { "367", N_("banlist"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_367 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_367 }, { "368", N_("end of banlist"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_368 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_368 }, { "369", N_("end of /whowas list"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "371", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "372", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "373", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "374", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "375", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "376", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "378", N_("connecting from"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_378 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_378 }, { "381", N_("you are now an IRC operator"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "382", N_("rehashing"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "391", N_("server local time"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "401", N_("no such nick/channel"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "402", N_("no such server"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "403", N_("no such channel"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "404", N_("cannot send to channel"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "405", N_("too many channels"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "406", N_("was no such nick"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "407", N_("was no such nick"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "409", N_("no origin"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "410", N_("no services"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "411", N_("no recipient"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "412", N_("no text to send"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "413", N_("no toplevel"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "414", N_("wilcard in toplevel domain"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "421", N_("unknown command"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "422", N_("MOTD is missing"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "423", N_("no administrative info"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "424", N_("file error"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "431", N_("no nickname given"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "432", N_("erroneous nickname"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "433", N_("nickname already in use"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_433 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_433 }, { "436", N_("nickname collision"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "437", N_("resource unavailable"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "438", N_("not authorized to change nickname"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_438 }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_438 }, { "441", N_("user not in channel"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "442", N_("not on channel"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "443", N_("user already on channel"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "444", N_("user not logged in"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "445", N_("summon has been disabled"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "446", N_("users has been disabled"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "451", N_("you are not registered"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "461", N_("not enough parameters"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "462", N_("you may not register"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "463", N_("your host isn't among the privileged"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "464", N_("password incorrect"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "465", N_("you are banned from this server"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "467", N_("channel key already set"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "470", N_("forwarding to another channel"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "471", N_("channel is already full"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "472", N_("unknown mode char to me"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "473", N_("cannot join channel (invite only)"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "474", N_("cannot join channel (banned from channel)"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "475", N_("cannot join channel (bad channel key)"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "476", N_("bad channel mask"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "477", N_("channel doesn't support modes"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "481", N_("you're not an IRC operator"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "482", N_("you're not channel operator"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "483", N_("you can't kill a server!"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "484", N_("your connection is restricted!"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "485", N_("user is immune from kick/deop"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "487", N_("network split"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "491", N_("no O-lines for your host"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "501", N_("unknown mode flag"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "502", N_("can't change mode for other users"), "", "", - NULL, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, + NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error }, { "505", N_("a server message"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg }, { "671", N_("whois (secure connection)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_671 }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_671 }, { "973", N_("whois (secure connection)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_mode_reason }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_mode_reason }, { "974", N_("whois (secure connection)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_mode_reason }, + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_mode_reason }, { "975", N_("whois (secure connection)"), "", "", - NULL, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_mode_reason }, - { NULL, NULL, NULL, NULL, NULL, 0, 0, 1, NULL, NULL, NULL } + NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_mode_reason }, + { NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 1, NULL, NULL, NULL } }; diff --git a/src/irc/irc.h b/src/irc/irc.h index 59b9c541d..204d81b41 100644 --- a/src/irc/irc.h +++ b/src/irc/irc.h @@ -211,6 +211,8 @@ struct t_irc_command char *completion_template; /* template for completion */ /* NULL=no completion, ""=default (nick) */ int min_arg, max_arg; /* min & max number of arguments */ + int charset_conversion; /* = 1 if cmd args are converted before */ + /* they're sent to server */ int needs_connection; /* = 1 if cmd needs server connection */ int (*cmd_function_args)(t_irc_server *, t_irc_channel *, int, char **); /* function called when user enters cmd */ |