- switch (*mode_change++) {
- case 0: case ' ': return;
- case '+': add = 1; break;
- case '-': add = 0; break;
- case 'o':
- do_user_mode(FLAGS_OPER);
- if (add) {
- userList_append(&curr_opers, user);
- call_oper_funcs(user);
- } else {
- userList_remove(&curr_opers, user);
- }
- break;
- case 'i': do_user_mode(FLAGS_INVISIBLE);
- if (add)
+ switch (*mode_change++) {
+ case 0: case ' ': return;
+ case '+': add = 1; break;
+ case '-': add = 0; break;
+ case 'o':
+ do_user_mode(FLAGS_OPER);
+ if (!add) {
+ userList_remove(&curr_opers, user);
+ } else if (!userList_contains(&curr_opers, user)) {
+ userList_append(&curr_opers, user);
+ call_oper_funcs(user);
+ }
+ break;
+ case 'i': do_user_mode(FLAGS_INVISIBLE);
+ if (add)