mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-31 14:02:59 +00:00 
			
		
		
		
	- IRC_INVITE() implementiert.
This commit is contained in:
		| @@ -9,7 +9,7 @@ | |||||||
|  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste |  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste | ||||||
|  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. |  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. | ||||||
|  * |  * | ||||||
|  * $Id: irc-op.c,v 1.2 2002/06/01 14:39:34 alex Exp $ |  * $Id: irc-op.c,v 1.3 2002/06/02 15:23:46 alex Exp $ | ||||||
|  * |  * | ||||||
|  * irc-op.c: Befehle zur Channel-Verwaltung |  * irc-op.c: Befehle zur Channel-Verwaltung | ||||||
|  */ |  */ | ||||||
| @@ -27,6 +27,7 @@ | |||||||
| #include "channel.h" | #include "channel.h" | ||||||
| #include "defines.h" | #include "defines.h" | ||||||
| #include "irc-write.h" | #include "irc-write.h" | ||||||
|  | #include "lists.h" | ||||||
| #include "log.h" | #include "log.h" | ||||||
| #include "messages.h" | #include "messages.h" | ||||||
| #include "parse.h" | #include "parse.h" | ||||||
| @@ -81,14 +82,56 @@ IRC_BAN( CLIENT *Client, REQUEST *Req ) | |||||||
| GLOBAL BOOLEAN | GLOBAL BOOLEAN | ||||||
| IRC_INVITE( CLIENT *Client, REQUEST *Req ) | IRC_INVITE( CLIENT *Client, REQUEST *Req ) | ||||||
| { | { | ||||||
|  | 	CHANNEL *chan; | ||||||
|  | 	CLIENT *target, *from; | ||||||
|  | 	BOOLEAN remember = FALSE; | ||||||
|  |  | ||||||
| 	assert( Client != NULL ); | 	assert( Client != NULL ); | ||||||
| 	assert( Req != NULL ); | 	assert( Req != NULL ); | ||||||
|  |  | ||||||
| 	/* Valider Client? */ | 	/* Valider Client? */ | ||||||
| 	if(( Client_Type( Client ) != CLIENT_USER ) && ( Client_Type( Client ) != CLIENT_SERVER )) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client )); | 	if(( Client_Type( Client ) != CLIENT_USER ) && ( Client_Type( Client ) != CLIENT_SERVER )) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client )); | ||||||
|  |  | ||||||
| 	/* Keine Parameter? */ | 	/* Falsche Anzahl Parameter? */ | ||||||
| 	if( Req->argc < 1 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); | 	if( Req->argc != 2 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); | ||||||
|  |  | ||||||
|  | 	if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); | ||||||
|  | 	else from = Client; | ||||||
|  | 	if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); | ||||||
|  | 	 | ||||||
|  | 	/* User suchen */ | ||||||
|  | 	target = Client_Search( Req->argv[0] ); | ||||||
|  | 	if( ! target ) return IRC_WriteStrClient( from, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->argv[0] ); | ||||||
|  |  | ||||||
|  | 	chan = Channel_Search( Req->argv[1] ); | ||||||
|  |  | ||||||
|  | 	if( chan ) | ||||||
|  | 	{ | ||||||
|  | 		/* Der Channel existiert bereits; ist der User Mitglied? */ | ||||||
|  | 		if( ! Channel_IsMemberOf( chan, from )) return IRC_WriteStrClient( from, ERR_NOTONCHANNEL_MSG, Client_ID( Client ), Req->argv[1] ); | ||||||
|  |  | ||||||
|  | 		/* Ist der Channel "invite-only"? */ | ||||||
|  | 		if( strchr( Channel_Modes( chan ), 'i' )) | ||||||
|  | 		{ | ||||||
|  | 			/* Ja. Der User muss Channel-Operator sein! */ | ||||||
|  | 			if( ! strchr( Channel_UserModes( chan, from ), 'o' )) return IRC_WriteStrClient( from, ERR_CHANOPRIVSNEEDED_MSG, Client_ID( from ), Channel_Name( chan )); | ||||||
|  | 			remember = TRUE; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		/* Ist der Ziel-User bereits Mitglied? */ | ||||||
|  | 		if( Channel_IsMemberOf( chan, target )) return IRC_WriteStrClient( from, ERR_USERONCHANNEL_MSG, Client_ID( from ), Req->argv[0], Req->argv[1] ); | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	Log( LOG_DEBUG, "User \"%s\" invites \"%s\" to \"%s\" ...", Client_Mask( from ), Req->argv[0], Req->argv[1] ); | ||||||
|  | 	IRC_WriteStrClientPrefix( target, from, "INVITE %s %s", Req->argv[0], Req->argv[1] ); | ||||||
|  | 	if( remember ) Lists_AddInvited( Client_Mask( target ), chan ); | ||||||
|  |  | ||||||
|  | 	if( Client_Conn( target ) > NONE ) | ||||||
|  | 	{ | ||||||
|  | 		/* lokaler Zeil-Client, Status-Code melden */ | ||||||
|  | 		if( ! IRC_WriteStrClientPrefix( from, from, RPL_INVITING_MSG, Client_ID( from ), Req->argv[0], Req->argv[1] )) return DISCONNECTED; | ||||||
|  | 	} | ||||||
| 	 | 	 | ||||||
| 	return CONNECTED; | 	return CONNECTED; | ||||||
| } /* IRC_INVITE */ | } /* IRC_INVITE */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton