#include "portab.h"
-static char UNUSED id[] = "$Id: irc-channel.c,v 1.26 2004/03/11 22:16:31 alex Exp $";
+static char UNUSED id[] = "$Id: irc-channel.c,v 1.28 2005/03/02 16:35:11 alex Exp $";
#include "imp.h"
#include <assert.h>
}
}
- /* Lokaler Client? */
+ /* Local client? */
if( Client_Type( Client ) == CLIENT_USER )
{
/* Test if the user has reached his maximum channel count */
}
}
}
+ else
+ {
+ /* Remote server: we don't need to know whether the
+ * client is invited or not, but we have to make sure
+ * that the "one shot" entries (generated by INVITE
+ * commands) in this list become deleted when a user
+ * joins a channel this way. */
+ chan = Channel_Search( channame );
+ if( chan != NULL ) (VOID)Lists_CheckInvited( target, chan );
+ }
/* Channel joinen (und ggf. anlegen) */
if( ! Channel_Join( target, channame ))
while( pattern )
{
- /* alle Channel durchgehen */
+ /* Loop through all the channels */
chan = Channel_First( );
while( chan )
{
- /* Passt die Suchmaske auf diesen Channel? */
+ /* Check search pattern */
if( Match( pattern, Channel_Name( chan )))
{
- /* Treffer! */
- if( ! IRC_WriteStrClient( from, RPL_LIST_MSG, from, Channel_Name( chan ), Channel_MemberCount( chan ), Channel_Topic( chan ))) return DISCONNECTED;
+ /* Gotcha! */
+ if( ! strchr( Channel_Modes( chan ), 's' ) ||
+ Channel_IsMemberOf( chan, from ))
+ {
+ if( ! IRC_WriteStrClient( from, RPL_LIST_MSG, from, Channel_Name( chan ), Channel_MemberCount( chan ), Channel_Topic( chan ))) return DISCONNECTED;
+ }
}
chan = Channel_Next( chan );
}