If you are using more than just !lol (such as !lol this is fun), then do this.
on *:TEXT:!lol*:?: msg $nick lol
Also, make sure you don't have this inside another script that is also using on text, where the commands overlap.
Example:
on *:text:*:*:{} cannot be in the same script twice. Only the first would work.
Yes, you can send $N parameters. $1 in this case would be "!lol". Then, your $2 is "this", $3 is "is", $4 is "fun".
And, of course, you can use ranges... $2-3 is "this is", and $2- is "this is fun".