- ptr = Channel_UserModes(chan, Peer);
- target_modes = Channel_UserModes(chan, Target);
- while(*ptr) {
- /* Owner can kick everyone */
- if ( *ptr == 'q') {
- can_kick = true;
- break;
- }
- /* Admin can't kick owner */
- if ( *ptr == 'a' ) {
- if (!strchr(target_modes, 'q')) {
- can_kick = true;
- break;
- }
- }
- /* Op can't kick owner | admin */
- if ( *ptr == 'o' ) {
- if (!strchr(target_modes, 'q') &&
- !strchr(target_modes, 'a')) {
- can_kick = true;
- break;
- }
- }
- /* Half Op can't kick owner | admin | op */
- if ( *ptr == 'h' ) {
- if (!strchr(target_modes, 'q') &&
- !strchr(target_modes, 'a') &&
- !strchr(target_modes, 'o')) {
- can_kick = true;
- break;
- }
- }
- ptr++;
- }
+
+ /* Owner can kick everyone */
+ if (Channel_UserHasMode(chan, Peer, 'q'))
+ can_kick = true;
+
+ /* Admin can't kick owner */
+ else if (Channel_UserHasMode(chan, Peer, 'a') &&
+ !Channel_UserHasMode(chan, Target, 'q'))
+ can_kick = true;
+
+ /* Op can't kick owner | admin */
+ else if (Channel_UserHasMode(chan, Peer, 'o') &&
+ !Channel_UserHasMode(chan, Target, 'q') &&
+ !Channel_UserHasMode(chan, Target, 'a'))
+ can_kick = true;
+
+ /* Half Op can't kick owner | admin | op */
+ else if (Channel_UserHasMode(chan, Peer, 'h') &&
+ !Channel_UserHasMode(chan, Target, 'q') &&
+ !Channel_UserHasMode(chan, Target, 'a') &&
+ !Channel_UserHasMode(chan, Target, 'o'))
+ can_kick = true;