Send LUSERS output upon registration
This commit is contained in:
		
							parent
							
								
									081b9f6bd2
								
							
						
					
					
						commit
						057a01e2e5
					
				
							
								
								
									
										46
									
								
								src/kike.c
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								src/kike.c
									
									
									
									
									
								
							| @ -508,6 +508,12 @@ enum | ||||
| 	IRC_RPL_CREATED               =   3, | ||||
| 	IRC_RPL_MYINFO                =   4, | ||||
| 
 | ||||
| 	IRC_RPL_LUSERCLIENT           = 251, | ||||
| 	IRC_RPL_LUSEROP               = 252, | ||||
| 	IRC_RPL_LUSERUNKNOWN          = 253, | ||||
| 	IRC_RPL_LUSERCHANNELS         = 254, | ||||
| 	IRC_RPL_LUSERME               = 255, | ||||
| 
 | ||||
| 	IRC_RPL_MOTD                  = 372, | ||||
| 	IRC_RPL_MOTDSTART             = 375, | ||||
| 	IRC_RPL_ENDOFMOTD             = 376, | ||||
| @ -530,6 +536,12 @@ static const char *g_default_replies[] = | ||||
| 	[IRC_RPL_CREATED] = ":This server was created %s", | ||||
| 	[IRC_RPL_MYINFO] = "%s %s %s %s", | ||||
| 
 | ||||
| 	[IRC_RPL_LUSERCLIENT] = ":There are %d users and %d services on %d servers", | ||||
| 	[IRC_RPL_LUSEROP] = "%d :operator(s) online", | ||||
| 	[IRC_RPL_LUSERUNKNOWN] = "%d :unknown connection(s)", | ||||
| 	[IRC_RPL_LUSERCHANNELS] = "%d :channels formed", | ||||
| 	[IRC_RPL_LUSERME] = ":I have %d clients and %d servers", | ||||
| 
 | ||||
| 	[IRC_RPL_MOTD] = ":- %s", | ||||
| 	[IRC_RPL_MOTDSTART] = ":- %s Message of the day - ", | ||||
| 	[IRC_RPL_ENDOFMOTD] = ":End of MOTD command", | ||||
| @ -581,6 +593,38 @@ irc_send_motd (struct client *c) | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| irc_send_lusers (struct client *c) | ||||
| { | ||||
| 	int n_users = 0, n_services = 0, n_opers = 0, n_unknown = 0; | ||||
| 	for (struct client *link = c->ctx->clients; link; link = link->next) | ||||
| 	{ | ||||
| 		if (link->registered) | ||||
| 			n_users++; | ||||
| 		else | ||||
| 			n_unknown++; | ||||
| 		if (link->mode & IRC_USER_MODE_OPERATOR) | ||||
| 			n_opers++; | ||||
| 	} | ||||
| 
 | ||||
| 	int n_channels = 0; | ||||
| 	struct str_map_iter iter; | ||||
| 	str_map_iter_init (&iter, &c->ctx->channels); | ||||
| 	while (str_map_iter_next (&iter)) | ||||
| 		n_channels++; | ||||
| 
 | ||||
| 	irc_send_reply (c, IRC_RPL_LUSERCLIENT, | ||||
| 		n_users, n_services, 1 /* servers total */); | ||||
| 	if (n_opers) | ||||
| 		irc_send_reply (c, IRC_RPL_LUSEROP, n_opers); | ||||
| 	if (n_unknown) | ||||
| 		irc_send_reply (c, IRC_RPL_LUSERUNKNOWN, n_unknown); | ||||
| 	if (n_channels) | ||||
| 		irc_send_reply (c, IRC_RPL_LUSERCHANNELS, n_channels); | ||||
| 	irc_send_reply (c, IRC_RPL_LUSERME, | ||||
| 		n_users + n_services + n_unknown, 0 /* peer servers */); | ||||
| } | ||||
| 
 | ||||
| static bool | ||||
| irc_try_finish_registration (struct client *c) | ||||
| { | ||||
| 	struct server_context *ctx = c->ctx; | ||||
| @ -596,7 +640,7 @@ irc_try_finish_registration (struct client *c) | ||||
| 	irc_send_reply (c, IRC_RPL_MYINFO, ctx->server_name, PROGRAM_VERSION, | ||||
| 		IRC_SUPPORTED_USER_MODES, IRC_SUPPORTED_CHAN_MODES); | ||||
| 
 | ||||
| 	// Although not strictly required, bots often need this to work
 | ||||
| 	irc_send_lusers (c); | ||||
| 	irc_send_motd (c); | ||||
| 
 | ||||
| 	char *mode = client_get_mode (c); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user