- Timestamp:
- 2008-02-09T17:58:13Z (16 years ago)
- Branches:
- master
- Children:
- f55cfe9
- Parents:
- a13855a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
set.c
ra13855a r5a71d9c 209 209 } 210 210 211 char *set_eval_op s( set_t *set, char *value )211 char *set_eval_op_root( set_t *set, char *value ) 212 212 { 213 213 irc_t *irc = set->data; 214 215 if( g_strcasecmp( value, "user" ) == 0 ) 216 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 217 irc->channel, "+o-o", irc->nick, irc->mynick ); 218 else if( g_strcasecmp( value, "root" ) == 0 ) 219 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 220 irc->channel, "-o+o", irc->nick, irc->mynick ); 221 else if( g_strcasecmp( value, "both" ) == 0 ) 222 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 223 irc->channel, "+oo", irc->nick, irc->mynick ); 224 else if( g_strcasecmp( value, "none" ) == 0 ) 225 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 226 irc->channel, "-oo", irc->nick, irc->mynick ); 214 char *ret = set_eval_bool(set, value); 215 int b = bool2int(ret); 216 217 irc_write( irc, ":%s!%s@%s MODE %s %s %s", irc->mynick, irc->mynick, irc->myhost, 218 irc->channel, b?"+o":"-o", irc->mynick ); 219 return ret; 220 } 221 222 char *set_eval_op_user( set_t *set, char *value ) 223 { 224 irc_t *irc = set->data; 225 char *ret = set_eval_bool(set, value); 226 int b = bool2int(ret); 227 228 irc_write( irc, ":%s!%s@%s MODE %s %s %s", irc->mynick, irc->mynick, irc->myhost, 229 irc->channel, b?"+o":"-o", irc->nick ); 230 return ret; 231 } 232 233 /* generalized version of set_eval_op/voice_buddies */ 234 char *set_eval_mode_buddies( set_t *set, char *value, char modeflag ) 235 { 236 irc_t *irc = set->data; 237 char op[64], deop[64]; 238 int nop=0, ndeop=0; 239 user_t *u; 240 int mode; 241 242 if(!strcmp(value, "false")) 243 mode=0; 244 else if(!strcmp(value, "encrypted")) 245 mode=1; 246 else if(!strcmp(value, "trusted")) 247 mode=2; 248 else if(!strcmp(value, "notaway")) 249 mode=3; 227 250 else 228 251 return NULL; 229 252 253 /* sorry for calling them op/deop - too lazy for search+replace :P */ 254 op[0]='\0'; 255 deop[0]='\0'; 256 for(u=irc->users; u; u=u->next) { 257 /* we're only concerned with online buddies */ 258 if(!u->ic || !u->online) 259 continue; 260 261 /* just in case... */ 262 if(strlen(u->nick) >= 64) 263 continue; 264 265 /* dump out ops/deops when the corresponding name list fills up */ 266 if(strlen(op)+strlen(u->nick)+2 > 64) { 267 char *flags = g_strnfill(nop, modeflag); 268 irc_write( irc, ":%s!%s@%s MODE %s +%s%s", irc->mynick, irc->mynick, irc->myhost, 269 irc->channel, flags, op ); 270 op[0]='\0'; 271 g_free(flags); 272 } 273 if(strlen(deop)+strlen(u->nick)+2 > 64) { 274 char *flags = g_strnfill(ndeop, modeflag); 275 irc_write( irc, ":%s!%s@%s MODE %s -%s%s", irc->mynick, irc->mynick, irc->myhost, 276 irc->channel, flags, deop ); 277 deop[0]='\0'; 278 g_free(flags); 279 } 280 281 switch(mode) { 282 /* "false" */ 283 case 0: 284 g_strlcat(deop, " ", 64); 285 g_strlcat(deop, u->nick, 64); 286 ndeop++; 287 break; 288 /* "encrypted" */ 289 case 1: 290 if(u->encrypted) { 291 g_strlcat(op, " ", 64); 292 g_strlcat(op, u->nick, 64); 293 nop++; 294 } else { 295 g_strlcat(deop, " ", 64); 296 g_strlcat(deop, u->nick, 64); 297 ndeop++; 298 } 299 break; 300 /* "trusted" */ 301 case 2: 302 if(u->encrypted > 1) { 303 g_strlcat(op, " ", 64); 304 g_strlcat(op, u->nick, 64); 305 nop++; 306 } else { 307 g_strlcat(deop, " ", 64); 308 g_strlcat(deop, u->nick, 64); 309 ndeop++; 310 } 311 break; 312 /* "notaway" */ 313 case 3: 314 if(u->away) { 315 g_strlcat(deop, " ", 64); 316 g_strlcat(deop, u->nick, 64); 317 ndeop++; 318 } else { 319 g_strlcat(op, " ", 64); 320 g_strlcat(op, u->nick, 64); 321 nop++; 322 } 323 } 324 } 325 /* dump anything left in op/deop lists */ 326 if(*op) { 327 char *flags = g_strnfill(nop, modeflag); 328 irc_write( irc, ":%s!%s@%s MODE %s +%s%s", irc->mynick, irc->mynick, irc->myhost, 329 irc->channel, flags, op ); 330 g_free(flags); 331 } 332 if(*deop) { 333 char *flags = g_strnfill(ndeop, modeflag); 334 irc_write( irc, ":%s!%s@%s MODE %s -%s%s", irc->mynick, irc->mynick, irc->myhost, 335 irc->channel, flags, deop ); 336 g_free(flags); 337 } 338 230 339 return value; 340 } 341 342 char *set_eval_op_buddies( set_t *set, char *value ) 343 { 344 return set_eval_mode_buddies(set, value, 'o'); 345 } 346 347 char *set_eval_voice_buddies( set_t *set, char *value ) 348 { 349 return set_eval_mode_buddies(set, value, 'v'); 231 350 } 232 351
Note: See TracChangeset
for help on using the changeset viewer.