Your requirements can be satisfied with a single line.

Code:
on @*:join:#:.timer 1 3 if ( $nick !isvoice # ) notice $nick $nick $+ , welcome to Derp! To get approved for voice, please message one of the ops after reading the Rules/FAQ.


$nick will not be evaluated in the timer because it's touching the opening parenthesis. You can't use the goto statement like that in the timer. Your else statement is not after the if statement. It is not appropriate to use a goto statement in this, and you should probably not be using them ever.

Is your intention to invite all users to #chan2 when they're oped/voiced on #chan1? Because your if statement is using the wrong channel (they will never be invited). This behavior seems unnecessary anyway.

There's no reason to require it to be put into aliases. Keep the script together.