diff options
-rw-r--r-- | irc.c | 46 |
1 files changed, 35 insertions, 11 deletions
@@ -640,13 +640,45 @@ void irc_write_all( int now, char *format, ... ) return; } +const char *user_mode_prefix( irc_t *irc, user_t *u ) +{ + static char op[] = "@"; + static char halfop[] = "%"; + static char voice[] = "+"; + static char none[] = ""; + + int or = set_getbool(&irc->set, "op_root"); + int ou = set_getbool(&irc->set, "op_user"); + char *ob = set_getstr(&irc->set, "op_buddies"); + char *hb = set_getstr(&irc->set, "halfop_buddies"); + char *vb = set_getstr(&irc->set, "voice_buddies"); + + if( (!strcmp(u->nick, irc->mynick) && or) || + (!strcmp(u->nick, irc->nick) && ou) || + (!u->away && !strcmp(ob, "notaway")) || + (u->encrypted && !strcmp(ob, "encrypted")) || + (u->encrypted>1 && !strcmp(ob, "trusted")) + ) + return op; + else if( (!u->away && !strcmp(hb, "notaway")) || + (u->encrypted && !strcmp(hb, "encrypted")) || + (u->encrypted>1 && !strcmp(hb, "trusted")) + ) + return halfop; + else if( (!u->away && !strcmp(vb, "notaway")) || + (u->encrypted && !strcmp(vb, "encrypted")) || + (u->encrypted>1 && !strcmp(vb, "trusted")) + ) + return voice; + else + return none; +} + void irc_names( irc_t *irc, char *channel ) { user_t *u; char namelist[385] = ""; struct groupchat *c = NULL; - char *oo = set_getstr(&irc->set, "op_buddies"); - char *vo = set_getstr(&irc->set, "voice_buddies"); /* RFCs say there is no error reply allowed on NAMES, so when the channel is invalid, just give an empty reply. */ @@ -661,15 +693,7 @@ void irc_names( irc_t *irc, char *channel ) *namelist = 0; } - if( u->ic && !u->away && !strcmp(vo, "notaway") ) - strcat( namelist, "+" ); - else if( ( strcmp( u->nick, irc->mynick ) == 0 && set_getbool(&irc->set, "op_root") ) || - ( strcmp( u->nick, irc->nick ) == 0 && set_getbool(&irc->set, "op_user") ) || - ( !u->away && !strcmp(oo, "notaway") ) || - ( u->encrypted>1 && !strcmp(oo, "trusted") ) || - ( u->encrypted && !strcmp(oo, "encrypted") ) ) - strcat( namelist, "@" ); - + strcat( namelist, user_mode_prefix(irc, u) ); strcat( namelist, u->nick ); strcat( namelist, " " ); } |