mirror of
https://github.com/osmarks/ngircd.git
synced 2025-01-05 21:30:29 +00:00
Channel autojoin functionality
This commit is contained in:
parent
3b70f4ba0c
commit
cfd7d4288e
@ -394,6 +394,9 @@
|
||||
# Key file, syntax for each line: "<user>:<nick>:<key>".
|
||||
# Default: none.
|
||||
;KeyFile = :ETCDIR:/#chan.key
|
||||
|
||||
# Autojoin - set to yes to force all users to join this channel on connect
|
||||
;Autojoin = yes
|
||||
|
||||
[Channel]
|
||||
# More [Channel] sections, if you like ...
|
||||
|
@ -517,6 +517,9 @@ invite list, exception list) is supported.
|
||||
This option can be specified multiple times, evaluated top to bottom.
|
||||
.RE
|
||||
.TP
|
||||
\fBAutojoin\fR (boolean)
|
||||
Forces users to join this channel on connect. Users must have access to the channel to make it work.
|
||||
.TP
|
||||
\fBKeyFile\fR (string)
|
||||
Path and file name of a "key file" containing individual channel keys for
|
||||
different users. The file consists of plain text lines with the following
|
||||
|
@ -186,8 +186,6 @@ Channel_InitPredefined( void )
|
||||
new_chan->name, new_chan->modes, new_chan->key,
|
||||
new_chan->maxusers);
|
||||
}
|
||||
if (channel_count)
|
||||
array_free(&Conf_Channels);
|
||||
|
||||
/* Make sure the local &SERVER channel exists */
|
||||
if (!Channel_Search("&SERVER")) {
|
||||
|
@ -2000,6 +2000,9 @@ Handle_CHANNEL(const char *File, int Line, char *Var, char *Arg)
|
||||
Config_Error_TooLong(File, Line, Var);
|
||||
return;
|
||||
}
|
||||
if( strcasecmp( Var, "Autojoin" ) == 0 )
|
||||
/* Check autojoin */
|
||||
chan->autojoin = Check_ArgIsTrue(Arg);
|
||||
if( strcasecmp( Var, "Key" ) == 0 ) {
|
||||
/* Initial Channel Key (mode k) */
|
||||
len = strlcpy(chan->key, Arg, sizeof(chan->key));
|
||||
|
@ -87,6 +87,7 @@ struct Conf_Channel {
|
||||
char key[CLIENT_PASS_LEN]; /**< Channel key ("password", mode "k" ) */
|
||||
char topic[COMMAND_LEN]; /**< Initial topic */
|
||||
char keyfile[512]; /**< Path and name of channel key file */
|
||||
bool autojoin; /**< 1 to make all users autojoin this channel */
|
||||
unsigned long maxusers; /**< User limit for this channel, mode "l" */
|
||||
unsigned int modes_num; /**< Number of channel modes to evaluate */
|
||||
};
|
||||
|
@ -201,9 +201,40 @@ Login_User_PostAuth(CLIENT *Client)
|
||||
} else
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
/* Autojoin clients to the channels */
|
||||
Login_Autojoin(Client);
|
||||
|
||||
return CONNECTED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Autojoin clients to the channels set by administrator
|
||||
* If autojoin is not set in Config or the channel is not available for search - do nothing
|
||||
*
|
||||
**/
|
||||
GLOBAL void
|
||||
Login_Autojoin(CLIENT *Client)
|
||||
{
|
||||
/** make an autojoin to each channel that is good for it **/
|
||||
REQUEST Req;
|
||||
const struct Conf_Channel *conf_chan;
|
||||
size_t i, n, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan));
|
||||
conf_chan = array_start(&Conf_Channels);
|
||||
assert(channel_count == 0 || conf_chan != NULL);
|
||||
|
||||
for (i = 0; i < channel_count; i++, conf_chan++) {
|
||||
if(!conf_chan->autojoin)
|
||||
continue;
|
||||
if (!Channel_Search(conf_chan->name))
|
||||
continue;
|
||||
Req.prefix = Client_ID(Client_ThisServer());
|
||||
Req.command = "JOIN";
|
||||
Req.argc = 1;
|
||||
Req.argv[0] = conf_chan->name;
|
||||
IRC_JOIN(Client, &Req);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef PAM
|
||||
|
||||
/**
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
GLOBAL bool Login_User PARAMS((CLIENT * Client));
|
||||
GLOBAL bool Login_User_PostAuth PARAMS((CLIENT *Client));
|
||||
GLOBAL void Login_Autojoin PARAMS((CLIENT *Client));
|
||||
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user