mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-30 21:42:59 +00:00 
			
		
		
		
	Channel autojoin functionality
This commit is contained in:
		 Ivan Agarkov
					Ivan Agarkov
				
			
				
					committed by
					
						 Alexander Barton
						Alexander Barton
					
				
			
			
				
	
			
			
			 Alexander Barton
						Alexander Barton
					
				
			
						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 | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user