[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
|
default nickname value. Thus, if you are disconnected from the server, BIP will
|
||||||
restore the correct nickname.
|
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
|
.TP
|
||||||
\fBignore_first_nick\fP (default: \fBfalse\fP)
|
\fBignore_first_nick\fP (default: \fBfalse\fP)
|
||||||
If set to true, BIP will ignore the nickname sent by the client upon connect.
|
If set to true, BIP will ignore the nickname sent by the client upon connect.
|
||||||
|
@ -196,6 +196,8 @@ user {
|
|||||||
#follow_nick = true;
|
#follow_nick = true;
|
||||||
#ignore_first_nick = true;
|
#ignore_first_nick = true;
|
||||||
|
|
||||||
|
#autojoin_on_kick = false;
|
||||||
|
|
||||||
# Autojoined channels:
|
# Autojoined channels:
|
||||||
channel { name = "#bip"; };
|
channel { name = "#bip"; };
|
||||||
# Password protected channel
|
# Password protected channel
|
||||||
|
@ -548,6 +548,9 @@ static int add_connection(bip_t *bip, struct user *user, list_t *data)
|
|||||||
}
|
}
|
||||||
list_free(t->pdata);
|
list_free(t->pdata);
|
||||||
break;
|
break;
|
||||||
|
case LEX_AUTOJOIN_ON_KICK:
|
||||||
|
l->autojoin_on_kick = t->ndata;
|
||||||
|
break;
|
||||||
case LEX_FOLLOW_NICK:
|
case LEX_FOLLOW_NICK:
|
||||||
l->follow_nick = t->ndata;
|
l->follow_nick = t->ndata;
|
||||||
break;
|
break;
|
||||||
|
@ -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 {
|
%union {
|
||||||
int number;
|
int number;
|
||||||
@ -203,6 +203,8 @@ con_command:
|
|||||||
$$ = tuple_i_new(LEX_FOLLOW_NICK, $3); }
|
$$ = tuple_i_new(LEX_FOLLOW_NICK, $3); }
|
||||||
| LEX_IGN_FIRST_NICK LEX_EQ LEX_BOOL { $$ = tuple_i_new(
|
| LEX_IGN_FIRST_NICK LEX_EQ LEX_BOOL { $$ = tuple_i_new(
|
||||||
LEX_IGN_FIRST_NICK, $3); }
|
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 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 LEX_EQ LEX_STRING { $$ = tuple_s_new(
|
||||||
|
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;
|
return ERR_PROTOCOL;
|
||||||
|
|
||||||
if (strcasecmp(irc_line_elem(line, 2), server->nick) == 0) {
|
if (strcasecmp(irc_line_elem(line, 2), server->nick) == 0) {
|
||||||
|
/* we get kicked !! */
|
||||||
log_kick(LINK(server)->log, line->origin, channel->name,
|
log_kick(LINK(server)->log, line->origin, channel->name,
|
||||||
irc_line_elem(line, 2),
|
irc_line_elem(line, 2),
|
||||||
irc_line_count(line) == 4 ?
|
irc_line_count(line) == 4 ?
|
||||||
irc_line_elem(line, 3) : NULL);
|
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);
|
hash_remove(&server->channels, channel->name);
|
||||||
channel_free(channel);
|
channel_free(channel);
|
||||||
return OK_COPY;
|
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),
|
log_kick(LINK(server)->log, line->origin, irc_line_elem(line, 1),
|
||||||
irc_line_elem(line, 2),
|
irc_line_elem(line, 2),
|
||||||
irc_line_count(line) == 4 ? irc_line_elem(line, 3) : NULL);
|
irc_line_count(line) == 4 ? irc_line_elem(line, 3) : NULL);
|
||||||
|
|
||||||
|
|
||||||
return OK_COPY;
|
return OK_COPY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2541,6 +2553,7 @@ struct link *irc_link_new()
|
|||||||
hash_init(&link->chan_infos, HASH_NOCASE);
|
hash_init(&link->chan_infos, HASH_NOCASE);
|
||||||
list_init(&link->chan_infos_order, list_ptr_cmp);
|
list_init(&link->chan_infos_order, list_ptr_cmp);
|
||||||
list_init(&link->on_connect_send, list_ptr_cmp);
|
list_init(&link->on_connect_send, list_ptr_cmp);
|
||||||
|
link->autojoin_on_kick = 1;
|
||||||
return link;
|
return link;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ struct link {
|
|||||||
|
|
||||||
int follow_nick;
|
int follow_nick;
|
||||||
int ignore_first_nick;
|
int ignore_first_nick;
|
||||||
|
int autojoin_on_kick;
|
||||||
list_t on_connect_send;
|
list_t on_connect_send;
|
||||||
char *no_client_away_msg;
|
char *no_client_away_msg;
|
||||||
char *away_nick;
|
char *away_nick;
|
||||||
|
@ -81,6 +81,7 @@ list_t *parse_conf(FILE *file, int *err)
|
|||||||
"ssl_check_store" { return LEX_SSL_CHECK_STORE; }
|
"ssl_check_store" { return LEX_SSL_CHECK_STORE; }
|
||||||
"ssl_client_certfile" { return LEX_SSL_CLIENT_CERTFILE; }
|
"ssl_client_certfile" { return LEX_SSL_CLIENT_CERTFILE; }
|
||||||
"key" { return LEX_KEY; }
|
"key" { return LEX_KEY; }
|
||||||
|
"autojoin_on_kick" { return LEX_AUTOJOIN_ON_KICK; }
|
||||||
"channel" { return LEX_CHANNEL; }
|
"channel" { return LEX_CHANNEL; }
|
||||||
"log_level" { return LEX_LOG_LEVEL; }
|
"log_level" { return LEX_LOG_LEVEL; }
|
||||||
"log_root" { return LEX_LOG_ROOT; }
|
"log_root" { return LEX_LOG_ROOT; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user