hmm, I stand corrected

sample
Code:
on ^*:text:*:#:{
  echo -a $nick $1-
  haltdef
}

VS doing:

on *:text:*:#:{
  echo -a $nick $1-
  halt
}

the haltdef worked where the halt did not (for me in 6.16)
so if the haltdef is not working for you the way you want is there some other script that is handling channel text and conflicting?

Maybe change yours a bit:
on ^*:text:*:#: {
if ($nick == BADBOT) {
iline @badbot 1 $nick - $1-
haltdef
}
}
to
on ^*:text:*:#: {
if ($nick == BADBOT) {
iline @badbot 1 $nick - $1-
}
haltdef
}