mirror of
https://github.com/irssi/irssi.git
synced 2024-09-01 04:14:16 -04:00
You can specify command(s) to be sent automatically to server after
connected with /IRCNET -autosendcmd. Useful for IRC networks with NickServ. Patch by <Tommi.Komulainen@iki.fi> Ability to send a command automatically to server IRC network git-svn-id: http://svn.irssi.org/repos/irssi/trunk@354 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
91396de740
commit
cf75515274
@ -363,7 +363,7 @@
|
|||||||
/IRCNET ADD [-kicks <count>] [-msgs <count>] [-modes <count>]
|
/IRCNET ADD [-kicks <count>] [-msgs <count>] [-modes <count>]
|
||||||
[-whois <count>] [-cmdspeed <ms>] [-cmdmax <count>]
|
[-whois <count>] [-cmdspeed <ms>] [-cmdmax <count>]
|
||||||
[-nick <nick>] [-user <user>] [-realname <name>]
|
[-nick <nick>] [-user <user>] [-realname <name>]
|
||||||
[-host <host>] <name>
|
[-host <host>] [-autosendcmd <cmd>] <name>
|
||||||
|
|
||||||
-kicks: Maximum number of nicks in one /KICK command
|
-kicks: Maximum number of nicks in one /KICK command
|
||||||
-msgs: Maximum number of nicks in one /MSG command
|
-msgs: Maximum number of nicks in one /MSG command
|
||||||
@ -373,6 +373,13 @@
|
|||||||
-cmdmax: Same as /SET cmd_max_at_once, see section 3.1
|
-cmdmax: Same as /SET cmd_max_at_once, see section 3.1
|
||||||
-nick, -user, -realname: Specify what nick/user/name to use
|
-nick, -user, -realname: Specify what nick/user/name to use
|
||||||
-host: Specify what host name to use, if you have multiple
|
-host: Specify what host name to use, if you have multiple
|
||||||
|
-autosendcmd: Command to send after connecting to a server
|
||||||
|
|
||||||
|
With -autosendcmd argument you can automatically run any commands
|
||||||
|
after connecting to ircnet. This is useful for automatically
|
||||||
|
identifying yourself to NickServ, for example
|
||||||
|
|
||||||
|
/IRCNET ADD -autosendcmd "/msg NickServ identify secret" OPN
|
||||||
|
|
||||||
/IRCNET REMOVE <name>
|
/IRCNET REMOVE <name>
|
||||||
|
|
||||||
|
@ -52,6 +52,8 @@ static void cmd_ircnet_list(void)
|
|||||||
g_string_sprintfa(str, "realname: %s, ", rec->realname);
|
g_string_sprintfa(str, "realname: %s, ", rec->realname);
|
||||||
if (rec->own_host != NULL)
|
if (rec->own_host != NULL)
|
||||||
g_string_sprintfa(str, "host: %s, ", rec->own_host);
|
g_string_sprintfa(str, "host: %s, ", rec->own_host);
|
||||||
|
if (rec->autosendcmd != NULL)
|
||||||
|
g_string_sprintfa(str, "autosendcmd: %s, ", rec->autosendcmd);
|
||||||
|
|
||||||
if (rec->cmd_queue_speed > 0)
|
if (rec->cmd_queue_speed > 0)
|
||||||
g_string_sprintfa(str, "cmdspeed: %d, ", rec->cmd_queue_speed);
|
g_string_sprintfa(str, "cmdspeed: %d, ", rec->cmd_queue_speed);
|
||||||
@ -78,13 +80,14 @@ static void cmd_ircnet_list(void)
|
|||||||
static void cmd_ircnet_add(const char *data)
|
static void cmd_ircnet_add(const char *data)
|
||||||
{
|
{
|
||||||
char *params, *args, *kicks, *msgs, *modes, *whois;
|
char *params, *args, *kicks, *msgs, *modes, *whois;
|
||||||
char *cmdspeed, *cmdmax, *nick, *user, *realname, *host, *name;
|
char *cmdspeed, *cmdmax, *nick, *user, *realname, *host, *autosendcmd, *name;
|
||||||
IRCNET_REC *rec;
|
IRCNET_REC *rec;
|
||||||
|
|
||||||
args = "kicks msgs modes whois cmdspeed cmdmax nick user realname host";
|
args = "kicks msgs modes whois cmdspeed cmdmax nick user realname host autosendcmd";
|
||||||
params = cmd_get_params(data, 12 | PARAM_FLAG_MULTIARGS, &args,
|
params = cmd_get_params(data, 13 | PARAM_FLAG_MULTIARGS, &args,
|
||||||
&kicks, &msgs, &modes, &whois, &cmdspeed,
|
&kicks, &msgs, &modes, &whois, &cmdspeed,
|
||||||
&cmdmax, &nick, &user, &realname, &host, &name);
|
&cmdmax, &nick, &user, &realname, &host,
|
||||||
|
&autosendcmd, &name);
|
||||||
if (*name == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
if (*name == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||||
|
|
||||||
rec = ircnet_find(name);
|
rec = ircnet_find(name);
|
||||||
@ -99,6 +102,7 @@ static void cmd_ircnet_add(const char *data)
|
|||||||
g_free_and_null(rec->own_host);
|
g_free_and_null(rec->own_host);
|
||||||
rec->own_ip = NULL;
|
rec->own_ip = NULL;
|
||||||
}
|
}
|
||||||
|
if (stristr(args, "-autosendcmd")) g_free_and_null(rec->autosendcmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stristr(args, "-kicks")) rec->max_kicks = atoi(kicks);
|
if (stristr(args, "-kicks")) rec->max_kicks = atoi(kicks);
|
||||||
@ -116,6 +120,7 @@ static void cmd_ircnet_add(const char *data)
|
|||||||
rec->own_host = g_strdup(host);
|
rec->own_host = g_strdup(host);
|
||||||
rec->own_ip = NULL;
|
rec->own_ip = NULL;
|
||||||
}
|
}
|
||||||
|
if (*autosendcmd != '\0') rec->autosendcmd = g_strdup(autosendcmd);
|
||||||
|
|
||||||
ircnet_create(rec);
|
ircnet_create(rec);
|
||||||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_IRCNET_ADDED, name);
|
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_IRCNET_ADDED, name);
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
#include "irc-server.h"
|
#include "irc-server.h"
|
||||||
#include "ircnet-setup.h"
|
#include "ircnet-setup.h"
|
||||||
|
#include "special-vars.h"
|
||||||
|
|
||||||
GSList *ircnets; /* list of available ircnets */
|
GSList *ircnets; /* list of available ircnets */
|
||||||
|
|
||||||
@ -41,6 +42,7 @@ static void ircnet_config_add(IRCNET_REC *ircnet)
|
|||||||
iconfig_node_set_str(node, "username", ircnet->username);
|
iconfig_node_set_str(node, "username", ircnet->username);
|
||||||
iconfig_node_set_str(node, "realname", ircnet->realname);
|
iconfig_node_set_str(node, "realname", ircnet->realname);
|
||||||
iconfig_node_set_str(node, "host", ircnet->own_host);
|
iconfig_node_set_str(node, "host", ircnet->own_host);
|
||||||
|
iconfig_node_set_str(node, "autosendcmd", ircnet->autosendcmd);
|
||||||
|
|
||||||
if (ircnet->max_cmds_at_once > 0)
|
if (ircnet->max_cmds_at_once > 0)
|
||||||
config_node_set_int(node, "cmdmax", ircnet->max_cmds_at_once);
|
config_node_set_int(node, "cmdmax", ircnet->max_cmds_at_once);
|
||||||
@ -84,6 +86,7 @@ void ircnet_destroy(IRCNET_REC *ircnet)
|
|||||||
g_free_not_null(ircnet->username);
|
g_free_not_null(ircnet->username);
|
||||||
g_free_not_null(ircnet->realname);
|
g_free_not_null(ircnet->realname);
|
||||||
g_free_not_null(ircnet->own_host);
|
g_free_not_null(ircnet->own_host);
|
||||||
|
g_free_not_null(ircnet->autosendcmd);
|
||||||
g_free(ircnet);
|
g_free(ircnet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,6 +121,7 @@ static IRCNET_REC *ircnet_add(CONFIG_NODE *node)
|
|||||||
rec->username = g_strdup(config_node_get_str(node, "username", NULL));
|
rec->username = g_strdup(config_node_get_str(node, "username", NULL));
|
||||||
rec->realname = g_strdup(config_node_get_str(node, "realname", NULL));
|
rec->realname = g_strdup(config_node_get_str(node, "realname", NULL));
|
||||||
rec->own_host = g_strdup(config_node_get_str(node, "host", NULL));
|
rec->own_host = g_strdup(config_node_get_str(node, "host", NULL));
|
||||||
|
rec->autosendcmd = g_strdup(config_node_get_str(node, "autosendcmd", NULL));
|
||||||
|
|
||||||
rec->max_cmds_at_once = config_node_get_int(node, "cmdmax", 0);
|
rec->max_cmds_at_once = config_node_get_int(node, "cmdmax", 0);
|
||||||
rec->cmd_queue_speed = config_node_get_int(node, "cmdspeed", 0);
|
rec->cmd_queue_speed = config_node_get_int(node, "cmdspeed", 0);
|
||||||
@ -147,10 +151,22 @@ static void read_ircnets(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void sig_connected(IRC_SERVER_REC *server)
|
||||||
|
{
|
||||||
|
IRCNET_REC *ircnet;
|
||||||
|
|
||||||
|
if (server->connrec->ircnet == NULL) return;
|
||||||
|
|
||||||
|
ircnet = ircnet_find(server->connrec->ircnet);
|
||||||
|
if (ircnet->autosendcmd)
|
||||||
|
eval_special_string(ircnet->autosendcmd, "", server, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
void ircnets_setup_init(void)
|
void ircnets_setup_init(void)
|
||||||
{
|
{
|
||||||
read_ircnets();
|
read_ircnets();
|
||||||
signal_add("setup reread", (SIGNAL_FUNC) read_ircnets);
|
signal_add("setup reread", (SIGNAL_FUNC) read_ircnets);
|
||||||
|
signal_add("event connected", (SIGNAL_FUNC) sig_connected);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ircnets_setup_deinit(void)
|
void ircnets_setup_deinit(void)
|
||||||
@ -159,4 +175,5 @@ void ircnets_setup_deinit(void)
|
|||||||
ircnet_destroy(ircnets->data);
|
ircnet_destroy(ircnets->data);
|
||||||
|
|
||||||
signal_remove("setup reread", (SIGNAL_FUNC) read_ircnets);
|
signal_remove("setup reread", (SIGNAL_FUNC) read_ircnets);
|
||||||
|
signal_remove("event connected", (SIGNAL_FUNC) sig_connected);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ typedef struct {
|
|||||||
char *realname;
|
char *realname;
|
||||||
|
|
||||||
char *own_host; /* address to use when connecting this server */
|
char *own_host; /* address to use when connecting this server */
|
||||||
|
char *autosendcmd; /* command to send after connecting to this ircnet */
|
||||||
IPADDR *own_ip; /* resolved own_address if not NULL */
|
IPADDR *own_ip; /* resolved own_address if not NULL */
|
||||||
|
|
||||||
int max_cmds_at_once;
|
int max_cmds_at_once;
|
||||||
|
Loading…
Reference in New Issue
Block a user