Sorry, didn't think about if a person gets opped. Here you are:

Code:
on *:join:#chan: {
  write joinlist.txt $nick
}

on *:op:#chan: {
  if ($read(joinlist.txt,w,$nick)) { write -dl $readn joinlist.txt }
}

on *:part:#chan: {
  if ($read(joinlist.txt,w,$nick)) { write -dl $readn joinlist.txt }
}

on *:quit: {
  if ($read(joinlist.txt,w,$nick)) { write -dl $readn joinlist.txt }
}

on *:text:!next:#chan: {
  if ($nick isop $chan) {
    if ($lines(joinlist.txt) == 0) { msg $chan No users waiting for help. | return }
    set %help.next $read(joinlist.txt,1)
    while (%help.next !ison $chan) {
      write -dl1 joinlist.txt
      if ($lines(joinlist.txt) == 0) { msg $chan No users waiting for help. | return }
      set %help.next $read(joinlist.txt,1)
    }
    mode $chan +v %help.next
    msg $chan %help.next $+ , how may we help you?
  }
}

on *:text:!done:#chan: {
  if ($nick isop $chan) {
    if (%help.next ison $chan) { ban -ku10 $chan %help.next }
  }
}


That will fix the problem if someone's opped after joining the channel.