X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fngircd%2Firc-server.c;fp=src%2Fngircd%2Firc-server.c;h=f9182d984ca9c2c6f1f743b419a198d89b31ada7;hb=f37600ee01f6cfd86e8fa80f77ee26ebaf3012b2;hp=8526a573ec361b0851222314343e079b447114f6;hpb=f38a9035e5439cb395b2de6b9bdfa36102bfe80c;p=ngircd-alex.git diff --git a/src/ngircd/irc-server.c b/src/ngircd/irc-server.c index 8526a573..f9182d98 100644 --- a/src/ngircd/irc-server.c +++ b/src/ngircd/irc-server.c @@ -203,7 +203,7 @@ GLOBAL bool 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; @@ -222,9 +222,13 @@ IRC_NJOIN( CLIENT *Client, REQUEST *Req ) is_op = 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++; } @@ -236,7 +240,10 @@ IRC_NJOIN( CLIENT *Client, REQUEST *Req ) 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... */ @@ -251,7 +258,10 @@ IRC_NJOIN( CLIENT *Client, REQUEST *Req ) } 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 )); }