Difference between revisions of "How do I reop or unban myself"

From Scriptwiki
Jump to: navigation, search
 
m (added author-tag)
Line 76: Line 76:
  
 
[[Category:Tutorials]]
 
[[Category:Tutorials]]
 +
{{Author|Voronoi}}

Revision as of 15:00, 31 August 2005

This tutorial will help you create a script that gives you some basic protection. Whenever someone deops you in your channel, it will automatically ask L or Q to reop you again. Also, when someone bans you, it will attempt to unban you again. Difficulty: easy

First we'll look at how mIRC scripting actually handles these things. Whenever something happens (a message, a mode change, a kick and so on), your script can react to this. What you need are the so called remote events. You can read more about them by typing /help remote in a mIRC window. I suggest you do that right now.

As you can see, the helpfile recommends you read through documents on Commands, Aliases, Variables and Identifiers. Although it is always a good idea to do so, you might not fully understand what they do and how they work, so understanding all this is not required for this tutorial.

Besides this, you'll see two other things in the help file. One is a list with events, the other is a note at the end: Note: You should never load or use a script that you don't understand. Whatever you do, keep this in mind! Lots of users have their Q accounts compromised and other data lost, just because they run a false script.

Back to our problem. We want to get our ops back when someone removes it, so the event we need is the DeOp event. Click on it in the list. The on OP and on DEOP events trigger when a user on a channel is opped or deopped. Sound like it's exactly what we need. Have a look at the format and the example below it:

 Format: on <level>:OP:<#[,#]>:<commands>
 Example: on 1:OP:#mirc,#irchelp:/msg $nick Please don't abuse your Op status

(On OP and on DEOP work in a similar way. The helpfile has only one entry for both of them.)

The 1 in the example is a userlevel. Userlevel 1 means the event always triggers, no matter what level the deop'ing user has. the #mirc,#irchelp are obvioulsy channels the event should work for. Finally, the /msg $nick Please don't... part is the command that should be executed. $nick is an identifier. It returns something. If fishbot would have done the op, then mIRC would read the line as /msg fishbot Please don't... In words:

If someone with level 1 or higher (everyone) ops someone in #mirc or #irchelp, message him with Please don't abuse your Op status.

To use such an event, you'll need to paste it in Remote. Go to Tools -> Script editor or hit Alt + R. Should the field not be empty, then go to File and select New. If you'd want to use this event, you'd paste it in the large text field and press OK. For now, just press OK without pasting.

Let's say your channel is #mychannel. As we want this event to work for all userlevels too, we can make the biggest part of the event: on 1:DEOP:#mychannel:/command. The event can trigger more commands too. We're gonna change the format for that a bit:

on 1:DEOP:#mychannel:{
  command1
  command2
}

You might have seen the { } format before. Inside those, we can list as many commands as we want. Also, we don't have to use the / character in front of commands. Let's say your channel has L. One of the commands we need would be: msg L op #mychan Instead of #mychan, we can use another identifier. $chan returns the channel all this happens on, so let's change the command to msg L op $chan. This way you can use the same command for more than 1 channel.

Now we have another problem. If we'd use on 1:OP:#mychan:{ msg L op $chan }, it would send the message if someone else gets deopped too. That's why we're gonna limit it using an if-statement. Type /help /if now. if (v1 operator v2) { commands } The if-statement basically checks something. If what it checks is true, it executes some commands. If not, it either does nothing or goes to an else part. For now we won't use else parts.

What we wanted to check was if it was you who got deopped. As the help on the op/deop event said (/help on deop), $opnick returns the person who get's opped/deopped in those events. We'll need to use another identifier: $me. $me simply returns your own nickname. The if-statement we need would become if ($opnick == $me) { commands }. The == is an operator meaning 'equal to' and that's exactly what we want: "if (the person who gets deopped is equal to myself)"

Now, let's just put the if statement we just made inside the event:

on 1:DEOP:#mychannel:{
  if ($opnick == $me) {
    msg L op $chan
  }
}

This will do what we need. If you get deopped on your channel, it will ask L to reop you. Have a look at the spaces in front of each line. mIRC automatically adds them when you click OK or the { } button in the remote dialog. The { } button is really useful, because it lets mIRC check if you have placed the { and } brackets correctly. When you'll write bigger scripts, you'll start using it a lot.

We'll now create another event. We want it to unban you whenever you get banned on your channel. Let's start with having a look at what actually happens. When someone bans, he sets a banmask, for example *!milk@*.cows.net. This mask contains wildcards, which means it bans dynamically. A wildcard, *, can be replaced by anything: bill!milk@white.cows.net will for example be banned.

With help from the helpfile, we can easily create the following event:

on @1:BAN:#mychannel:{
  if ($bnick == $me) {
    mode $chan -b $banmask
  }
}

Use the helpfile if you don't understand parts of the event, just like we used it before. (/help on ban, /help prefixes, /help /mode)

This event will work in some cases, but unfortunately by far not in all. $bnick only works when a nick is specified inside the banmask, like: nick!*@*.*. There is another possibility though.

If we want your full address, we can use $address($me,5) or $ial($me). (Again, use /help $address or /help $ial if you want more info.)

We only used the == operator in if-statements until now. Now have a look at the iswm operator. It literally means is wildcard match. if (a*c iswm abc) would be true, if (ac* iswm abc) wouldn't.

Now, we can use this to check if the banmask matches your address; to check if 'you are banned':

on @1:BAN:#mychannel:{
  if ($banmask iswm $ial($me)) {
    mode $chan -b $banmask
  }
}

That will do the trick.

When you fully understand how these events work, you should also be able to create events that do these things:

- Kick someone who deops your friend - Only allow people with level 20 or higher to ban

Contributed by Voronoi