If-then-else statements

 

The If-then-else statement allows you to compare values and execute different parts of a script based on that comparison.

 

Basic format

 

if (v1 operator v2) { commands }

elseif (v1 operator v2) { commands }

else { commands }

 

The ( ) brackets enclose comparisons, whereas the { } brackets enclose the commands you want to be performed if a comparison is true. You must make sure that the number of ( ) and { } brackets match to make sure that the correct comparisons are made, and that the correct commands are executed.

 

Using brackets speeds up processing. If an alias uses too few brackets then the statement might be ambiguous and the alias will take longer to parse, might be parsed incorrectly, or might not be parsed at all.

 

You can nest as many if-then-else statements as you want inside each other.

 

The Operators

 

       ==        equal to

       ===        equal to (case-sensitive)

       !=        not equal to

       <        less than

       >        larger than

       >=        larger than or equal to

       <=        smaller than or equal to

       //        v2 is a multiple of v1

       \\        v2 is not a multiple of v1

       &        bitwise comparison

 

       isin        string v1 is in string v2

       isincs        string v1 is in string v2 (case sensitive)

       iswm        wildcard string v1 matches string v2

       iswmcs        wildcard string v1 matches string v2 (case sensitive)

       isnum        number v1 is a number in the range v2 which is in the form n1-n2 (v2 optional)

       isletter        letter v1 is a letter in the list of letters in v2 (v2 optional)

       isalnum        text contains only letters and numbers

       isalpha        text contains only letters

       islower        text contains only lower case letters

       isupper        text contains only upper case letters

 

       ison        nickname v1 is on channel v2

       isop        nickname v1 is an op on channel v2

       ishop        nickname v1 is a halfop on channel v2

       isvoice        nickname v1 has a voice on channel v2

       isreg        nickname v1 is a normal nick on channel v2

       ischan        if v1 is a channel which you are on.

       isban        if v1 is a banned address in internal ban list on channel v2

       isinvite        if v1 is on the invite list of channel v2

       isexcept        if v1 is on the except list of channel v2

 

       isaop        if v1 is a user in your auto-op list for channel v2 (v2 optional)

       isavoice        if v1 is a user in your auto-voice list for channel v2 (v2 optional)

       isignore        if v1 is a user in your ignore list with the ignore switch v2 (v2 optional)

       isprotect        if v1 is a user in your protect list for channel v2 (v2 optional)

       isnotify        if v1 is a user in your notify list.

 

To negate an operator you can prefix it with an ! exclamation mark.

 

$v1 & $v2

Returns the first and second parameters of an if-then-else comparison. So, in the case of this comparison:

 

if (text isin sometext) { ... }

 

$v1 will return "text" and $v2 will return "sometext".

 

Combining comparisons

You can combine comparisons by using the && for AND and || for OR characters.

 

number {

 if (($1 > 0) && ($1 < 10)) {

   if ($1 < 5) echo Number is less than five

   else echo Number is greater than five

 }

 else echo Number is out of bounds

}

 

This alias checks if the number you specify, when you type /number <value>, lies within the required range.

 

The ! not prefix

You can use the ! prefix in front of variables and identifiers in an if-then-else statement to negate a value. The following statements are equivalent.

 

if (%x == $null) echo x has no value

 

if (!%x) echo x has no value

 

Examples

 

listops {

 echo 4 * Listing Ops on #

 set %i 1

 :next

 set %nick $nick(#,%i)

 if %nick == $null goto done

 if %nick isop # echo 3 %nick is an Op!

 inc %i

 goto next

 :done

 echo 4 * End of Ops list

}

 

This alias lists the Ops on the current channel. It does this the hard way since we could just use $opnick() instead but using $nick() serves as an example of how isop can be used and how $null is returned once we reach the end of the list.

 

GiveOps {

 %i = 0

 %nicks = ""

 :nextnick

 inc %i

 if ($snick(#,%i) == $null) { if ($len(%nicks) > 0) mode # +oooo %nicks | halt }

 %nicks = %nicks $snick(#,%i)

 if (4 // %i) { mode # +oooo %nicks | %nicks = "" }

 goto nextnick

}

 

This is a popup definition which Ops the nicknames which are selected in the current channel nicknames listbox.

 

on 1:ctcpreply:PING* {

 if ($2 == $null) halt

 else {

   %pt = $ctime - $2

   if (%pt < 0) set %pt 0

   if (%pt < 5) echo 4 [PING reply] $nick is too close for comfort

   elseif (%pt < 20) echo 4 [PING reply] $nick is at just about the right distance

   else echo 4 [PING reply] Earth to $nick earth to $nick

 }

 halt

}

 

This intercepts a ping reply and prints out a message based on how far away the person is.