Rather than use $read() I would suggest using $ini() for checking the existence of a topic in the ini file, it's more suitable:

Code:
on *:TEXT:!faq *:#MY_CHAN:{
  var %f = file.txt, %x = $replace($2-,$chr(32),_)
  if ($ini(%f,%x)) {
    .play $+(-t,%x) # %f
  }
}


There's also no need to check $isfile() before using $ini() or $read(). mIRC is a pretty relaxed scripting language and does a lot of internal error checking. It doesn't raise an error if you try to read a file that doesn't exist. Try it: //noop $read(nonexistentfile.mrc)