CLIENT *from, *c;
int i;
CONN_ID con;
-
+
assert( Client != NULL );
assert( Req != NULL );
Conn_Close( Client_Conn( Client ), NULL, "Bad password", true);
return DISCONNECTED;
}
-
+
/* Is there a registered server with this ID? */
if( ! Client_CheckID( Client, Req->argv[0] )) return DISCONNECTED;
IRC_NJOIN( CLIENT *Client, REQUEST *Req )
{
char nick_in[COMMAND_LEN], nick_out[COMMAND_LEN], *channame, *ptr, modes[8];
- bool is_op, is_voiced;
+ bool is_owner, is_chanadmin, is_op, is_halfop, is_voiced;
CHANNEL *chan;
CLIENT *c;
-
+
assert( Client != NULL );
assert( Req != NULL );
ptr = strtok( nick_in, "," );
while( ptr )
{
- is_op = is_voiced = false;
-
+ is_owner = is_chanadmin = is_op = is_halfop = is_voiced = false;
+
/* cut off prefixes */
- while(( *ptr == '@' ) || ( *ptr == '+' ))
+ while(( *ptr == '~') || ( *ptr == '&' ) || ( *ptr == '@' ) ||
+ ( *ptr == '%') || ( *ptr == '+' ))
{
+ if( *ptr == '~' ) is_owner = true;
+ if( *ptr == '&' ) is_chanadmin = true;
if( *ptr == '@' ) is_op = true;
+ if( *ptr == 'h' ) is_halfop = true;
if( *ptr == '+' ) is_voiced = true;
ptr++;
}
Channel_Join( c, channame );
chan = Channel_Search( channame );
assert( chan != NULL );
-
+
+ if( is_owner ) Channel_UserModeAdd( chan, c, 'q' );
+ if( is_chanadmin ) Channel_UserModeAdd( chan, c, 'a' );
if( is_op ) Channel_UserModeAdd( chan, c, 'o' );
+ if( is_halfop ) Channel_UserModeAdd( chan, c, 'h' );
if( is_voiced ) Channel_UserModeAdd( chan, c, 'v' );
/* announce to channel... */
}
if( nick_out[0] != '\0' ) strlcat( nick_out, ",", sizeof( nick_out ));
+ if( is_owner ) strlcat( nick_out, "~", sizeof( nick_out ));
+ if( is_chanadmin ) strlcat( nick_out, "&", sizeof( nick_out ));
if( is_op ) strlcat( nick_out, "@", sizeof( nick_out ));
+ if( is_halfop ) strlcat( nick_out, "%", sizeof( nick_out ));
if( is_voiced ) strlcat( nick_out, "+", sizeof( nick_out ));
strlcat( nick_out, ptr, sizeof( nick_out ));
}
else Log( LOG_ERR, "Got NJOIN for unknown nick \"%s\" for channel \"%s\"!", ptr, channame );
-
+
/* search for next Nick */
ptr = strtok( NULL, "," );
}