There's a small problem with your code in that it will attempt to voice an user if you do a CTCP VERSION the manual way. You should use a flag variable to prevent this.

Code:
on 1:CTCPREPLY:VERSION*:{
  if (%flag) {
    var %ver $1-
    if ( %ver == %versioninfo ) goto AOK
    goto NOTOK
    :AOK
    /mode %voiceroom +v $nick
    :NOTOK
  }
  unset %flag
}

on *:JOIN:#:{
  if ( %versionnick isin $nick ) goto Checkit
  goto nocheck
  :checkit
  set %flag $true
  /ctcp $nick version
  :nocheck
}