You'll need to put a small delay into your ON JOIN event, as any nick that joins is a regular user (no ops, no half-ops, no voice, etc.) at the time of joining.

Personally, I would leave your events as is, but add the following
Code:
on *:op:#:{
  if $($+(%,$wildsite,.rd),2) {
    unset $+(%,$wildsite,.rd)
  }
}
on *:serverop:#:{
  if $($+(%,$wildsite,.rd),2) {
    unset $+(%,$wildsite,.rd)
  }
}


That will unset the variable when the person is opped, if it hasn't already been unset via the -u switch.

One little note, and this is just my preference, for the BAN command in the ON PART event, I like to use
Code:
ban -u600 $nick 2
The usage of the 2 parameter in the $mask identifier, realistically nullifies the usage of $fulladdress, since you end up with the wildcarded address for the ban.

The reason I like doing it the way I showed, is that the $bnick identifier is filled when using that method, however, using your method, it is not.