Try those same items using these codes instead
on @ops:join:#: mode # +o $nick
on 5:text:!hello:#: .msg $chan Welcome dude :P
In the first one, you try to op $1, but at that point, $1 would be empty (ie: $null) and you can't op nothing
In teh second, you're missing the location parameter to indicate where the text has to be coming from (#/$chan for channel,? for pm/query,* for either)..also, you've got the $ on the wrong end of chan in the msg command.
With the alterations I made above (and the explanation, I hope) your PM blocker should be irrelevant to these matters.
For your PM blocker, you could use
Although, that's doing it the opposite way of your current code.
With that, only those with a friend level would be able to pm you, anyone else would just be ignored
For multiple levels, you can have multiple similar events, where only the access level is different. Additionally, if you were to use numeric levels, rather than words, then you could specify a minimum access level for a command.
There is a lot of information regarding access levels in the help file under /help Access Levels