has_mode() now accepts all modes
AutoVoice: trigger on joins; prune stale +v