ELSEIF is a better method of doing multiple IF|HALT's. As we stated many times, don't use HALT. If you actually need to halt a script, use RETURN. But for a script that you want to stop after the first IF matches, use ELSEIF. Only do multiple IFs if you want them ALL to check even if the first one(s) match. Of course, if you couldn't remember, you could have just tried it...
If you want to use # and ? together, just do a check inside the script in the part(s) that are different...
if ($chan) { do the part for channels }
else { do the part for queries }
Note that you can just stick to # and ? without using *. This keeps you from trying to respond to dcc chats and such.
on *:text:whatever:#,?: { }