[FEATURE] autojoin_on_kick in connection blocks
true by default
This commit is contained in:
parent
afefc9a3d4
commit
170d4d1e00
@ -280,6 +280,11 @@ If set to true, when you change nick, BIP stores the new nickname as the new
|
||||
default nickname value. Thus, if you are disconnected from the server, BIP will
|
||||
restore the correct nickname.
|
||||
|
||||
.TP
|
||||
\fBautojoin_on_kick\fP (default: \fBtrue\fP)
|
||||
If set to false bip will not attempt to re-join a channel from which you were
|
||||
kicked.
|
||||
|
||||
.TP
|
||||
\fBignore_first_nick\fP (default: \fBfalse\fP)
|
||||
If set to true, BIP will ignore the nickname sent by the client upon connect.
|
||||
|
@ -196,6 +196,8 @@ user {
|
||||
#follow_nick = true;
|
||||
#ignore_first_nick = true;
|
||||
|
||||
#autojoin_on_kick = false;
|
||||
|
||||
# Autojoined channels:
|
||||
channel { name = "#bip"; };
|
||||
# Password protected channel
|
||||
|
@ -548,6 +548,9 @@ static int add_connection(bip_t *bip, struct user *user, list_t *data)
|
||||
}
|
||||
list_free(t->pdata);
|
||||
break;
|
||||
case LEX_AUTOJOIN_ON_KICK:
|
||||
l->autojoin_on_kick = t->ndata;
|
||||
break;
|
||||
case LEX_FOLLOW_NICK:
|
||||
l->follow_nick = t->ndata;
|
||||
break;
|
||||
|
10
src/conf.y
10
src/conf.y
@ -68,7 +68,7 @@ struct tuple *tuple_l_new(int type, void *p)
|
||||
|
||||
%}
|
||||
|
||||
%token LEX_IP LEX_EQ LEX_PORT LEX_CSS LEX_SEMICOLON LEX_CONNECTION LEX_NETWORK LEX_LBRA LEX_RBRA LEX_USER LEX_NAME LEX_NICK LEX_SERVER LEX_PASSWORD LEX_SRCIP LEX_HOST LEX_VHOST LEX_SOURCE_PORT LEX_NONE LEX_COMMENT LEX_BUNCH LEX_REALNAME LEX_SSL LEX_SSL_CHECK_MODE LEX_SSL_CHECK_STORE LEX_SSL_CLIENT_CERTFILE LEX_CHANNEL LEX_KEY LEX_LOG_ROOT LEX_LOG_FORMAT LEX_LOG_LEVEL LEX_BACKLOG_LINES LEX_BACKLOG_NO_TIMESTAMP LEX_BACKLOG LEX_LOG LEX_LOG_SYSTEM LEX_LOG_SYNC_INTERVAL LEX_FOLLOW_NICK LEX_ON_CONNECT_SEND LEX_AWAY_NICK LEX_PID_FILE LEX_IGN_FIRST_NICK LEX_ALWAYS_BACKLOG LEX_BLRESET_ON_TALK LEX_BLRESET_CONNECTION LEX_DEFAULT_USER LEX_DEFAULT_NICK LEX_DEFAULT_REALNAME LEX_NO_CLIENT_AWAY_MSG LEX_BL_MSG_ONLY LEX_ADMIN LEX_BIP_USE_NOTICE LEX_CSS_PEM
|
||||
%token LEX_IP LEX_EQ LEX_PORT LEX_CSS LEX_SEMICOLON LEX_CONNECTION LEX_NETWORK LEX_LBRA LEX_RBRA LEX_USER LEX_NAME LEX_NICK LEX_SERVER LEX_PASSWORD LEX_SRCIP LEX_HOST LEX_VHOST LEX_SOURCE_PORT LEX_NONE LEX_COMMENT LEX_BUNCH LEX_REALNAME LEX_SSL LEX_SSL_CHECK_MODE LEX_SSL_CHECK_STORE LEX_SSL_CLIENT_CERTFILE LEX_CHANNEL LEX_KEY LEX_LOG_ROOT LEX_LOG_FORMAT LEX_LOG_LEVEL LEX_BACKLOG_LINES LEX_BACKLOG_NO_TIMESTAMP LEX_BACKLOG LEX_LOG LEX_LOG_SYSTEM LEX_LOG_SYNC_INTERVAL LEX_FOLLOW_NICK LEX_ON_CONNECT_SEND LEX_AWAY_NICK LEX_PID_FILE LEX_IGN_FIRST_NICK LEX_ALWAYS_BACKLOG LEX_BLRESET_ON_TALK LEX_BLRESET_CONNECTION LEX_DEFAULT_USER LEX_DEFAULT_NICK LEX_DEFAULT_REALNAME LEX_NO_CLIENT_AWAY_MSG LEX_BL_MSG_ONLY LEX_ADMIN LEX_BIP_USE_NOTICE LEX_CSS_PEM LEX_AUTOJOIN_ON_KICK
|
||||
|
||||
%union {
|
||||
int number;
|
||||
@ -203,12 +203,14 @@ con_command:
|
||||
$$ = tuple_i_new(LEX_FOLLOW_NICK, $3); }
|
||||
| LEX_IGN_FIRST_NICK LEX_EQ LEX_BOOL { $$ = tuple_i_new(
|
||||
LEX_IGN_FIRST_NICK, $3); }
|
||||
| LEX_AUTOJOIN_ON_KICK LEX_EQ LEX_BOOL {
|
||||
$$ = tuple_i_new(LEX_AUTOJOIN_ON_KICK, $3); }
|
||||
| LEX_CHANNEL LEX_LBRA channel LEX_RBRA { $$ = tuple_l_new(
|
||||
LEX_CHANNEL, $3); }
|
||||
LEX_CHANNEL, $3); }
|
||||
| LEX_ON_CONNECT_SEND LEX_EQ LEX_STRING { $$ = tuple_s_new(
|
||||
LEX_ON_CONNECT_SEND, $3); }
|
||||
LEX_ON_CONNECT_SEND, $3); }
|
||||
| LEX_NO_CLIENT_AWAY_MSG LEX_EQ LEX_STRING { $$ = tuple_s_new(
|
||||
LEX_NO_CLIENT_AWAY_MSG, $3); }
|
||||
LEX_NO_CLIENT_AWAY_MSG, $3); }
|
||||
| LEX_SSL_CHECK_MODE LEX_EQ LEX_STRING { $$ = tuple_s_new(
|
||||
LEX_SSL_CHECK_MODE, $3); }
|
||||
channel:
|
||||
|
13
src/irc.c
13
src/irc.c
@ -1767,11 +1767,21 @@ static int irc_kick(struct link_server *server, struct line *line)
|
||||
return ERR_PROTOCOL;
|
||||
|
||||
if (strcasecmp(irc_line_elem(line, 2), server->nick) == 0) {
|
||||
/* we get kicked !! */
|
||||
log_kick(LINK(server)->log, line->origin, channel->name,
|
||||
irc_line_elem(line, 2),
|
||||
irc_line_count(line) == 4 ?
|
||||
irc_line_elem(line, 3) : NULL);
|
||||
|
||||
if (LINK(server)->autojoin_on_kick) {
|
||||
if (!channel->key)
|
||||
WRITE_LINE1(CONN(server), NULL, "JOIN",
|
||||
channel->name);
|
||||
else
|
||||
WRITE_LINE2(CONN(server), NULL, "JOIN",
|
||||
channel->name, channel->key);
|
||||
}
|
||||
|
||||
hash_remove(&server->channels, channel->name);
|
||||
channel_free(channel);
|
||||
return OK_COPY;
|
||||
@ -1781,6 +1791,8 @@ static int irc_kick(struct link_server *server, struct line *line)
|
||||
log_kick(LINK(server)->log, line->origin, irc_line_elem(line, 1),
|
||||
irc_line_elem(line, 2),
|
||||
irc_line_count(line) == 4 ? irc_line_elem(line, 3) : NULL);
|
||||
|
||||
|
||||
return OK_COPY;
|
||||
}
|
||||
|
||||
@ -2541,6 +2553,7 @@ struct link *irc_link_new()
|
||||
hash_init(&link->chan_infos, HASH_NOCASE);
|
||||
list_init(&link->chan_infos_order, list_ptr_cmp);
|
||||
list_init(&link->on_connect_send, list_ptr_cmp);
|
||||
link->autojoin_on_kick = 1;
|
||||
return link;
|
||||
}
|
||||
|
||||
|
@ -131,6 +131,7 @@ struct link {
|
||||
|
||||
int follow_nick;
|
||||
int ignore_first_nick;
|
||||
int autojoin_on_kick;
|
||||
list_t on_connect_send;
|
||||
char *no_client_away_msg;
|
||||
char *away_nick;
|
||||
|
@ -81,6 +81,7 @@ list_t *parse_conf(FILE *file, int *err)
|
||||
"ssl_check_store" { return LEX_SSL_CHECK_STORE; }
|
||||
"ssl_client_certfile" { return LEX_SSL_CLIENT_CERTFILE; }
|
||||
"key" { return LEX_KEY; }
|
||||
"autojoin_on_kick" { return LEX_AUTOJOIN_ON_KICK; }
|
||||
"channel" { return LEX_CHANNEL; }
|
||||
"log_level" { return LEX_LOG_LEVEL; }
|
||||
"log_root" { return LEX_LOG_ROOT; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user