diff options
| author | Alexander Barton <alex@barton.de> | 2012-09-11 12:30:19 +0200 |
|---|---|---|
| committer | Alexander Barton <alex@barton.de> | 2012-09-11 12:30:19 +0200 |
| commit | f37600ee01f6cfd86e8fa80f77ee26ebaf3012b2 (patch) | |
| tree | 1c1a9c7421b899a11a059b72615a7020b06ed7c2 /src/ngircd/irc-server.c | |
| parent | f38a9035e5439cb395b2de6b9bdfa36102bfe80c (diff) | |
| parent | 097c72aa65d9914d688eaece718648ca060e287a (diff) | |
| download | ngircd-f37600ee01f6cfd86e8fa80f77ee26ebaf3012b2.tar.gz ngircd-f37600ee01f6cfd86e8fa80f77ee26ebaf3012b2.zip | |
Merge branch 'xop' of https://github.com/kart0ffelsack/ngircd into bug92-xop
* 'xop' of https://github.com/kart0ffelsack/ngircd: Tests and documentation for xop Implemented xop support Conflicts (because of merge of the 'cmode-M' branch): src/ngircd/channel.c src/ngircd/defines.h src/ngircd/messages.h
Diffstat (limited to 'src/ngircd/irc-server.c')
| -rw-r--r-- | src/ngircd/irc-server.c | 16 |
1 files changed, 13 insertions, 3 deletions
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 )); } |