- if(( Client_Type( Client ) != CLIENT_USER ) && ( Client_Type( Client ) != CLIENT_SERVER )) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client ));
-
- /* Falsche Anzahl Parameter? */
- if( Req->argc == 0 ) return IRC_WriteStrClient( Client, ERR_NORECIPIENT_MSG, Client_ID( Client ), Req->command );
- if( Req->argc == 1 ) return IRC_WriteStrClient( Client, ERR_NOTEXTTOSEND_MSG, Client_ID( Client ));
- if( Req->argc > 2 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
-
- if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_GetFromID( Req->prefix );
- else from = Client;
- if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix );
-
- cl = Client_Search( Req->argv[0] );
- if( cl )
- {
- /* Okay, Ziel ist ein User */
- if(( Client_Type( Client ) != CLIENT_SERVER ) && ( strchr( Client_Modes( cl ), 'a' )))
- {
- /* Ziel-User ist AWAY: Meldung verschicken */
- if( ! IRC_WriteStrClient( from, RPL_AWAY_MSG, Client_ID( from ), Client_ID( cl ), Client_Away( cl ))) return DISCONNECTED;
- }
-
- /* Text senden */
- if( Client_Conn( from ) > NONE ) Conn_UpdateIdle( Client_Conn( from ));
- return IRC_WriteStrClientPrefix( cl, from, "PRIVMSG %s :%s", Client_ID( cl ), Req->argv[1] );
- }
-
- chan = Channel_Search( Req->argv[0] );
- if( chan )
- {
- /* Okay, Ziel ist ein Channel */
- is_member = has_voice = is_op = FALSE;
- if( Channel_IsMemberOf( chan, from ))
- {
- is_member = TRUE;
- if( strchr( Channel_UserModes( chan, from ), 'v' )) has_voice = TRUE;
- if( strchr( Channel_UserModes( chan, from ), 'o' )) is_op = TRUE;
- }
-
- /* pruefen, ob Client in Channel schreiben darf */
- ok = TRUE;
- if( strchr( Channel_Modes( chan ), 'n' ) && ( ! is_member )) ok = FALSE;
- if( strchr( Channel_Modes( chan ), 'm' ) && ( ! is_op ) && ( ! has_voice )) ok = FALSE;
-
- if( ! ok ) return IRC_WriteStrClient( from, ERR_CANNOTSENDTOCHAN_MSG, Client_ID( from ), Req->argv[0] );
-
- /* Text senden */
- if( Client_Conn( from ) > NONE ) Conn_UpdateIdle( Client_Conn( from ));
- return IRC_WriteStrChannelPrefix( Client, chan, from, TRUE, "PRIVMSG %s :%s", Req->argv[0], Req->argv[1] );
- }